From d85564c3e7f06b98ece52be50b3d5cae3bf92aff Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 12 Apr 2020 10:39:21 +0200 Subject: [PATCH 001/236] updated readme and added install script --- README.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ install.sh | 6 ++++++ 2 files changed, 64 insertions(+) create mode 100755 install.sh diff --git a/README.md b/README.md index 814459d8..74a824d0 100644 --- a/README.md +++ b/README.md @@ -193,3 +193,61 @@ mx --dynamicimports graalpython --cp-sfx `pwd`/mxbuild/dists/jdk1.8/grcuda.jar \ >>> da[0:10] [1.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] ``` + +## Step-by-step development guide + +* This section contains all the steps required to setup GrCUDA if your goal is to contribute to its development, or simply hack with it. This guide refers to GraalVM Community Edition JDK8 for Linux with `amd64` architectures, i.e. download releases prefixed with `graalvm-ce-java8-linux-amd64` or something like that. + +1. Get the source code of GrCUDA, graal, mx + + ``` + git clone https://github.com/oracle/graal.git + git clone https://github.com/graalvm/mx.git + git clone https://github.com/NVIDIA/grcuda.git (this can be replaced with a fork) + ``` + +2. Download the right JDK + * [Here](https://github.com/graalvm/openjdk8-jvmci-builder/releases/tag/jvmci-20.0-b02) you can find releases for GraalVM 20.0, but other versions are available on the same repository + +3. Download the right build for GraalVM + * [Here](https://github.com/graalvm/graalvm-ce-builds/releases) you can find releases for GraalVM 20.0, and more recent versions once they will become available + +4. Setup your CUDA environment + * Install CUDA and Nvidia drivers, for exampel following the steps [here](https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=CentOS&target_version=7&target_type=rpmnetwork) + * Add the following to your environment (assuming that you have installed CUDA in the default `/usr/local` location, and using the `nvcc` compiler + + ``` + export CUDA_DIR=/usr/local/cuda + export PATH=$PATH:$CUDA_DIR/bin + ``` + +5. Setup your GraalVM and GrCUDA environment + * Add the following to your environment (assuming you have installed the releases mentioned in step 2 and 3) + + ``` + export PATH=~/mx:$PATH + export JAVA_HOME=~/openjdk1.8.0_242-jvmci-20.0-b02 + export GRAAL_HOME=~/graalvm-ce-java8-20.0.0 + export GRAALVM_HOME=$GRAAL_HOME + export PATH=$GRAAL_HOME/bin:$PATH + export PATH=$JAVA_HOME/bin:$PATH + ``` + +6. Install languages for GraalVM (optional, but recommended) + ``` + gu available + gu install native-image + gu install llvm-toolchain + gu install python + gu rebuild-images polyglot + ``` + +7. Install GrCUDA with `./install.sh` + +8. Setup your IDE with `mx ideinit` + +9. Run tests with `mx unittest com.nvidia` + + + + diff --git a/install.sh b/install.sh new file mode 100755 index 00000000..5e87f8dc --- /dev/null +++ b/install.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +mx build; +mkdir -p $GRAAL_HOME/jre/languages/grcuda; +cp mxbuild/dists/jdk1.8/grcuda.jar $GRAAL_HOME/jre/languages/grcuda/.; + From b6d0caa3100c32e277a4df61bba084c62f8cde89 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 12 Apr 2020 12:34:59 +0200 Subject: [PATCH 002/236] added python pipeline example --- README.md | 7 ++ .../resources/python/examples/__init__.py | 0 .../resources/python/examples/pipeline_1.py | 116 ++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 projects/resources/python/examples/__init__.py create mode 100644 projects/resources/python/examples/pipeline_1.py diff --git a/README.md b/README.md index 74a824d0..77a29555 100644 --- a/README.md +++ b/README.md @@ -242,6 +242,13 @@ mx --dynamicimports graalpython --cp-sfx `pwd`/mxbuild/dists/jdk1.8/grcuda.jar \ gu rebuild-images polyglot ``` + * If Graalpython is installed, create a `virtualenv` for it + + ``` + graalpython -m venv ~/graalpython_venv + source ~/graalpython_venv/bin/activate + ``` + 7. Install GrCUDA with `./install.sh` 8. Setup your IDE with `mx ideinit` diff --git a/projects/resources/python/examples/__init__.py b/projects/resources/python/examples/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/projects/resources/python/examples/pipeline_1.py b/projects/resources/python/examples/pipeline_1.py new file mode 100644 index 00000000..2584cd87 --- /dev/null +++ b/projects/resources/python/examples/pipeline_1.py @@ -0,0 +1,116 @@ +import polyglot +import time +import math + +NUM_THREADS_PER_BLOCK = 128 + +SQUARE_KERNEL = """ + extern "C" __global__ void square(float* x, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + x[idx] = x[idx] * x[idx]; + } + } + """ + +DIFF_KERNEL = """ + extern "C" __global__ void diff(float* x, float* y, float* z, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + z[idx] = x[idx] - y[idx]; + } + } + """ + +REDUCE_KERNEL = """ + extern "C" __global__ void reduce(float *x, float *res, int n) { + __shared__ float cache[%d]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + cache[threadIdx.x] = x[i]; + } + __syncthreads(); + + // Perform tree reduction; + i = %d / 2; + while (i > 0) { + if (threadIdx.x < i) { + cache[threadIdx.x] += cache[threadIdx.x + i]; + } + __syncthreads(); + i /= 2; + } + if (threadIdx.x == 0) { + atomicAdd(res, cache[0]); + } + } + """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + +# Compute the sum of difference of squares of 2 vectors, using multiple GrCUDA kernels. +# Structure of the computation: +# A: x^2 ──┐ +# ├─> C: z=x-y ──> D: sum(z) +# B: x^2 ──┘ +if __name__ == "__main__": + N = 100000 + NUM_BLOCKS = (N + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + start_tot = time.time() + time_cumulative = 0 + + # Allocate 2 vectors; + start = time.time() + x = polyglot.eval(language="grcuda", string=f"float[{N}]") + y = polyglot.eval(language="grcuda", string=f"float[{N}]") + + # Allocate a support vector; + z = polyglot.eval(language="grcuda", string=f"float[{N}]") + res = polyglot.eval(language="grcuda", string=f"float[1]") + end = time.time() + time_cumulative += end - start + print(f"time to allocate arrays: {end - start:.4f} sec") + + # Fill the 2 vectors; + start = time.time() + for i in range(N): + x[i] = 1 / (i + 1) + y[i] = 2 / (i + 1) + res[0] = 0 + end = time.time() + time_cumulative += end - start + print(f"time to fill arrays: {end - start:.4f} sec") + + # A. B. Compute the squares of each vector; + + # First, build the kernel; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + square_kernel = build_kernel(SQUARE_KERNEL, "square", "pointer, sint32") + + # Call the kernel. The 2 computations are independent, and can be done in parallel; + start = time.time() + square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(x, N) + square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(y, N) + end = time.time() + time_cumulative += end - start + print(f"square, time: {end - start:.4f} sec") + + # C. Compute the difference of the 2 vectors. This must be done after the 2 previous computations; + start = time.time() + diff_kernel = build_kernel(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32") + diff_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(x, y, z, N) + end = time.time() + time_cumulative += end - start + print(f"diff, time: {end - start:.4f} sec") + + # D. Compute the sum of the result; + start = time.time() + reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32") + reduce_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(z, res, N) + end = time.time() + time_cumulative += end - start + print(f"reduce, time: {end - start:.4f} sec") + print(f"overheads, time: {end - start_tot - time_cumulative:.4f} sec") + print(f"total time: {end - start_tot:.4f} sec") + + result = res[0] + print(f"result={result:.4f}") From 3ee93d52ab454e7f385970966e1bcc2b9406e854 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 13 Apr 2020 10:27:24 +0200 Subject: [PATCH 003/236] adding project notes --- notes.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 notes.md diff --git a/notes.md b/notes.md new file mode 100644 index 00000000..a0cb09e1 --- /dev/null +++ b/notes.md @@ -0,0 +1,36 @@ +# Notes on GrCUDA architecture + + + +# Notes on GrCUDA extensions + +* Idea: keep a computational DAG that connects GPU computations expressed in GrCUDA and their dependencies + * Then use the DAG to schedule parallel computations on different streams and avoid synchronization when not necessary + * See `projects/resources/python/examples/pipeline_1.py` for an example + +* We need a class (e.g. `GpuExecutionContext`) that tracks GPU computational elements (i.e. `kernels`) declarations and invocations + * Ideally, when a new kernel is created, or when it is called, update the context with the new information + * Then the context will decide whether to execute it immediately or add a sync point (this could also be done in a different class, design is WIP) + +* What is a computational element in GrCUDA? + * `bindkernel`, `buildkernel` functions create a `Kernel` object that contains information about the signature and code + * `Kernel` is an executable `InteropLibrary` class that creates a `ConfiguredKernel` that contains information about the number of blocks, shared memory size, etc... + * `ConfiguredKernel` could also contain *dependency handles* specified by the programmer, or created internally + * Pro: easy to extend. Cons: it breaks the similarity with CUDA <<< ... >>> syntax + * Alternative: `ConfiguredKernel` can also be called with a single `Handle` parameter, and it will return a new `ConfiguredKernelWithHandle` that can be executed with the kernel args + * Kernel arguments are provided to `ConfiguredKernel` when it's executed, although they are also passed to the corresponding `Kernel` + * `DeviceArray` accesses can be done in any point, and are not represented as kernels (as they happen on CPU side, using managed memory) + * If a `DeviceArray` access happens between two kernels, we must keep the sync point + +* API: we can have explicit handles, or infer dependencies automatically + * Automatic dependency inferring is more interesting from a research perspective, and **cleaner** for end-users + * But more complex to implement, clearly + * By default, we need to have explicit sync points after every kernel call + * Automatic dependency inferring will remove some sync points if possible + * It must be a **white-listing** process, as we need to guarantee correctness + * The API needs ways to modify/turn off this policy, if desired + * Startup option? Easy, but cannot be modified + * Expose a function in the GrCUDA DSL? More flexibility, but changing options using the DSL is not very clean + * Problem: how to handle CPU control flow? In GrCUDA we are not aware of `if` and `for` loops on the host side + * The DAG cannot be build statically, we need to update it as we receive scheduling orders, and decide if we can execute or not + \ No newline at end of file From e8ac83141f668348b52f88bd9d9fb9c896d25b02 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 13 Apr 2020 12:09:23 +0200 Subject: [PATCH 004/236] updated project notes --- notes.md | 48 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/notes.md b/notes.md index a0cb09e1..ce12b4e2 100644 --- a/notes.md +++ b/notes.md @@ -1,7 +1,16 @@ # Notes on GrCUDA architecture +* The `nodes` package contains the basic Truffle nodes that define the language + * Not relevant to our goal, we can deal with already-parsed functions (e.g. `buildkernel`) and `InteropLibrary` objects +* The `function` package contains functions that can be invoked through the DSL, such as `buildkernel` + * We might want to add observers/callbacks in some of these functions, or do it directly in the `Kernel` constructor - +* `Namespace` handling: the `Namespace` class maintains a tree of functions (e.g. `buildkernel`) and other namespaces (e.g. `ML`) + * When `CallNode` is executed, we look for a function whose name matches the identifier of the `CallNode` + * If a function has a namespace, like `ML::cumlDpDbscanFit`, it is decomposed in multiple pieces (`ML` and `cumlDpDbscanFit`), and it is retrieved with a tree visit in the namespace + * Additional namespaces are created in `GrCUDAContext`, and a registry like `CUMLRegistry` adds functions to the namespace + * Each function in the registry is added to the namespace as an `ExternalFunction` + # Notes on GrCUDA extensions * Idea: keep a computational DAG that connects GPU computations expressed in GrCUDA and their dependencies @@ -12,25 +21,46 @@ * Ideally, when a new kernel is created, or when it is called, update the context with the new information * Then the context will decide whether to execute it immediately or add a sync point (this could also be done in a different class, design is WIP) -* What is a computational element in GrCUDA? - * `bindkernel`, `buildkernel` functions create a `Kernel` object that contains information about the signature and code +## What is a computational element in GrCUDA? + +`bindkernel`, `buildkernel` functions create a `Kernel` object that contains information about the signature and code * `Kernel` is an executable `InteropLibrary` class that creates a `ConfiguredKernel` that contains information about the number of blocks, shared memory size, etc... * `ConfiguredKernel` could also contain *dependency handles* specified by the programmer, or created internally * Pro: easy to extend. Cons: it breaks the similarity with CUDA <<< ... >>> syntax * Alternative: `ConfiguredKernel` can also be called with a single `Handle` parameter, and it will return a new `ConfiguredKernelWithHandle` that can be executed with the kernel args * Kernel arguments are provided to `ConfiguredKernel` when it's executed, although they are also passed to the corresponding `Kernel` - * `DeviceArray` accesses can be done in any point, and are not represented as kernels (as they happen on CPU side, using managed memory) - * If a `DeviceArray` access happens between two kernels, we must keep the sync point +`DeviceArray` accesses can be done in any point, and are not represented as kernels (as they happen on CPU side, using managed memory) + * If a `DeviceArray` access happens between two kernels, we must keep the sync point + * Similar considerations for `MultiDimDeviceArray`. We don't need to deal with inner dimensions, the top-level access is enough to keep a sync point +Pre-registered libraries, such as RAPIDS, can be called like `dbscan_func = polyglot.eval(language="grcuda", string="ML::cumlDpDbscanFit")` + * They are added to a namespace just like `buildkernel` + * They are retrieved using directly a `CallNode`, so we need to observe that too + * They are called accessing the `CUMLRegistry`, and other registries, as they aren't kernels, but `ExternalFunctions` + * `ExternalFunctions` are callable, and arguments are passed directly to them +Library functions (non-kernels) can also be loaded, using `BindFunction` + * This loads the function using NFI, and returns a callable object + * It is not clear how to handle calls to the callable object. It might be required to wrap it into a custom Truffle Node +Other stuff? E.g. `map` and `shred`, currently not documented + +## API Design -* API: we can have explicit handles, or infer dependencies automatically - * Automatic dependency inferring is more interesting from a research perspective, and **cleaner** for end-users +We can have explicit handles, or infer dependencies automatically + * Automatic dependency inferring is more interesting from a research perspective, and *cleaner* for end-users * But more complex to implement, clearly * By default, we need to have explicit sync points after every kernel call * Automatic dependency inferring will remove some sync points if possible - * It must be a **white-listing** process, as we need to guarantee correctness + * It must be a *white-listing* process, as we need to guarantee correctness * The API needs ways to modify/turn off this policy, if desired * Startup option? Easy, but cannot be modified * Expose a function in the GrCUDA DSL? More flexibility, but changing options using the DSL is not very clean * Problem: how to handle CPU control flow? In GrCUDA we are not aware of `if` and `for` loops on the host side * The DAG cannot be build statically, we need to update it as we receive scheduling orders, and decide if we can execute or not - \ No newline at end of file + +## Open questions + +1. What are `map` and `shred` functions? Are they exposed to the outside? +2. How to handle library functions? Wrapping them with a Truffle Node? +3. How to handle pre-registered libraries and external functions? Can we maybe use the same wrapping trick as library functions? +4. How do we modify kernel calls to add/remove sync points? +5. How do we execute kernels in parallel? We need to have streams +6. How do we monitor accesses to `DeviceArrays` to preserve sync points? \ No newline at end of file From 7c75b5f720841a0004ed06929e0087e73ccf60ce Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 13 Apr 2020 15:27:26 +0200 Subject: [PATCH 005/236] added abstract base array class, adding grcuda execution context --- notes.md | 13 ++- .../src/com/nvidia/grcuda/GrCUDALanguage.java | 1 + .../src/com/nvidia/grcuda/Namespace.java | 2 +- .../nvidia/grcuda/array/AbstractArray.java | 85 +++++++++++++++++++ .../grcuda/{ => array}/DeviceArray.java | 30 ++----- .../{ => array}/MultiDimDeviceArray.java | 45 +++++----- .../{ => array}/MultiDimDeviceArrayView.java | 10 ++- .../functions/DeviceArrayCopyFunction.java | 2 +- .../grcuda/functions/DeviceArrayFunction.java | 6 +- .../functions/MapDeviceArrayFunction.java | 2 +- .../grcuda/functions/map/ArgumentSet.java | 2 +- .../grcuda/functions/map/MapArgObject.java | 2 +- .../grcuda/functions/map/MapFunction.java | 2 +- .../grcuda/functions/map/ShreddedObject.java | 2 +- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 6 ++ .../src/com/nvidia/grcuda/gpu/Device.java | 2 +- .../grcuda/gpu/GrCUDAExecutionContext.java | 27 ++++++ .../src/com/nvidia/grcuda/gpu/Kernel.java | 6 +- .../com/nvidia/grcuda/nodes/ArrayNode.java | 9 +- 19 files changed, 184 insertions(+), 70 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/{ => array}/DeviceArray.java (95%) rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/{ => array}/MultiDimDeviceArray.java (91%) rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/{ => array}/MultiDimDeviceArrayView.java (96%) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java diff --git a/notes.md b/notes.md index ce12b4e2..e857dfa4 100644 --- a/notes.md +++ b/notes.md @@ -42,6 +42,10 @@ Library functions (non-kernels) can also be loaded, using `BindFunction` * It is not clear how to handle calls to the callable object. It might be required to wrap it into a custom Truffle Node Other stuff? E.g. `map` and `shred`, currently not documented +* We also need to keep track of `DeviceArrays` and `MultiDimDeviceArray`, and possibly of scalar values, to track dependencies + * How do we track scalar values? They are not handled as objects in GrCUDA + * One option is to turn them into size-1 arrays, and use `DeviceArrays`, or use some other wrapper function + ## API Design We can have explicit handles, or infer dependencies automatically @@ -55,7 +59,10 @@ We can have explicit handles, or infer dependencies automatically * Expose a function in the GrCUDA DSL? More flexibility, but changing options using the DSL is not very clean * Problem: how to handle CPU control flow? In GrCUDA we are not aware of `if` and `for` loops on the host side * The DAG cannot be build statically, we need to update it as we receive scheduling orders, and decide if we can execute or not - + * Problem: how do we identify if a parameter is read-only? If two kernels use the same parameter but only read from it, they can execute in parallel + * This is not trivial: LLVM can understand, for example, if a scalar value is read-only, but doing that with an array is not trivial + * Users might have to specify which parameters are read-only, which is still better than using handles + ## Open questions 1. What are `map` and `shred` functions? Are they exposed to the outside? @@ -63,4 +70,6 @@ We can have explicit handles, or infer dependencies automatically 3. How to handle pre-registered libraries and external functions? Can we maybe use the same wrapping trick as library functions? 4. How do we modify kernel calls to add/remove sync points? 5. How do we execute kernels in parallel? We need to have streams -6. How do we monitor accesses to `DeviceArrays` to preserve sync points? \ No newline at end of file +6. How do we monitor accesses to `DeviceArrays` to preserve sync points? +7. How do we track scalar values? +8. How to understand if a parameter is read-only? \ No newline at end of file diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java index dcf106ed..6aa368b6 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java @@ -28,6 +28,7 @@ */ package com.nvidia.grcuda; +import com.nvidia.grcuda.array.DeviceArray; import org.graalvm.options.OptionDescriptors; import com.nvidia.grcuda.nodes.ExpressionNode; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/Namespace.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/Namespace.java index 1bda731c..a69882c5 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/Namespace.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/Namespace.java @@ -31,7 +31,7 @@ import java.util.Optional; import java.util.TreeMap; -import com.nvidia.grcuda.DeviceArray.MemberSet; +import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.functions.Function; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.ArityException; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java new file mode 100644 index 00000000..a1e80361 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -0,0 +1,85 @@ +package com.nvidia.grcuda.array; + +import com.nvidia.grcuda.ElementType; +import com.nvidia.grcuda.gpu.CUDARuntime; +import com.oracle.truffle.api.interop.InteropLibrary; +import com.oracle.truffle.api.interop.InvalidArrayIndexException; +import com.oracle.truffle.api.interop.TruffleObject; +import com.oracle.truffle.api.interop.UnsupportedMessageException; +import com.oracle.truffle.api.library.ExportLibrary; +import com.oracle.truffle.api.library.ExportMessage; + +/** + * Simple wrapper around each class that represents device arrays in GrCUDA. + * It can be used to keep track of generic arrays during execution, and monitor dependencies. + */ +@ExportLibrary(InteropLibrary.class) +public abstract class AbstractArray implements TruffleObject { + + /** + * Reference to the underlying CUDA runtime that manages the array memory. + */ + protected final CUDARuntime runtime; + + /** + * Data type of elements stored in the array. + */ + protected final ElementType elementType; + + /** + * True IFF the array has been registered in {@link com.nvidia.grcuda.gpu.GrCUDAExecutionContext}. + * Used to avoid multiple registration; + */ + private boolean registeredInContext = false; + + public ElementType getElementType() { + return elementType; + } + + protected AbstractArray(CUDARuntime runtime, ElementType elementType) { + this.runtime = runtime; + this.elementType = elementType; + } + + /** + * Register the array in {@link com.nvidia.grcuda.gpu.GrCUDAExecutionContext} so that operations on this array + * can be monitored by the runtime. Registration must be done with a separate function at the end of concrete Array classes. + * This is done to avoid leaving the context in an inconsistent state if the concrete constructor throws an exception and fails. + */ + protected void registerArray() { + if (!this.registeredInContext) { + this.runtime.getExecutionContext().registerArray(this); + this.registeredInContext = true; + } + } + + // Implementation of InteropLibrary + + @ExportMessage + @SuppressWarnings("static-method") + boolean hasArrayElements() { + return true; + } + + @ExportMessage + Object readArrayElement(long index) throws UnsupportedMessageException, InvalidArrayIndexException { + return null; + } + + @ExportMessage + boolean isArrayElementReadable(long index) { + return false; + } + + /** + * Retrieve the total number of elements in the array, + * or the size of the current dimension for matrices and tensors + * + * @return the total number of elements in the array + */ + @ExportMessage + public abstract long getArraySize(); + + // TODO: equals must be smarter than checking memory address, as a MultiDimView should be considered as part of its parent + // The hash instead should be different. We might also not touch equals, and have another method "isPartOf" +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java similarity index 95% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/DeviceArray.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index eab0af72..8ebaa7aa 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -26,10 +26,11 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package com.nvidia.grcuda; +package com.nvidia.grcuda.array; import java.util.Arrays; +import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.functions.DeviceArrayCopyFunction; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.LittleEndianNativeArrayView; @@ -51,7 +52,7 @@ import com.oracle.truffle.api.profiles.ValueProfile; @ExportLibrary(InteropLibrary.class) -public final class DeviceArray implements TruffleObject { +public final class DeviceArray extends AbstractArray implements TruffleObject { private static final String POINTER = "pointer"; private static final String COPY_FROM = "copyFrom"; @@ -100,11 +101,6 @@ public boolean constainsValue(String name) { } } - private final CUDARuntime runtime; - - /** Data type of elements stored in the array. */ - private final ElementType elementType; - /** Total number of elements stored in the array. */ private final long numElements; @@ -117,14 +113,15 @@ public boolean constainsValue(String name) { private final LittleEndianNativeArrayView nativeView; public DeviceArray(CUDARuntime runtime, long numElements, ElementType elementType) { - this.runtime = runtime; + super(runtime, elementType); this.numElements = numElements; - this.elementType = elementType; this.sizeBytes = numElements * elementType.getSizeBytes(); - this.nativeView = runtime.cudaMallocManaged(this.sizeBytes); + this.nativeView = runtime.cudaMallocManaged(sizeBytes); + // Register the array in the GrCUDAExecutionContext; + this.registerArray(); } - long getSizeBytes() { + final long getSizeBytes() { return sizeBytes; } @@ -132,10 +129,6 @@ public long getPointer() { return nativeView.getStartAddress(); } - public ElementType getElementType() { - return elementType; - } - @Override public String toString() { return "DeviceArray(elementType=" + elementType + ", numElements=" + numElements + ", nativeView=" + nativeView + ')'; @@ -150,12 +143,7 @@ protected void finalize() throws Throwable { // Implementation of InteropLibrary @ExportMessage - @SuppressWarnings("static-method") - boolean hasArrayElements() { - return true; - } - - @ExportMessage + @Override public long getArraySize() { return numElements; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/MultiDimDeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java similarity index 91% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/MultiDimDeviceArray.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java index c1230f54..eb256be6 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/MultiDimDeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java @@ -26,10 +26,12 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package com.nvidia.grcuda; +package com.nvidia.grcuda.array; import java.util.Arrays; -import com.nvidia.grcuda.DeviceArray.MemberSet; + +import com.nvidia.grcuda.ElementType; +import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.LittleEndianNativeArrayView; import com.oracle.truffle.api.CompilerDirectives; @@ -44,16 +46,11 @@ import com.oracle.truffle.api.profiles.ValueProfile; @ExportLibrary(InteropLibrary.class) -public class MultiDimDeviceArray implements TruffleObject { +public class MultiDimDeviceArray extends AbstractArray implements TruffleObject { private static final MemberSet PUBLIC_MEMBERS = new MemberSet(); private static final MemberSet MEMBERS = new MemberSet("pointer"); - private final CUDARuntime runtime; - - /** Data type of the elements stored in the array. */ - private final ElementType elementType; - /** Number of elements in each dimension. */ private final long[] elementsPerDimension; @@ -61,7 +58,7 @@ public class MultiDimDeviceArray implements TruffleObject { private final long[] stridePerDimension; /** Total number of elements stored in the array. */ - private final long totalElementCount; + private final long numElements; /** true if data is stored in column-major format (Fortran), false row-major (C). */ private boolean columnMajor; @@ -71,6 +68,7 @@ public class MultiDimDeviceArray implements TruffleObject { public MultiDimDeviceArray(CUDARuntime runtime, ElementType elementType, long[] dimensions, boolean useColumnMajor) { + super(runtime, elementType); if (dimensions.length < 2) { CompilerDirectives.transferToInterpreter(); throw new IllegalArgumentException( @@ -85,14 +83,14 @@ public MultiDimDeviceArray(CUDARuntime runtime, ElementType elementType, long[] } prod *= n; } - this.runtime = runtime; - this.elementType = elementType; this.columnMajor = useColumnMajor; this.elementsPerDimension = new long[dimensions.length]; System.arraycopy(dimensions, 0, this.elementsPerDimension, 0, dimensions.length); this.stridePerDimension = computeStride(dimensions, columnMajor); - this.totalElementCount = prod; + this.numElements = prod; this.nativeView = runtime.cudaMallocManaged(getSizeBytes()); + // Register the array in the GrCUDAExecutionContext; + this.registerArray(); } private static long[] computeStride(long[] dimensions, boolean columnMajor) { @@ -147,22 +145,18 @@ final boolean isColumnMajorFormat() { return columnMajor; } - long getTotalElementCount() { - return totalElementCount; + long getNumElements() { + return numElements; } final long getSizeBytes() { - return totalElementCount * elementType.getSizeBytes(); + return numElements * elementType.getSizeBytes(); } public final long getPointer() { return nativeView.getStartAddress(); } - final ElementType getElementType() { - return elementType; - } - final LittleEndianNativeArrayView getNativeView() { return nativeView; } @@ -171,7 +165,7 @@ final LittleEndianNativeArrayView getNativeView() { public String toString() { return "MultiDimDeviceArray(elementType=" + elementType + ", dims=" + Arrays.toString(elementsPerDimension) + - ", Elements=" + totalElementCount + + ", Elements=" + numElements + ", size=" + getSizeBytes() + " bytes" + ", nativeView=" + nativeView + ')'; } @@ -186,25 +180,23 @@ protected void finalize() throws Throwable { // Implementation of InteropLibrary // - @ExportMessage - @SuppressWarnings("static-method") - boolean hasArrayElements() { - return true; - } @ExportMessage @SuppressWarnings("static-method") - long getArraySize() { + @Override + public long getArraySize() { return elementsPerDimension[0]; } @ExportMessage @SuppressWarnings("static-method") + @Override boolean isArrayElementReadable(long index) { return index >= 0 && index < elementsPerDimension[0]; } @ExportMessage + @Override Object readArrayElement(long index) throws InvalidArrayIndexException { if ((index < 0) || (index >= elementsPerDimension[0])) { CompilerDirectives.transferToInterpreter(); @@ -241,6 +233,7 @@ Object readMember(String member, } @ExportMessage + @SuppressWarnings("static-method") boolean isPointer() { return true; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/MultiDimDeviceArrayView.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java similarity index 96% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/MultiDimDeviceArrayView.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java index db8aeee2..c56a9742 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/MultiDimDeviceArrayView.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java @@ -26,7 +26,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package com.nvidia.grcuda; +package com.nvidia.grcuda.array; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; @@ -42,7 +42,7 @@ import com.oracle.truffle.api.profiles.ValueProfile; @ExportLibrary(InteropLibrary.class) -public final class MultiDimDeviceArrayView implements TruffleObject { +public final class MultiDimDeviceArrayView extends AbstractArray implements TruffleObject { private final MultiDimDeviceArray mdDeviceArray; private final int thisDimension; @@ -50,10 +50,13 @@ public final class MultiDimDeviceArrayView implements TruffleObject { private final long stride; MultiDimDeviceArrayView(MultiDimDeviceArray mdDeviceArray, int dim, long offset, long stride) { + super(mdDeviceArray.runtime, mdDeviceArray.elementType); this.mdDeviceArray = mdDeviceArray; this.thisDimension = dim; this.offset = offset; this.stride = stride; + // Register the array in the GrCUDAExecutionContext; + this.registerArray(); } public int getDimension() { @@ -85,7 +88,8 @@ boolean hasArrayElements() { } @ExportMessage - long getArraySize() { + @Override + public long getArraySize() { return mdDeviceArray.getElementsInDimension(thisDimension); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java index 3b287aed..11c58e0f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java @@ -27,7 +27,7 @@ */ package com.nvidia.grcuda.functions; -import com.nvidia.grcuda.DeviceArray; +import com.nvidia.grcuda.array.DeviceArray; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.interop.ArityException; import com.oracle.truffle.api.interop.InteropLibrary; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java index 47282c4a..4cfb447e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java @@ -31,12 +31,12 @@ import java.util.ArrayList; import java.util.Optional; -import com.nvidia.grcuda.DeviceArray; +import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.GrCUDAException; -import com.nvidia.grcuda.MultiDimDeviceArray; +import com.nvidia.grcuda.array.MultiDimDeviceArray; import com.nvidia.grcuda.TypeException; -import com.nvidia.grcuda.DeviceArray.MemberSet; +import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.gpu.CUDARuntime; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java index ff851ece..45bec9e8 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java @@ -30,7 +30,7 @@ import java.util.concurrent.ConcurrentHashMap; -import com.nvidia.grcuda.DeviceArray; +import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAException; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ArgumentSet.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ArgumentSet.java index 000c2a30..4be2aaa4 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ArgumentSet.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ArgumentSet.java @@ -29,7 +29,7 @@ import org.graalvm.collections.EconomicMap; -import com.nvidia.grcuda.DeviceArray.MemberSet; +import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.InteropLibrary; import com.oracle.truffle.api.interop.TruffleObject; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapArgObject.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapArgObject.java index eff3d35c..1822ff6c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapArgObject.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapArgObject.java @@ -29,7 +29,7 @@ import static com.nvidia.grcuda.functions.map.MapFunction.checkArity; -import com.nvidia.grcuda.DeviceArray.MemberSet; +import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapFunction.java index 7c0252cf..e673c373 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapFunction.java @@ -29,7 +29,7 @@ import java.util.Arrays; -import com.nvidia.grcuda.DeviceArray.MemberSet; +import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.GrCUDAInternalException; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ShreddedObject.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ShreddedObject.java index 3a828aef..0db6dcf9 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ShreddedObject.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ShreddedObject.java @@ -27,7 +27,7 @@ */ package com.nvidia.grcuda.functions.map; -import com.nvidia.grcuda.DeviceArray.MemberSet; +import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.InteropLibrary; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 14695dab..16c60ac4 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -63,6 +63,7 @@ public final class CUDARuntime { static final String NVRTC_LIBRARY_NAME = "nvrtc"; private final GrCUDAContext context; + private final GrCUDAExecutionContext executionContext; private final NVRuntimeCompiler nvrtc; /** @@ -77,6 +78,7 @@ public final class CUDARuntime { public CUDARuntime(GrCUDAContext context, Env env) { this.context = context; + this.executionContext = new GrCUDAExecutionContext(); try { TruffleObject libcudart = (TruffleObject) env.parseInternal( Source.newBuilder("nfi", "load " + "lib" + CUDA_RUNTIME_LIBRARY_NAME + ".so", "cudaruntime").build()).call(); @@ -98,6 +100,10 @@ public CUDARuntime(GrCUDAContext context, Env env) { // using this slow/uncached instance since all calls are non-critical private static final InteropLibrary INTEROP = InteropLibrary.getFactory().getUncached(); + public GrCUDAExecutionContext getExecutionContext() { + return executionContext; + } + interface CallSupport { String getName(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Device.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Device.java index ffd37e5f..13c5681c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Device.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Device.java @@ -28,7 +28,7 @@ */ package com.nvidia.grcuda.gpu; -import com.nvidia.grcuda.DeviceArray.MemberSet; +import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.NoneValue; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java new file mode 100644 index 00000000..a55a12b2 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -0,0 +1,27 @@ +package com.nvidia.grcuda.gpu; + +import com.nvidia.grcuda.array.AbstractArray; + +import java.util.HashSet; +import java.util.Set; + +/** + * Class used to monitor the state of GrCUDA execution, keep track of memory allocated, + * kernels and other executable functions, and dependencies between elements. + */ +public class GrCUDAExecutionContext { + + /** + * Set that contains all the arrays allocated so far. + */ + final private Set arraySet = new HashSet<>(); + + public GrCUDAExecutionContext() { + + } + + public void registerArray(AbstractArray array) { + arraySet.add(array); + System.out.println("-- added array to context: " + System.identityHashCode(array) + "; " + array.toString()); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index 6aefc307..e6114976 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -32,10 +32,10 @@ import java.io.IOException; import java.util.ArrayList; -import com.nvidia.grcuda.DeviceArray; -import com.nvidia.grcuda.DeviceArray.MemberSet; +import com.nvidia.grcuda.array.DeviceArray; +import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.GrCUDAInternalException; -import com.nvidia.grcuda.MultiDimDeviceArray; +import com.nvidia.grcuda.array.MultiDimDeviceArray; import com.nvidia.grcuda.gpu.UnsafeHelper.MemoryObject; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java index 870e1328..6950f85d 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java @@ -30,12 +30,13 @@ import java.util.ArrayList; -import com.nvidia.grcuda.DeviceArray; +import com.nvidia.grcuda.array.AbstractArray; +import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAInternalException; import com.nvidia.grcuda.GrCUDALanguage; -import com.nvidia.grcuda.MultiDimDeviceArray; +import com.nvidia.grcuda.array.MultiDimDeviceArray; import com.nvidia.grcuda.gpu.CUDARuntime; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.CachedContext; @@ -55,8 +56,8 @@ public abstract class ArrayNode extends ExpressionNode { } @Specialization - Object doDefault(VirtualFrame frame, - @CachedContext(GrCUDALanguage.class) GrCUDAContext context) { + AbstractArray doDefault(VirtualFrame frame, + @CachedContext(GrCUDALanguage.class) GrCUDAContext context) { final CUDARuntime runtime = context.getCUDARuntime(); long[] elementsPerDim = new long[sizeNodes.length]; int dim = 0; From f97da0eb0e22cc567f5d07e536166b70fee3a00d Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 13 Apr 2020 17:35:22 +0200 Subject: [PATCH 006/236] added kernel execution and collecting info about kernels --- .../nvidia/grcuda/gpu/ConfiguredKernel.java | 23 +++++++++--- .../grcuda/gpu/GrCUDAExecutionContext.java | 21 +++++++++++ .../src/com/nvidia/grcuda/gpu/Kernel.java | 24 ++++++++----- .../nvidia/grcuda/gpu/KernelExecution.java | 35 +++++++++++++++++++ 4 files changed, 90 insertions(+), 13 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java index a793d009..8573baf8 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java @@ -41,6 +41,7 @@ public class ConfiguredKernel implements TruffleObject { private final Kernel kernel; + private final KernelConfig config; public ConfiguredKernel(Kernel kernel, KernelConfig config) { @@ -56,13 +57,27 @@ boolean isExecutable() { @ExportMessage @TruffleBoundary Object execute(Object[] arguments, - @CachedLibrary(limit = "3") InteropLibrary int32Access, - @CachedLibrary(limit = "3") InteropLibrary int64Access, - @CachedLibrary(limit = "3") InteropLibrary doubleAccess) throws UnsupportedTypeException, ArityException { + @CachedLibrary(limit = "3") InteropLibrary int32Access, + @CachedLibrary(limit = "3") InteropLibrary int64Access, + @CachedLibrary(limit = "3") InteropLibrary doubleAccess) throws UnsupportedTypeException, ArityException { kernel.incrementLaunchCount(); try (KernelArguments args = kernel.createKernelArguments(arguments, int32Access, int64Access, doubleAccess)) { - kernel.getCudaRuntime().cuLaunchKernel(kernel, config, args); + new KernelExecution(this, args).execute(); +// kernel.getCudaRuntime().cuLaunchKernel(kernel, config, args); } return this; } + + public Kernel getKernel() { + return kernel; + } + + public KernelConfig getConfig() { + return config; + } + + @Override + public String toString() { + return "ConfiguredKernel(" + kernel.toString() + "; " + config.toString() + ")"; + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index a55a12b2..0c33cd1e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -16,6 +16,17 @@ public class GrCUDAExecutionContext { */ final private Set arraySet = new HashSet<>(); + /** + * Set that contains all the CUDA kernels declared so far. + */ + final private Set kernelSet = new HashSet<>(); + + /** + * Set that contains all the CUDA kernels execution so far. + * TODO: this should not be a set, but a DAG that can be used to handle dependencies + */ + final private Set kernelExecSet = new HashSet<>(); + public GrCUDAExecutionContext() { } @@ -24,4 +35,14 @@ public void registerArray(AbstractArray array) { arraySet.add(array); System.out.println("-- added array to context: " + System.identityHashCode(array) + "; " + array.toString()); } + + public void registerKernel(Kernel kernel) { + kernelSet.add(kernel); + System.out.println("-- added kernel to context: " + System.identityHashCode(kernel) + "; " + kernel.toString()); + } + + public void registerExecution(KernelExecution kernel) { + kernelExecSet.add(kernel); + System.out.println("-- executing kernel: " + System.identityHashCode(kernel) + "; " + kernel.toString()); + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index e6114976..fcfd9fc9 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -71,16 +71,12 @@ public Kernel(CUDARuntime cudaRuntime, String kernelName, CUDARuntime.CUModule k this.kernelFunction = kernelFunction; this.kernelSignature = kernelSignature; this.argumentTypes = parseSignature(kernelSignature); + this.cudaRuntime.getExecutionContext().registerKernel(this); } public Kernel(CUDARuntime cudaRuntime, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, String kernelSignature, String ptx) { - this.cudaRuntime = cudaRuntime; - this.kernelName = kernelName; - this.kernelModule = kernelModule; - this.kernelFunction = kernelFunction; - this.kernelSignature = kernelSignature; - this.argumentTypes = parseSignature(kernelSignature); + this(cudaRuntime, kernelName, kernelModule, kernelFunction, kernelSignature); this.ptxCode = ptx; } @@ -102,7 +98,7 @@ KernelArguments createKernelArguments(Object[] args, InteropLibrary int32Access, CompilerDirectives.transferToInterpreter(); throw ArityException.create(argumentTypes.length, args.length); } - KernelArguments kernelArgs = new KernelArguments(args.length); + KernelArguments kernelArgs = new KernelArguments(args); for (int argIdx = 0; argIdx < argumentTypes.length; argIdx++) { ArgumentType type = argumentTypes[argIdx]; try { @@ -349,11 +345,13 @@ Object execute(Object[] arguments, final class KernelArguments implements Closeable { + private final Object[] originalArgs; private final UnsafeHelper.PointerArray argumentArray; private final ArrayList argumentValues = new ArrayList<>(); - KernelArguments(int numArgs) { - this.argumentArray = UnsafeHelper.createPointerArray(numArgs); + KernelArguments(Object[] args) { + this.originalArgs = args; + this.argumentArray = UnsafeHelper.createPointerArray(args.length); } public void setArgument(int argIdx, MemoryObject obj) { @@ -365,6 +363,14 @@ long getPointer() { return argumentArray.getAddress(); } + public Object[] getOriginalArgs() { + return originalArgs; + } + + public Object getOriginalArg(int index) { + return originalArgs[index]; + } + @Override public void close() { this.argumentArray.close(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java new file mode 100644 index 00000000..44987d50 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -0,0 +1,35 @@ +package com.nvidia.grcuda.gpu; + +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * Class used to track the single execution of a {@link ConfiguredKernel}. + * The execution will be provided to the {@link GrCUDAExecutionContext} and scheduled accordingly. + */ +public class KernelExecution { + + private final Kernel kernel; + private final ConfiguredKernel configuredKernel; + private final KernelConfig config; + private final KernelArguments args; + + public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) { + this.configuredKernel = configuredKernel; + this.kernel = configuredKernel.getKernel(); + this.config = configuredKernel.getConfig(); + this.args = args; + } + + public void execute() { + kernel.getCudaRuntime().getExecutionContext().registerExecution(this); + kernel.getCudaRuntime().cuLaunchKernel(kernel, config, args); + } + + @Override + public String toString() { + return "KernelExecution(" + configuredKernel.toString() + "; args=[" + + Arrays.stream(args.getOriginalArgs()).map(a -> Integer.toString(System.identityHashCode(a))).collect(Collectors.joining(", ")) + + "])"; + } +} From 8e0053efd5f7a754f2f11b07f826dda3a9618e50 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 13 Apr 2020 17:46:04 +0200 Subject: [PATCH 007/236] fixed indentation on github --- notes.md | 90 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 47 insertions(+), 43 deletions(-) diff --git a/notes.md b/notes.md index e857dfa4..f14422bb 100644 --- a/notes.md +++ b/notes.md @@ -1,47 +1,51 @@ # Notes on GrCUDA architecture -* The `nodes` package contains the basic Truffle nodes that define the language - * Not relevant to our goal, we can deal with already-parsed functions (e.g. `buildkernel`) and `InteropLibrary` objects -* The `function` package contains functions that can be invoked through the DSL, such as `buildkernel` - * We might want to add observers/callbacks in some of these functions, or do it directly in the `Kernel` constructor +The `nodes` package contains the basic Truffle nodes that define the language + * Not relevant to our goal, we can deal with already-parsed functions (e.g. `buildkernel`) and `InteropLibrary` objects + +The `function` package contains functions that can be invoked through the DSL, such as `buildkernel` + * We might want to add observers/callbacks in some of these functions, or do it directly in the `Kernel` constructor -* `Namespace` handling: the `Namespace` class maintains a tree of functions (e.g. `buildkernel`) and other namespaces (e.g. `ML`) - * When `CallNode` is executed, we look for a function whose name matches the identifier of the `CallNode` - * If a function has a namespace, like `ML::cumlDpDbscanFit`, it is decomposed in multiple pieces (`ML` and `cumlDpDbscanFit`), and it is retrieved with a tree visit in the namespace - * Additional namespaces are created in `GrCUDAContext`, and a registry like `CUMLRegistry` adds functions to the namespace - * Each function in the registry is added to the namespace as an `ExternalFunction` +`Namespace` handling: the `Namespace` class maintains a tree of functions (e.g. `buildkernel`) and other namespaces (e.g. `ML`) + * When `CallNode` is executed, we look for a function whose name matches the identifier of the `CallNode` + * If a function has a namespace, like `ML::cumlDpDbscanFit`, it is decomposed in multiple pieces (`ML` and `cumlDpDbscanFit`), and it is retrieved with a tree visit in the namespace + * Additional namespaces are created in `GrCUDAContext`, and a registry like `CUMLRegistry` adds functions to the namespace + * Each function in the registry is added to the namespace as an `ExternalFunction` # Notes on GrCUDA extensions -* Idea: keep a computational DAG that connects GPU computations expressed in GrCUDA and their dependencies - * Then use the DAG to schedule parallel computations on different streams and avoid synchronization when not necessary - * See `projects/resources/python/examples/pipeline_1.py` for an example +Idea: keep a computational DAG that connects GPU computations expressed in GrCUDA and their dependencies + * Then use the DAG to schedule parallel computations on different streams and avoid synchronization when not necessary + * See `projects/resources/python/examples/pipeline_1.py` for an example -* We need a class (e.g. `GpuExecutionContext`) that tracks GPU computational elements (i.e. `kernels`) declarations and invocations - * Ideally, when a new kernel is created, or when it is called, update the context with the new information - * Then the context will decide whether to execute it immediately or add a sync point (this could also be done in a different class, design is WIP) +We need a class (e.g. `GpuExecutionContext`) that tracks GPU computational elements (i.e. `kernels`) declarations and invocations + * Ideally, when a new kernel is created, or when it is called, update the context with the new information + * Then the context will decide whether to execute it immediately or add a sync point (this could also be done in a different class, design is WIP) ## What is a computational element in GrCUDA? `bindkernel`, `buildkernel` functions create a `Kernel` object that contains information about the signature and code - * `Kernel` is an executable `InteropLibrary` class that creates a `ConfiguredKernel` that contains information about the number of blocks, shared memory size, etc... - * `ConfiguredKernel` could also contain *dependency handles* specified by the programmer, or created internally - * Pro: easy to extend. Cons: it breaks the similarity with CUDA <<< ... >>> syntax - * Alternative: `ConfiguredKernel` can also be called with a single `Handle` parameter, and it will return a new `ConfiguredKernelWithHandle` that can be executed with the kernel args - * Kernel arguments are provided to `ConfiguredKernel` when it's executed, although they are also passed to the corresponding `Kernel` + * `Kernel` is an executable `InteropLibrary` class that creates a `ConfiguredKernel` that contains information about the number of blocks, shared memory size, etc... + * `ConfiguredKernel` could also contain *dependency handles* specified by the programmer, or created internally + * Pro: easy to extend. Cons: it breaks the similarity with CUDA <<< ... >>> syntax + * Alternative: `ConfiguredKernel` can also be called with a single `Handle` parameter, and it will return a new `ConfiguredKernelWithHandle` that can be executed with the kernel args + * Kernel arguments are provided to `ConfiguredKernel` when it's executed, although they are also passed to the corresponding `Kernel` + `DeviceArray` accesses can be done in any point, and are not represented as kernels (as they happen on CPU side, using managed memory) - * If a `DeviceArray` access happens between two kernels, we must keep the sync point - * Similar considerations for `MultiDimDeviceArray`. We don't need to deal with inner dimensions, the top-level access is enough to keep a sync point + * If a `DeviceArray` access happens between two kernels, we must keep the sync point + * Similar considerations for `MultiDimDeviceArray`. We don't need to deal with inner dimensions, the top-level access is enough to keep a sync point + Pre-registered libraries, such as RAPIDS, can be called like `dbscan_func = polyglot.eval(language="grcuda", string="ML::cumlDpDbscanFit")` - * They are added to a namespace just like `buildkernel` - * They are retrieved using directly a `CallNode`, so we need to observe that too - * They are called accessing the `CUMLRegistry`, and other registries, as they aren't kernels, but `ExternalFunctions` - * `ExternalFunctions` are callable, and arguments are passed directly to them + * They are added to a namespace just like `buildkernel` + * They are retrieved using directly a `CallNode`, so we need to observe that too + * They are called accessing the `CUMLRegistry`, and other registries, as they aren't kernels, but `ExternalFunctions` + * `ExternalFunctions` are callable, and arguments are passed directly to them + Library functions (non-kernels) can also be loaded, using `BindFunction` - * This loads the function using NFI, and returns a callable object - * It is not clear how to handle calls to the callable object. It might be required to wrap it into a custom Truffle Node + * This loads the function using NFI, and returns a callable object + * It is not clear how to handle calls to the callable object. It might be required to wrap it into a custom Truffle Node + Other stuff? E.g. `map` and `shred`, currently not documented - * We also need to keep track of `DeviceArrays` and `MultiDimDeviceArray`, and possibly of scalar values, to track dependencies * How do we track scalar values? They are not handled as objects in GrCUDA * One option is to turn them into size-1 arrays, and use `DeviceArrays`, or use some other wrapper function @@ -49,19 +53,19 @@ Other stuff? E.g. `map` and `shred`, currently not documented ## API Design We can have explicit handles, or infer dependencies automatically - * Automatic dependency inferring is more interesting from a research perspective, and *cleaner* for end-users - * But more complex to implement, clearly - * By default, we need to have explicit sync points after every kernel call - * Automatic dependency inferring will remove some sync points if possible - * It must be a *white-listing* process, as we need to guarantee correctness - * The API needs ways to modify/turn off this policy, if desired - * Startup option? Easy, but cannot be modified - * Expose a function in the GrCUDA DSL? More flexibility, but changing options using the DSL is not very clean - * Problem: how to handle CPU control flow? In GrCUDA we are not aware of `if` and `for` loops on the host side - * The DAG cannot be build statically, we need to update it as we receive scheduling orders, and decide if we can execute or not - * Problem: how do we identify if a parameter is read-only? If two kernels use the same parameter but only read from it, they can execute in parallel - * This is not trivial: LLVM can understand, for example, if a scalar value is read-only, but doing that with an array is not trivial - * Users might have to specify which parameters are read-only, which is still better than using handles + * Automatic dependency inferring is more interesting from a research perspective, and *cleaner* for end-users + * But more complex to implement, clearly + * By default, we need to have explicit sync points after every kernel call + * Automatic dependency inferring will remove some sync points if possible + * It must be a *white-listing* process, as we need to guarantee correctness + * The API needs ways to modify/turn off this policy, if desired + * Startup option? Easy, but cannot be modified + * Expose a function in the GrCUDA DSL? More flexibility, but changing options using the DSL is not very clean + * Problem: how to handle CPU control flow? In GrCUDA we are not aware of `if` and `for` loops on the host side + * The DAG cannot be build statically, we need to update it as we receive scheduling orders, and decide if we can execute or not + * Problem: how do we identify if a parameter is read-only? If two kernels use the same parameter but only read from it, they can execute in parallel + * This is not trivial: LLVM can understand, for example, if a scalar value is read-only, but doing that with an array is not trivial + * Users might have to specify which parameters are read-only, which is still better than using handles ## Open questions @@ -72,4 +76,4 @@ We can have explicit handles, or infer dependencies automatically 5. How do we execute kernels in parallel? We need to have streams 6. How do we monitor accesses to `DeviceArrays` to preserve sync points? 7. How do we track scalar values? -8. How to understand if a parameter is read-only? \ No newline at end of file +8. How to understand if a parameter is read-only? From 3773e913554f0a783b538f57b0299473f638fa9b Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 14 Apr 2020 12:00:06 +0200 Subject: [PATCH 008/236] adding execution dag --- .../grcuda/test/gpu/ExecutionDAGTest.java | 75 ++++++ .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 213 ++++++++++++++++++ .../grcuda/gpu/GrCUDAExecutionContext.java | 14 +- .../nvidia/grcuda/gpu/KernelExecution.java | 13 ++ 4 files changed, 311 insertions(+), 4 deletions(-) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java new file mode 100644 index 00000000..223d7ded --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -0,0 +1,75 @@ +package com.nvidia.grcuda.test.gpu; + +import com.nvidia.grcuda.gpu.ConfiguredKernel; +import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.KernelExecution; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class ExecutionDAGTest { + + private static class KernelExecutionTest extends KernelExecution { + + List testArguments; + + KernelExecutionTest(List arguments) { + super(new ConfiguredKernel(null, null), null); + this.testArguments = arguments; + } + + @Override + public boolean hasDependency(KernelExecution other) { + return true; + } + } + + @Test + public void executionDAGConstructorTest() { + ExecutionDAG dag = new ExecutionDAG(); + assertTrue(dag.getVertices().isEmpty()); + assertTrue(dag.getEdges().isEmpty()); + assertTrue(dag.getFrontier().isEmpty()); + assertEquals(0, dag.getNumVertices()); + assertEquals(0, dag.getNumEdges()); + } + + @Test + public void addVertexToDAGTest() { + ExecutionDAG dag = new ExecutionDAG(); + // Create two mock kernel executions; + KernelExecutionTest kernel1 = new KernelExecutionTest(Arrays.asList(1, 2, 3)); + KernelExecutionTest kernel2 = new KernelExecutionTest(Arrays.asList(1, 2, 3)); + + dag.append(kernel1); + + assertEquals(1, dag.getNumVertices()); + assertEquals(0, dag.getNumEdges()); + assertEquals(1, dag.getFrontier().size()); + assertTrue(dag.getFrontier().get(0).isFrontier()); + assertTrue(dag.getFrontier().get(0).isStart()); + + dag.append(kernel2); + + assertEquals(2, dag.getNumVertices()); + assertEquals(1, dag.getNumEdges()); + assertEquals(1, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(1, dag.getFrontier().size()); + assertEquals(dag.getVertices().get(1), dag.getFrontier().get(0)); + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(1).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isStart()); + // Check if the first vertex is a parent of the second; + assertEquals(dag.getVertices().get(0), dag.getVertices().get(1).getParents().get(0).getStart()); + // Check if the second vertex is a child of the first; + assertEquals(dag.getVertices().get(1), dag.getVertices().get(0).getChildren().get(0).getEnd()); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java new file mode 100644 index 00000000..98360228 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -0,0 +1,213 @@ +package com.nvidia.grcuda.gpu; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Directed Acyclic Graph (DAG) that represents the execution flow of GrCUDA kernels and other + * computations. Each vertex is a computation, and an edge between vertices represents a dependency + * such that the end vertex must wait for the start vertex to finish before starting. + */ +public class ExecutionDAG { + + private final List vertices = new ArrayList<>(); + private final List edges = new ArrayList<>(); + + /** + * Current frontier of the DAG, i.e. vertices with no children. + */ + private List frontier = new ArrayList<>(); + + /** + * Add a new computation to the graph, and compute its dependencies. + * @param kernel a kernel computation, containing kernel configuration and input arguments. + */ + public void append(KernelExecution kernel) { + // Add it to the list of vertices; + DAGVertex newVertex = new DAGVertex(kernel); + + ////////////////////////////// + // Compute dependencies with other vertices in the DAG frontier, and create edges; + ////////////////////////////// + + // TODO: the frontier is not just composed of vertices without children!! + // I need to consider for each kernel the arguments that haven't been "covered" by a new vertex + + // For each vertex in the frontier, compute dependencies of the vertex; + for (DAGVertex frontierVertex : frontier) { + if (hasDependency(frontierVertex, newVertex)) { + // Create a new edge between the two vertices (book-keeping is automatic); + DAGEdge newEdge = new DAGEdge(frontierVertex, newVertex); + } + } + // Remove from the frontier vertices that no longer belong to it; + frontier = frontier.stream().filter(DAGVertex::isFrontier).collect(Collectors.toList()); + // Add the new vertex to the frontier if it has no children; + if (newVertex.isFrontier) { + frontier.add(newVertex); + } + } + + boolean hasDependency(DAGVertex startVertex, DAGVertex endVertex) { + return startVertex.getKernel().hasDependency(endVertex.getKernel()); + } + + public List getVertices() { + return vertices; + } + + public List getEdges() { + return edges; + } + + public int getNumVertices() { + return vertices.size(); + } + + public int getNumEdges() { + return edges.size(); + } + + public List getFrontier() { + return frontier; + } + + @Override + public String toString() { + return "DAG(" + + "|V|=" + vertices.size() + + ", |E|=" + edges.size() + + "\nvertices=\n" + vertices.stream().map(Object::toString).collect(Collectors.joining(",\n")) + + ')'; + } + + /** + * Simple vertex class used to encapsulate {@link KernelExecution}. + */ + public class DAGVertex { + + final KernelExecution kernel; + final int id; + + /** + * False only if the vertex has parent vertices. + */ + boolean isStart = true; + /** + * False only if the vertex has child vertices. + */ + boolean isFrontier = true; + /** + * List of edges that connect this vertex to its parents (they are the start of each edge). + */ + final List parents = new ArrayList<>(); + /** + * List of edges that connect this vertex to its children (they are the end of each edge). + */ + final List children = new ArrayList<>(); + + DAGVertex(KernelExecution kernel) { + this.kernel = kernel; + this.id = getNumVertices(); + vertices.add(this); + } + + KernelExecution getKernel() { + return kernel; + } + + int getId() { + return id; + } + + public boolean isStart() { + return isStart; + } + + public boolean isFrontier() { + return isFrontier; + } + + public List getParents() { + return parents; + } + + public List getChildren() { + return children; + } + + public void setStart(boolean start) { + isStart = start; + } + + public void setFrontier(boolean frontier) { + isFrontier = frontier; + } + + public void addParent(DAGEdge edge) { + parents.add(edge); + isStart = false; + } + + public void addChild(DAGEdge edge) { + children.add(edge); + isFrontier = false; + } + + @Override + public String toString() { + return "V(" + + ", id=" + id + + ", isStart=" + isStart + + ", isFrontier=" + isFrontier + + ", parents=" + parents + + ", children=" + children + + ')'; + } + } + + /** + * Simple edge class used to connect {@link DAGVertex} with dependencies. + * An edge from a source to a destination means that the destination computation must wait + * for the start computation to finish before starting. + */ + public class DAGEdge { + + final DAGVertex start; + final DAGVertex end; + final int id; + + DAGEdge(DAGVertex start, DAGVertex end) { + this.start = start; + this.end = end; + this.id = getNumEdges(); + + // Update parents and children of the two vertices; + start.addChild(this); + end.addParent(this); + // Book-keeping of the edge; + edges.add(this); + } + + public DAGVertex getStart() { + return start; + } + + public DAGVertex getEnd() { + return end; + } + + public int getId() { + return id; + } + + @Override + public String toString() { + return "E(" + + "start=" + start.getId() + + ", end=" + end.getId() + + ')'; + } + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index 0c33cd1e..00c5fb1d 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -27,22 +27,28 @@ public class GrCUDAExecutionContext { */ final private Set kernelExecSet = new HashSet<>(); + final private ExecutionDAG dag = new ExecutionDAG(); + public GrCUDAExecutionContext() { } public void registerArray(AbstractArray array) { arraySet.add(array); - System.out.println("-- added array to context: " + System.identityHashCode(array) + "; " + array.toString()); +// System.out.println("-- added array to context: " + System.identityHashCode(array) + "; " + array.toString()); } public void registerKernel(Kernel kernel) { kernelSet.add(kernel); - System.out.println("-- added kernel to context: " + System.identityHashCode(kernel) + "; " + kernel.toString()); +// System.out.println("-- added kernel to context: " + System.identityHashCode(kernel) + "; " + kernel.toString()); } public void registerExecution(KernelExecution kernel) { - kernelExecSet.add(kernel); - System.out.println("-- executing kernel: " + System.identityHashCode(kernel) + "; " + kernel.toString()); + dag.append(kernel); +// System.out.println("-- executing kernel: " + System.identityHashCode(kernel) + "; " + kernel.toString()); + System.out.println("\n///////////////////////////////\n"); + System.out.println(dag); } + + } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java index 44987d50..b3737a37 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -26,6 +26,19 @@ public void execute() { kernel.getCudaRuntime().cuLaunchKernel(kernel, config, args); } + // TODO: this should be moved somewhere else, like in a higher level interface that implements + // this function with different strategies + + /** + * Computes if the "other" KernelExecution has dependencies w.r.t. this kernel, + * such as requiring as input a value computed by this kernel. + * @param other kernel for which we want to check dependencies, w.r.t. this kernel + * @return true IFF at least one dependency was found + */ + public boolean hasDependency(KernelExecution other) { + return true; + } + @Override public String toString() { return "KernelExecution(" + configuredKernel.toString() + "; args=[" + From 24b941f6e9742e3e1dd9223233ec4a74ac129667 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 14 Apr 2020 16:26:44 +0200 Subject: [PATCH 009/236] adding kernel dependency computation, abstracted grcuda computational element --- .gitignore | 1 + README.md | 70 ++++++++++--------- .../nvidia/grcuda/test/BindKernelTest.java | 3 + .../grcuda/test/gpu/ExecutionDAGTest.java | 33 ++++++--- .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 47 ++++++++----- .../gpu/GrCUDAComputationalElement.java | 50 +++++++++++++ .../grcuda/gpu/InitializeArgumentSet.java | 12 ++++ .../src/com/nvidia/grcuda/gpu/Kernel.java | 61 +++++----------- .../nvidia/grcuda/gpu/KernelArguments.java | 46 ++++++++++++ .../nvidia/grcuda/gpu/KernelExecution.java | 46 +++++++++--- 10 files changed, 253 insertions(+), 116 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/InitializeArgumentSet.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java diff --git a/.gitignore b/.gitignore index f6d6c0c6..5b674629 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,4 @@ mx.grcuda/eclipse-launches /projects/com.nvidia.grcuda/src/com/nvidia/grcuda/parser/antlr/GrCUDAListener.java /projects/com.nvidia.grcuda/src/com/nvidia/grcuda/parser/antlr/GrCUDAParser.java /projects/com.nvidia.grcuda/src/com/nvidia/grcuda/parser/antlr/GrCUDAVisitor.java +/venv diff --git a/README.md b/README.md index 77a29555..461fd137 100644 --- a/README.md +++ b/README.md @@ -200,58 +200,60 @@ mx --dynamicimports graalpython --cp-sfx `pwd`/mxbuild/dists/jdk1.8/grcuda.jar \ 1. Get the source code of GrCUDA, graal, mx - ``` - git clone https://github.com/oracle/graal.git - git clone https://github.com/graalvm/mx.git - git clone https://github.com/NVIDIA/grcuda.git (this can be replaced with a fork) - ``` +``` +git clone https://github.com/oracle/graal.git +git clone https://github.com/graalvm/mx.git +git clone https://github.com/NVIDIA/grcuda.git (this can be replaced with a fork) +``` 2. Download the right JDK - * [Here](https://github.com/graalvm/openjdk8-jvmci-builder/releases/tag/jvmci-20.0-b02) you can find releases for GraalVM 20.0, but other versions are available on the same repository +* [Here](https://github.com/graalvm/openjdk8-jvmci-builder/releases/tag/jvmci-20.0-b02) you can find releases for GraalVM 20.0, but other versions are available on the same repository 3. Download the right build for GraalVM - * [Here](https://github.com/graalvm/graalvm-ce-builds/releases) you can find releases for GraalVM 20.0, and more recent versions once they will become available +* [Here](https://github.com/graalvm/graalvm-ce-builds/releases) you can find releases for GraalVM 20.0, and more recent versions once they will become available 4. Setup your CUDA environment - * Install CUDA and Nvidia drivers, for exampel following the steps [here](https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=CentOS&target_version=7&target_type=rpmnetwork) - * Add the following to your environment (assuming that you have installed CUDA in the default `/usr/local` location, and using the `nvcc` compiler +* Install CUDA and Nvidia drivers, for exampel following the steps [here](https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=CentOS&target_version=7&target_type=rpmnetwork) +* Add the following to your environment (assuming that you have installed CUDA in the default `/usr/local` location, and using the `nvcc` compiler - ``` - export CUDA_DIR=/usr/local/cuda - export PATH=$PATH:$CUDA_DIR/bin - ``` +``` +export CUDA_DIR=/usr/local/cuda +export PATH=$PATH:$CUDA_DIR/bin +``` 5. Setup your GraalVM and GrCUDA environment - * Add the following to your environment (assuming you have installed the releases mentioned in step 2 and 3) +* Add the following to your environment (assuming you have installed the releases mentioned in step 2 and 3) - ``` - export PATH=~/mx:$PATH - export JAVA_HOME=~/openjdk1.8.0_242-jvmci-20.0-b02 - export GRAAL_HOME=~/graalvm-ce-java8-20.0.0 - export GRAALVM_HOME=$GRAAL_HOME - export PATH=$GRAAL_HOME/bin:$PATH - export PATH=$JAVA_HOME/bin:$PATH - ``` +``` +export PATH=~/mx:$PATH +export JAVA_HOME=~/openjdk1.8.0_242-jvmci-20.0-b02 +export GRAAL_HOME=~/graalvm-ce-java8-20.0.0 +export GRAALVM_HOME=$GRAAL_HOME +export PATH=$GRAAL_HOME/bin:$PATH +export PATH=$JAVA_HOME/bin:$PATH +``` 6. Install languages for GraalVM (optional, but recommended) - ``` - gu available - gu install native-image - gu install llvm-toolchain - gu install python - gu rebuild-images polyglot - ``` - * If Graalpython is installed, create a `virtualenv` for it +``` +gu available +gu install native-image +gu install llvm-toolchain +gu install python +gu rebuild-images polyglot +``` + +* If Graalpython is installed, create a `virtualenv` for it - ``` - graalpython -m venv ~/graalpython_venv - source ~/graalpython_venv/bin/activate - ``` +``` +graalpython -m venv ~/graalpython_venv +source ~/graalpython_venv/bin/activate +``` 7. Install GrCUDA with `./install.sh` 8. Setup your IDE with `mx ideinit` +* Also update the project SDK and the default JUnit configurations to use the GraalVM SDK in `$GRAAL_HOME`, and update the `PATH` variable so that it can find `nvcc` 9. Run tests with `mx unittest com.nvidia` diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BindKernelTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BindKernelTest.java index 73494499..fe2e47a6 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BindKernelTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BindKernelTest.java @@ -33,6 +33,8 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; +import java.util.Map; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -60,6 +62,7 @@ public class BindKernelTest { @Test public void testBindKernel() throws IOException, InterruptedException { + // Write CUDA C source file File sourceFile = tempFolder.newFile("inc_kernel.cu"); PrintWriter writer = new PrintWriter(new FileWriter(sourceFile)); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 223d7ded..44891523 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -2,12 +2,18 @@ import com.nvidia.grcuda.gpu.ConfiguredKernel; import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.InitializeArgumentSet; +import com.nvidia.grcuda.gpu.Kernel; +import com.nvidia.grcuda.gpu.KernelArguments; import com.nvidia.grcuda.gpu.KernelExecution; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -15,18 +21,25 @@ public class ExecutionDAGTest { - private static class KernelExecutionTest extends KernelExecution { - - List testArguments; - - KernelExecutionTest(List arguments) { - super(new ConfiguredKernel(null, null), null); - this.testArguments = arguments; + /** + * Mock class to test the DAG execution; + */ + private static class KernelExecutionTest extends GrCUDAComputationalElement { + KernelExecutionTest(List args) { + super(new KernelExecutionTestInitializer(args)); + } + } + /** + * Mock class to test KernelExecutionTest initialization; + */ + private static class KernelExecutionTestInitializer implements InitializeArgumentSet { + List args; + KernelExecutionTestInitializer(List args) { + this.args = args; } - @Override - public boolean hasDependency(KernelExecution other) { - return true; + public Set initialize() { + return new HashSet<>(args); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index 98360228..e2ec3cb5 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -23,7 +23,7 @@ public class ExecutionDAG { * Add a new computation to the graph, and compute its dependencies. * @param kernel a kernel computation, containing kernel configuration and input arguments. */ - public void append(KernelExecution kernel) { + public void append(GrCUDAComputationalElement kernel) { // Add it to the list of vertices; DAGVertex newVertex = new DAGVertex(kernel); @@ -36,9 +36,11 @@ public void append(KernelExecution kernel) { // For each vertex in the frontier, compute dependencies of the vertex; for (DAGVertex frontierVertex : frontier) { - if (hasDependency(frontierVertex, newVertex)) { + List dependencies = computeDependencies(frontierVertex, newVertex); + dependencies.forEach(System.out::println); + if (dependencies.size() > 0) { // Create a new edge between the two vertices (book-keeping is automatic); - DAGEdge newEdge = new DAGEdge(frontierVertex, newVertex); + new DAGEdge(frontierVertex, newVertex, dependencies); } } // Remove from the frontier vertices that no longer belong to it; @@ -49,8 +51,8 @@ public void append(KernelExecution kernel) { } } - boolean hasDependency(DAGVertex startVertex, DAGVertex endVertex) { - return startVertex.getKernel().hasDependency(endVertex.getKernel()); + private List computeDependencies(DAGVertex startVertex, DAGVertex endVertex) { + return startVertex.getKernel().computeDependencies(endVertex.getKernel()); } public List getVertices() { @@ -87,33 +89,33 @@ public String toString() { */ public class DAGVertex { - final KernelExecution kernel; - final int id; + private final GrCUDAComputationalElement kernel; + private final int id; /** * False only if the vertex has parent vertices. */ - boolean isStart = true; + private boolean isStart = true; /** * False only if the vertex has child vertices. */ - boolean isFrontier = true; + private boolean isFrontier = true; /** * List of edges that connect this vertex to its parents (they are the start of each edge). */ - final List parents = new ArrayList<>(); + private final List parents = new ArrayList<>(); /** * List of edges that connect this vertex to its children (they are the end of each edge). */ - final List children = new ArrayList<>(); + private final List children = new ArrayList<>(); - DAGVertex(KernelExecution kernel) { + DAGVertex(GrCUDAComputationalElement kernel) { this.kernel = kernel; this.id = getNumVertices(); vertices.add(this); } - KernelExecution getKernel() { + GrCUDAComputationalElement getKernel() { return kernel; } @@ -174,9 +176,13 @@ public String toString() { */ public class DAGEdge { - final DAGVertex start; - final DAGVertex end; - final int id; + final private DAGVertex start; + final private DAGVertex end; + final private int id; + /** + * List of objects that represents depenencies between the two vertices; + */ + private List dependencies; DAGEdge(DAGVertex start, DAGVertex end) { this.start = start; @@ -190,6 +196,11 @@ public class DAGEdge { edges.add(this); } + DAGEdge(DAGVertex start, DAGVertex end, List dependencies) { + this(start, end); + this.dependencies = dependencies; + } + public DAGVertex getStart() { return start; } @@ -202,6 +213,10 @@ public int getId() { return id; } + public List getDependencies() { + return dependencies; + } + @Override public String toString() { return "E(" + diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java new file mode 100644 index 00000000..e7adfd59 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java @@ -0,0 +1,50 @@ +package com.nvidia.grcuda.gpu; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * Basic class that represents GrCUDA computations, + * and is used to model data dependencies between computations + */ +public abstract class GrCUDAComputationalElement { + + /** + * This set contains the input arguments that are used to compute dependencies; + */ + protected final Set argumentSet; + + public GrCUDAComputationalElement(InitializeArgumentSet initializer) { + this.argumentSet = initializer.initialize(); + } + + public GrCUDAComputationalElement() { + this.argumentSet = new DefaultInitializer().initialize(); + } + + public Set getArgumentSet() { + return argumentSet; + } + + /** + * Computes if the "other" GrCUDAComputationalElement has dependencies w.r.t. this kernel, + * such as requiring as input a value computed by this kernel. + * @param other kernel for which we want to check dependencies, w.r.t. this kernel + * @return the list of arguments that the two kernels have in common + */ + public List computeDependencies(GrCUDAComputationalElement other) { + // Obtain the common dependencies through set intersection; + Set intersection = new HashSet<>(argumentSet); + intersection.retainAll(other.argumentSet); + return new ArrayList<>(intersection); + } + + private static class DefaultInitializer implements InitializeArgumentSet { + @Override + public Set initialize() { + return new HashSet<>(); + } + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/InitializeArgumentSet.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/InitializeArgumentSet.java new file mode 100644 index 00000000..be49e390 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/InitializeArgumentSet.java @@ -0,0 +1,12 @@ +package com.nvidia.grcuda.gpu; + +import java.util.Set; + +public interface InitializeArgumentSet { + /** + * Used by different {@link GrCUDAComputationalElement} to initialize the set of arguments + * considered in the dependency evaluation. + * @return a set of arguments used in the evaluation + */ + Set initialize(); +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index fcfd9fc9..d6956e0d 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -28,15 +28,15 @@ */ package com.nvidia.grcuda.gpu; -import java.io.Closeable; -import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.GrCUDAInternalException; import com.nvidia.grcuda.array.MultiDimDeviceArray; -import com.nvidia.grcuda.gpu.UnsafeHelper.MemoryObject; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Fallback; @@ -53,7 +53,7 @@ import com.oracle.truffle.api.library.ExportMessage; @ExportLibrary(InteropLibrary.class) -public final class Kernel implements TruffleObject { +public class Kernel implements TruffleObject { private final CUDARuntime cudaRuntime; private final String kernelName; @@ -61,7 +61,8 @@ public final class Kernel implements TruffleObject { private final long kernelFunction; private final String kernelSignature; private int launchCount = 0; - private ArgumentType[] argumentTypes; + private final ArgumentType[] argumentTypes; + private final List argsAreArrays; private String ptxCode; public Kernel(CUDARuntime cudaRuntime, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, String kernelSignature) { @@ -71,6 +72,7 @@ public Kernel(CUDARuntime cudaRuntime, String kernelName, CUDARuntime.CUModule k this.kernelFunction = kernelFunction; this.kernelSignature = kernelSignature; this.argumentTypes = parseSignature(kernelSignature); + this.argsAreArrays = computeIfArgsAreArrays(this.argumentTypes); this.cudaRuntime.getExecutionContext().registerKernel(this); } @@ -92,7 +94,11 @@ public ArgumentType[] getArgumentTypes() { return argumentTypes; } - KernelArguments createKernelArguments(Object[] args, InteropLibrary int32Access, InteropLibrary int64Access, InteropLibrary doubleAccess) + public List getArgsAreArrays() { + return argsAreArrays; + } + + public KernelArguments createKernelArguments(Object[] args, InteropLibrary int32Access, InteropLibrary int64Access, InteropLibrary doubleAccess) throws UnsupportedTypeException, ArityException { if (args.length != argumentTypes.length) { CompilerDirectives.transferToInterpreter(); @@ -182,6 +188,10 @@ private static ArgumentType[] parseSignature(String kernelSignature) { return argArray; } + private static List computeIfArgsAreArrays(ArgumentType[] types) { + return Arrays.stream(types).map(a -> a == ArgumentType.POINTER).collect(Collectors.toList()); + } + public long getKernelFunction() { return kernelFunction; } @@ -343,43 +353,4 @@ Object execute(Object[] arguments, } } -final class KernelArguments implements Closeable { - - private final Object[] originalArgs; - private final UnsafeHelper.PointerArray argumentArray; - private final ArrayList argumentValues = new ArrayList<>(); - - KernelArguments(Object[] args) { - this.originalArgs = args; - this.argumentArray = UnsafeHelper.createPointerArray(args.length); - } - - public void setArgument(int argIdx, MemoryObject obj) { - argumentArray.setValueAt(argIdx, obj.getAddress()); - argumentValues.add(obj); - } - - long getPointer() { - return argumentArray.getAddress(); - } - public Object[] getOriginalArgs() { - return originalArgs; - } - - public Object getOriginalArg(int index) { - return originalArgs[index]; - } - - @Override - public void close() { - this.argumentArray.close(); - for (Closeable c : argumentValues) { - try { - c.close(); - } catch (IOException e) { - /* ignored */ - } - } - } -} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java new file mode 100644 index 00000000..d27f8851 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java @@ -0,0 +1,46 @@ +package com.nvidia.grcuda.gpu; + +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayList; + +public final class KernelArguments implements Closeable { + + private final Object[] originalArgs; + private final UnsafeHelper.PointerArray argumentArray; + private final ArrayList argumentValues = new ArrayList<>(); + + public KernelArguments(Object[] args) { + this.originalArgs = args; + this.argumentArray = UnsafeHelper.createPointerArray(args.length); + } + + public void setArgument(int argIdx, UnsafeHelper.MemoryObject obj) { + argumentArray.setValueAt(argIdx, obj.getAddress()); + argumentValues.add(obj); + } + + long getPointer() { + return argumentArray.getAddress(); + } + + public Object[] getOriginalArgs() { + return originalArgs; + } + + public Object getOriginalArg(int index) { + return originalArgs[index]; + } + + @Override + public void close() { + this.argumentArray.close(); + for (Closeable c : argumentValues) { + try { + c.close(); + } catch (IOException e) { + /* ignored */ + } + } + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java index b3737a37..5605228e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -1,13 +1,18 @@ package com.nvidia.grcuda.gpu; +import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * Class used to track the single execution of a {@link ConfiguredKernel}. * The execution will be provided to the {@link GrCUDAExecutionContext} and scheduled accordingly. */ -public class KernelExecution { +public class KernelExecution extends GrCUDAComputationalElement { private final Kernel kernel; private final ConfiguredKernel configuredKernel; @@ -15,6 +20,7 @@ public class KernelExecution { private final KernelArguments args; public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) { + super(new KernelExecutionInitializer(configuredKernel.getKernel(), args)); this.configuredKernel = configuredKernel; this.kernel = configuredKernel.getKernel(); this.config = configuredKernel.getConfig(); @@ -26,17 +32,16 @@ public void execute() { kernel.getCudaRuntime().cuLaunchKernel(kernel, config, args); } - // TODO: this should be moved somewhere else, like in a higher level interface that implements - // this function with different strategies + public ConfiguredKernel getConfiguredKernel() { + return configuredKernel; + } + + public KernelConfig getConfig() { + return config; + } - /** - * Computes if the "other" KernelExecution has dependencies w.r.t. this kernel, - * such as requiring as input a value computed by this kernel. - * @param other kernel for which we want to check dependencies, w.r.t. this kernel - * @return true IFF at least one dependency was found - */ - public boolean hasDependency(KernelExecution other) { - return true; + public KernelArguments getArgs() { + return args; } @Override @@ -46,3 +51,22 @@ public String toString() { "])"; } } + +class KernelExecutionInitializer implements InitializeArgumentSet { + private final Kernel kernel; + private final KernelArguments args; + + KernelExecutionInitializer(Kernel kernel, KernelArguments args) { + this.kernel = kernel; + this.args = args; + } + + @Override + public Set initialize() { + // TODO: what aboout scalars? We cannot treat them in the same way, as they are copied and not referenced + // There should be a semantic to manually specify scalar dependencies? For now we have to skip them; + return IntStream.range(0, args.getOriginalArgs().length).filter(i -> + kernel.getArgsAreArrays().get(i) + ).mapToObj(args::getOriginalArg).collect(Collectors.toSet()); + } +} From 47b46b113df8055f13a5ec91a847019fe562e58c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 15 Apr 2020 15:27:32 +0200 Subject: [PATCH 010/236] added more tests to dag --- notes.md | 8 +- .../grcuda/test/gpu/ExecutionDAGTest.java | 161 +++++++++++++++++- .../src/com/nvidia/grcuda/GrCUDALanguage.java | 6 + .../com/nvidia/grcuda/array/DeviceArray.java | 12 +- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 1 + .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 5 +- .../grcuda/gpu/GrCUDAExecutionContext.java | 4 +- .../nvidia/grcuda/gpu/KernelExecution.java | 3 - .../resources/python/examples/pipeline_1.py | 2 +- 9 files changed, 182 insertions(+), 20 deletions(-) diff --git a/notes.md b/notes.md index f14422bb..acd1f3ef 100644 --- a/notes.md +++ b/notes.md @@ -16,10 +16,10 @@ The `function` package contains functions that can be invoked through the DSL, s Idea: keep a computational DAG that connects GPU computations expressed in GrCUDA and their dependencies * Then use the DAG to schedule parallel computations on different streams and avoid synchronization when not necessary - * See `projects/resources/python/examples/pipeline_1.py` for an example + * See `projects/resources/python/examples/pipeline_1.py` for a practical example -We need a class (e.g. `GpuExecutionContext`) that tracks GPU computational elements (i.e. `kernels`) declarations and invocations - * Ideally, when a new kernel is created, or when it is called, update the context with the new information +We need a class (e.g. `GpuExecutionContext`) that tracks GPU computational elements (e.g. `kernels`) declarations and invocations + * When a new kernel is created, or when it is called, update the context with the new information * Then the context will decide whether to execute it immediately or add a sync point (this could also be done in a different class, design is WIP) ## What is a computational element in GrCUDA? @@ -75,5 +75,5 @@ We can have explicit handles, or infer dependencies automatically 4. How do we modify kernel calls to add/remove sync points? 5. How do we execute kernels in parallel? We need to have streams 6. How do we monitor accesses to `DeviceArrays` to preserve sync points? -7. How do we track scalar values? +7. How do we track scalar values? Probably need to do computations that return scalar synchronously, as we don't know know the guest language will use the scalar 8. How to understand if a parameter is read-only? diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 44891523..edafc077 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,22 +1,42 @@ package com.nvidia.grcuda.test.gpu; -import com.nvidia.grcuda.gpu.ConfiguredKernel; +import com.nvidia.grcuda.GrCUDAContext; +import com.nvidia.grcuda.GrCUDALanguage; +import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.InitializeArgumentSet; -import com.nvidia.grcuda.gpu.Kernel; -import com.nvidia.grcuda.gpu.KernelArguments; -import com.nvidia.grcuda.gpu.KernelExecution; +import com.oracle.truffle.api.TruffleLanguage; +import com.oracle.truffle.api.frame.VirtualFrame; +import com.oracle.truffle.api.instrumentation.EventContext; +import com.oracle.truffle.api.instrumentation.ExecutionEventListener; +import com.oracle.truffle.api.instrumentation.LoadSourceEvent; +import com.oracle.truffle.api.instrumentation.LoadSourceListener; +import com.oracle.truffle.api.instrumentation.LoadSourceSectionEvent; +import com.oracle.truffle.api.instrumentation.SourceFilter; +import com.oracle.truffle.api.instrumentation.SourceSectionFilter; +import com.oracle.truffle.api.instrumentation.StandardTags; +import com.oracle.truffle.api.instrumentation.TruffleInstrument; +import com.oracle.truffle.api.library.ExportMessage; +import com.oracle.truffle.api.source.Source; +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Engine; +import org.graalvm.polyglot.HostAccess; +import org.graalvm.polyglot.Instrument; +import org.graalvm.polyglot.Value; import org.junit.Test; -import java.util.ArrayList; +import java.io.IOException; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; public class ExecutionDAGTest { @@ -74,7 +94,6 @@ public void addVertexToDAGTest() { assertEquals(1, dag.getNumEdges()); assertEquals(1, dag.getFrontier().size()); // Check updates to frontier and start status; - assertEquals(1, dag.getFrontier().size()); assertEquals(dag.getVertices().get(1), dag.getFrontier().get(0)); assertFalse(dag.getVertices().get(0).isFrontier()); assertTrue(dag.getVertices().get(1).isFrontier()); @@ -85,4 +104,134 @@ public void addVertexToDAGTest() { // Check if the second vertex is a child of the first; assertEquals(dag.getVertices().get(1), dag.getVertices().get(0).getChildren().get(0).getEnd()); } + + @Test + public void dependencyPipelineSimpleMockTest() { + ExecutionDAG dag = new ExecutionDAG(); + // Create 4 mock kernel executions; + KernelExecutionTest kernel1 = new KernelExecutionTest(Collections.singletonList(1)); + KernelExecutionTest kernel2 = new KernelExecutionTest(Collections.singletonList(2)); + KernelExecutionTest kernel3 = new KernelExecutionTest(Arrays.asList(1, 2, 3)); + KernelExecutionTest kernel4 = new KernelExecutionTest(Collections.singletonList(3)); + + dag.append(kernel1); + dag.append(kernel2); + dag.append(kernel3); + dag.append(kernel4); + + // Check the DAG structure; + assertEquals(4, dag.getNumVertices()); + assertEquals(3, dag.getNumEdges()); + assertEquals(1, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(dag.getVertices().get(3), dag.getFrontier().get(0)); + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertTrue(dag.getVertices().get(1).isStart()); + assertFalse(dag.getVertices().get(2).isFrontier()); + assertFalse(dag.getVertices().get(2).isStart()); + assertTrue(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + // Check if the third vertex is a child of first and second; + assertEquals(2, dag.getVertices().get(2).getParents().size()); + assertEquals(dag.getVertices().get(2).getParents().stream() + .map(ExecutionDAG.DAGEdge::getStart) + .collect(Collectors.toSet()), + new HashSet<>(Arrays.asList(dag.getVertices().get(0), dag.getVertices().get(1)))); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(0).getChildren().get(0).getEnd()); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(1).getChildren().get(0).getEnd()); + // Check if the fourth vertex is a child of the third; + assertEquals(1, dag.getVertices().get(3).getParents().size()); + assertEquals(1, dag.getVertices().get(2).getChildren().size()); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(3).getParents().get(0).getStart()); + assertEquals(dag.getVertices().get(3), dag.getVertices().get(2).getChildren().get(0).getEnd()); + } + + private static final int NUM_THREADS_PER_BLOCK = 128; + + private static final String SQUARE_KERNEL = + "extern \"C\" __global__ void square(float* x, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " x[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + + private static final String DIFF_KERNEL = + "extern \"C\" __global__ void diff(float* x, float* y, float* z, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " z[idx] = x[idx] - y[idx];\n" + + " }\n" + + "}"; + + private static final String REDUCE_KERNEL = + "extern \"C\" __global__ void reduce(float *x, float *res, int n) {\n" + + " __shared__ float cache[" + NUM_THREADS_PER_BLOCK + "];\n" + + " int i = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (i < n) {\n" + + " cache[threadIdx.x] = x[i];\n" + + " }\n" + + " __syncthreads();\n" + + " i = " + NUM_THREADS_PER_BLOCK + " / 2;\n" + + " while (i > 0) {\n" + + " if (threadIdx.x < i) {\n" + + " cache[threadIdx.x] += cache[threadIdx.x + i];\n" + + " }\n" + + " __syncthreads();\n" + + " i /= 2;\n" + + " }\n" + + " if (threadIdx.x == 0) {\n" + + " atomicAdd(res, cache[0]);\n" + + " }\n" + + "}"; + + @Test + public void dependencyPipelineSimpleTest() { + + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + + // TODO: is there a way to access the inner GrCUDA data structures? + + // FIXME: the computation gives a wrong numerical value for small N (< 100000), but only in Java (not in Graalpython), + // and without any change to the runtime. + final int numElements = 100000; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value res = deviceArrayConstructor.execute("float", 1); + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32"); + Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32"); + assertNotNull(squareKernel); + assertNotNull(diffKernel); + assertNotNull(reduceKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 1.0 / (i + 1)); + y.setArrayElement(i, 2.0 / (i + 1)); + z.setArrayElement(i, 0.0); + } + res.setArrayElement(0, 0); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + configuredSquareKernel.execute(y, numElements); + configuredDiffKernel.execute(x, y, z, numElements); + configuredReduceKernel.execute(z, res, numElements); + + // Verify the output; + float resScalar = res.getArrayElement(0).asFloat(); + assertEquals(-4.93, resScalar, 0.01); + } + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java index 6aa368b6..821e0000 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java @@ -29,6 +29,7 @@ package com.nvidia.grcuda; import com.nvidia.grcuda.array.DeviceArray; +import com.oracle.truffle.api.instrumentation.TruffleInstrument; import org.graalvm.options.OptionDescriptors; import com.nvidia.grcuda.nodes.ExpressionNode; @@ -75,6 +76,10 @@ public static GrCUDALanguage getCurrentLanguage() { return TruffleLanguage.getCurrentLanguage(GrCUDALanguage.class); } + public static GrCUDAContext getCurrentContext() { + return getCurrentContext(GrCUDALanguage.class); + } + @Override protected void disposeContext(GrCUDAContext cxt) { cxt.disposeAll(); @@ -84,4 +89,5 @@ protected void disposeContext(GrCUDAContext cxt) { protected OptionDescriptors getOptionDescriptors() { return new GrCUDAOptionsOptionDescriptors(); } + } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index 8ebaa7aa..5a27fdf2 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -37,6 +37,7 @@ import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; +import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Cached.Shared; import com.oracle.truffle.api.interop.ArityException; @@ -58,8 +59,10 @@ public final class DeviceArray extends AbstractArray implements TruffleObject { private static final String COPY_FROM = "copyFrom"; private static final String COPY_TO = "copyTo"; - private static final MemberSet PUBLIC_MEMBERS = new MemberSet(COPY_FROM, COPY_TO); - private static final MemberSet MEMBERS = new MemberSet(POINTER, COPY_FROM, COPY_TO); + private static final String DAG = "dag"; + + private static final MemberSet PUBLIC_MEMBERS = new MemberSet(COPY_FROM, COPY_TO, DAG); + private static final MemberSet MEMBERS = new MemberSet(POINTER, COPY_FROM, COPY_TO, DAG); @ExportLibrary(InteropLibrary.class) public static final class MemberSet implements TruffleObject { @@ -247,7 +250,7 @@ Object getMembers(boolean includeInternal) { boolean isMemberReadable(String memberName, @Shared("memberName") @Cached("createIdentityProfile()") ValueProfile memberProfile) { String name = memberProfile.profile(memberName); - return POINTER.equals(name) || COPY_FROM.equals(name) || COPY_TO.equals(name); + return POINTER.equals(name) || COPY_FROM.equals(name) || COPY_TO.equals(name) || DAG.equals(name); } @ExportMessage @@ -266,6 +269,9 @@ Object readMember(String memberName, if (COPY_TO.equals(memberName)) { return new DeviceArrayCopyFunction(this, DeviceArrayCopyFunction.CopyDirection.TO_POINTER); } + if (DAG.equals(memberName)) { + return runtime.getExecutionContext().getDag(); + } CompilerDirectives.transferToInterpreter(); throw UnknownIdentifierException.create(memberName); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 16c60ac4..34651283 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -55,6 +55,7 @@ import com.oracle.truffle.api.interop.UnsupportedMessageException; import com.oracle.truffle.api.interop.UnsupportedTypeException; import com.oracle.truffle.api.source.Source; +import org.graalvm.polyglot.HostAccess; public final class CUDARuntime { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index e2ec3cb5..e956f3de 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -1,5 +1,7 @@ package com.nvidia.grcuda.gpu; +import com.oracle.truffle.api.interop.TruffleObject; + import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -9,7 +11,7 @@ * computations. Each vertex is a computation, and an edge between vertices represents a dependency * such that the end vertex must wait for the start vertex to finish before starting. */ -public class ExecutionDAG { +public class ExecutionDAG implements TruffleObject { private final List vertices = new ArrayList<>(); private final List edges = new ArrayList<>(); @@ -37,7 +39,6 @@ public void append(GrCUDAComputationalElement kernel) { // For each vertex in the frontier, compute dependencies of the vertex; for (DAGVertex frontierVertex : frontier) { List dependencies = computeDependencies(frontierVertex, newVertex); - dependencies.forEach(System.out::println); if (dependencies.size() > 0) { // Create a new edge between the two vertices (book-keeping is automatic); new DAGEdge(frontierVertex, newVertex, dependencies); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index 00c5fb1d..50593454 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -50,5 +50,7 @@ public void registerExecution(KernelExecution kernel) { System.out.println(dag); } - + public ExecutionDAG getDag() { + return dag; + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java index 5605228e..c7736c4b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -1,9 +1,6 @@ package com.nvidia.grcuda.gpu; -import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; -import java.util.List; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; diff --git a/projects/resources/python/examples/pipeline_1.py b/projects/resources/python/examples/pipeline_1.py index 2584cd87..061e7df8 100644 --- a/projects/resources/python/examples/pipeline_1.py +++ b/projects/resources/python/examples/pipeline_1.py @@ -52,7 +52,7 @@ # ├─> C: z=x-y ──> D: sum(z) # B: x^2 ──┘ if __name__ == "__main__": - N = 100000 + N = 1000 NUM_BLOCKS = (N + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK start_tot = time.time() From 6b558c53ace0336a5aefc614b5aa4ff9d56fcd1b Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 15 Apr 2020 16:21:16 +0200 Subject: [PATCH 011/236] cleaned initialization of grcuda computational element --- .../grcuda/test/gpu/ExecutionDAGTest.java | 66 +++++-------------- .../gpu/GrCUDAComputationalElement.java | 44 +++++++++++-- .../grcuda/gpu/GrCUDAExecutionContext.java | 9 ++- .../nvidia/grcuda/gpu/KernelExecution.java | 6 +- 4 files changed, 60 insertions(+), 65 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index edafc077..c0632fdd 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,32 +1,13 @@ package com.nvidia.grcuda.test.gpu; -import com.nvidia.grcuda.GrCUDAContext; -import com.nvidia.grcuda.GrCUDALanguage; -import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.InitializeArgumentSet; -import com.oracle.truffle.api.TruffleLanguage; -import com.oracle.truffle.api.frame.VirtualFrame; -import com.oracle.truffle.api.instrumentation.EventContext; -import com.oracle.truffle.api.instrumentation.ExecutionEventListener; -import com.oracle.truffle.api.instrumentation.LoadSourceEvent; -import com.oracle.truffle.api.instrumentation.LoadSourceListener; -import com.oracle.truffle.api.instrumentation.LoadSourceSectionEvent; -import com.oracle.truffle.api.instrumentation.SourceFilter; -import com.oracle.truffle.api.instrumentation.SourceSectionFilter; -import com.oracle.truffle.api.instrumentation.StandardTags; -import com.oracle.truffle.api.instrumentation.TruffleInstrument; -import com.oracle.truffle.api.library.ExportMessage; -import com.oracle.truffle.api.source.Source; import org.graalvm.polyglot.Context; -import org.graalvm.polyglot.Engine; -import org.graalvm.polyglot.HostAccess; -import org.graalvm.polyglot.Instrument; import org.graalvm.polyglot.Value; import org.junit.Test; -import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; @@ -44,22 +25,9 @@ public class ExecutionDAGTest { /** * Mock class to test the DAG execution; */ - private static class KernelExecutionTest extends GrCUDAComputationalElement { - KernelExecutionTest(List args) { - super(new KernelExecutionTestInitializer(args)); - } - } - /** - * Mock class to test KernelExecutionTest initialization; - */ - private static class KernelExecutionTestInitializer implements InitializeArgumentSet { - List args; - KernelExecutionTestInitializer(List args) { - this.args = args; - } - @Override - public Set initialize() { - return new HashSet<>(args); + public static class KernelExecutionTest extends GrCUDAComputationalElement { + KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { + super(grCUDAExecutionContext, args); } } @@ -75,12 +43,11 @@ public void executionDAGConstructorTest() { @Test public void addVertexToDAGTest() { - ExecutionDAG dag = new ExecutionDAG(); + GrCUDAExecutionContext context = new GrCUDAExecutionContext(); // Create two mock kernel executions; - KernelExecutionTest kernel1 = new KernelExecutionTest(Arrays.asList(1, 2, 3)); - KernelExecutionTest kernel2 = new KernelExecutionTest(Arrays.asList(1, 2, 3)); + new KernelExecutionTest(context, Arrays.asList(1, 2, 3)); - dag.append(kernel1); + ExecutionDAG dag = context.getDag(); assertEquals(1, dag.getNumVertices()); assertEquals(0, dag.getNumEdges()); @@ -88,7 +55,7 @@ public void addVertexToDAGTest() { assertTrue(dag.getFrontier().get(0).isFrontier()); assertTrue(dag.getFrontier().get(0).isStart()); - dag.append(kernel2); + new KernelExecutionTest(context, Arrays.asList(1, 2, 3)); assertEquals(2, dag.getNumVertices()); assertEquals(1, dag.getNumEdges()); @@ -107,17 +74,14 @@ public void addVertexToDAGTest() { @Test public void dependencyPipelineSimpleMockTest() { - ExecutionDAG dag = new ExecutionDAG(); + GrCUDAExecutionContext context = new GrCUDAExecutionContext(); // Create 4 mock kernel executions; - KernelExecutionTest kernel1 = new KernelExecutionTest(Collections.singletonList(1)); - KernelExecutionTest kernel2 = new KernelExecutionTest(Collections.singletonList(2)); - KernelExecutionTest kernel3 = new KernelExecutionTest(Arrays.asList(1, 2, 3)); - KernelExecutionTest kernel4 = new KernelExecutionTest(Collections.singletonList(3)); - - dag.append(kernel1); - dag.append(kernel2); - dag.append(kernel3); - dag.append(kernel4); + new KernelExecutionTest(context, Collections.singletonList(1)); + new KernelExecutionTest(context, Collections.singletonList(2)); + new KernelExecutionTest(context, Arrays.asList(1, 2, 3)); + new KernelExecutionTest(context, Collections.singletonList(3)); + + ExecutionDAG dag = context.getDag(); // Check the DAG structure; assertEquals(4, dag.getNumVertices()); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java index e7adfd59..677a1e28 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java @@ -4,10 +4,12 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * Basic class that represents GrCUDA computations, - * and is used to model data dependencies between computations + * and is used to model data dependencies between computations; */ public abstract class GrCUDAComputationalElement { @@ -15,13 +17,31 @@ public abstract class GrCUDAComputationalElement { * This set contains the input arguments that are used to compute dependencies; */ protected final Set argumentSet; + /** + * Reference to the execution context where this computation is executed; + */ + protected final GrCUDAExecutionContext grCUDAExecutionContext; - public GrCUDAComputationalElement(InitializeArgumentSet initializer) { + /** + * Constructor that takes an argument set initializer to build the set of arguments used in the dependency computation + * @param grCUDAExecutionContext execution context in which this computational element will be scheduled + * @param initializer the initializer used to build the internal set of arguments considered in the dependency computation + */ + public GrCUDAComputationalElement(GrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer) { this.argumentSet = initializer.initialize(); + this.grCUDAExecutionContext = grCUDAExecutionContext; + this.grCUDAExecutionContext.registerExecution(this); } - public GrCUDAComputationalElement() { - this.argumentSet = new DefaultInitializer().initialize(); + /** + * Simplified constructor that takes a list of arguments, and consider all of them in the dependency computation + * @param grCUDAExecutionContext execution context in which this computational element will be scheduled + * @param args the list of arguments provided to the computation. Arguments are expected to be {@link org.graalvm.polyglot.Value} + */ + public GrCUDAComputationalElement(GrCUDAExecutionContext grCUDAExecutionContext, List args) { + this.argumentSet = new DefaultExecutionInitializer(args).initialize(); + this.grCUDAExecutionContext = grCUDAExecutionContext; + this.grCUDAExecutionContext.registerExecution(this); } public Set getArgumentSet() { @@ -30,7 +50,7 @@ public Set getArgumentSet() { /** * Computes if the "other" GrCUDAComputationalElement has dependencies w.r.t. this kernel, - * such as requiring as input a value computed by this kernel. + * such as requiring as input a value computed by this kernel; * @param other kernel for which we want to check dependencies, w.r.t. this kernel * @return the list of arguments that the two kernels have in common */ @@ -41,10 +61,20 @@ public List computeDependencies(GrCUDAComputationalElement other) { return new ArrayList<>(intersection); } - private static class DefaultInitializer implements InitializeArgumentSet { + /** + * The default initializer will simply store all the arguments, + * and consider each of them in the dependency computations; + */ + private static class DefaultExecutionInitializer implements InitializeArgumentSet { + private final List args; + + DefaultExecutionInitializer(List args) { + this.args = args; + } + @Override public Set initialize() { - return new HashSet<>(); + return new HashSet<>(args); } } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index 50593454..e3bc5a92 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -25,7 +25,7 @@ public class GrCUDAExecutionContext { * Set that contains all the CUDA kernels execution so far. * TODO: this should not be a set, but a DAG that can be used to handle dependencies */ - final private Set kernelExecSet = new HashSet<>(); + final private Set kernelExecSet = new HashSet<>(); final private ExecutionDAG dag = new ExecutionDAG(); @@ -43,11 +43,10 @@ public void registerKernel(Kernel kernel) { // System.out.println("-- added kernel to context: " + System.identityHashCode(kernel) + "; " + kernel.toString()); } - public void registerExecution(KernelExecution kernel) { + public void registerExecution(GrCUDAComputationalElement kernel) { dag.append(kernel); -// System.out.println("-- executing kernel: " + System.identityHashCode(kernel) + "; " + kernel.toString()); - System.out.println("\n///////////////////////////////\n"); - System.out.println(dag); +// System.out.println("\n///////////////////////////////\n"); +// System.out.println(dag); } public ExecutionDAG getDag() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java index c7736c4b..579bf619 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -17,7 +17,10 @@ public class KernelExecution extends GrCUDAComputationalElement { private final KernelArguments args; public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) { - super(new KernelExecutionInitializer(configuredKernel.getKernel(), args)); + super( + configuredKernel.getKernel().getCudaRuntime().getExecutionContext(), + new KernelExecutionInitializer(configuredKernel.getKernel(), args) + ); this.configuredKernel = configuredKernel; this.kernel = configuredKernel.getKernel(); this.config = configuredKernel.getConfig(); @@ -25,7 +28,6 @@ public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) } public void execute() { - kernel.getCudaRuntime().getExecutionContext().registerExecution(this); kernel.getCudaRuntime().cuLaunchKernel(kernel, config, args); } From 6bde54a5fff3131b9d41bfedb6fefcb7b106eeb2 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 15 Apr 2020 20:04:22 +0200 Subject: [PATCH 012/236] added active parameters-aware frontier computation --- .../grcuda/test/gpu/ExecutionDAGTest.java | 66 +++++++++++++++---- .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 25 +++---- .../gpu/GrCUDAComputationalElement.java | 45 ++++++++++--- 3 files changed, 100 insertions(+), 36 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index c0632fdd..ea5a596c 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -12,7 +12,6 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; @@ -67,15 +66,17 @@ public void addVertexToDAGTest() { assertTrue(dag.getVertices().get(0).isStart()); assertFalse(dag.getVertices().get(1).isStart()); // Check if the first vertex is a parent of the second; - assertEquals(dag.getVertices().get(0), dag.getVertices().get(1).getParents().get(0).getStart()); + assertEquals(dag.getVertices().get(0), dag.getVertices().get(1).getParentVertices().get(0)); // Check if the second vertex is a child of the first; - assertEquals(dag.getVertices().get(1), dag.getVertices().get(0).getChildren().get(0).getEnd()); + assertEquals(dag.getVertices().get(1), dag.getVertices().get(0).getChildVertices().get(0)); } @Test public void dependencyPipelineSimpleMockTest() { GrCUDAExecutionContext context = new GrCUDAExecutionContext(); - // Create 4 mock kernel executions; + // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, + // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), + // and kernel 4 (argument "3" is active); new KernelExecutionTest(context, Collections.singletonList(1)); new KernelExecutionTest(context, Collections.singletonList(2)); new KernelExecutionTest(context, Arrays.asList(1, 2, 3)); @@ -86,30 +87,67 @@ public void dependencyPipelineSimpleMockTest() { // Check the DAG structure; assertEquals(4, dag.getNumVertices()); assertEquals(3, dag.getNumEdges()); - assertEquals(1, dag.getFrontier().size()); + assertEquals(2, dag.getFrontier().size()); // Check updates to frontier and start status; - assertEquals(dag.getVertices().get(3), dag.getFrontier().get(0)); + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3))), + new HashSet<>(dag.getFrontier())); assertFalse(dag.getVertices().get(0).isFrontier()); assertTrue(dag.getVertices().get(0).isStart()); assertFalse(dag.getVertices().get(1).isFrontier()); assertTrue(dag.getVertices().get(1).isStart()); - assertFalse(dag.getVertices().get(2).isFrontier()); + assertTrue(dag.getVertices().get(2).isFrontier()); assertFalse(dag.getVertices().get(2).isStart()); assertTrue(dag.getVertices().get(3).isFrontier()); assertFalse(dag.getVertices().get(3).isStart()); // Check if the third vertex is a child of first and second; assertEquals(2, dag.getVertices().get(2).getParents().size()); - assertEquals(dag.getVertices().get(2).getParents().stream() - .map(ExecutionDAG.DAGEdge::getStart) - .collect(Collectors.toSet()), + assertEquals(new HashSet<>(dag.getVertices().get(2).getParentVertices()), new HashSet<>(Arrays.asList(dag.getVertices().get(0), dag.getVertices().get(1)))); - assertEquals(dag.getVertices().get(2), dag.getVertices().get(0).getChildren().get(0).getEnd()); - assertEquals(dag.getVertices().get(2), dag.getVertices().get(1).getChildren().get(0).getEnd()); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(0).getChildVertices().get(0)); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(1).getChildVertices().get(0)); // Check if the fourth vertex is a child of the third; assertEquals(1, dag.getVertices().get(3).getParents().size()); assertEquals(1, dag.getVertices().get(2).getChildren().size()); - assertEquals(dag.getVertices().get(2), dag.getVertices().get(3).getParents().get(0).getStart()); - assertEquals(dag.getVertices().get(3), dag.getVertices().get(2).getChildren().get(0).getEnd()); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(3).getParentVertices().get(0)); + assertEquals(dag.getVertices().get(3), dag.getVertices().get(2).getChildVertices().get(0)); + } + + @Test + public void complexFrontierMockTest() { + GrCUDAExecutionContext context = new GrCUDAExecutionContext(); + + // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) + // \----> C(2) + // The final frontier is composed by C(2), D(3), E(1), F(4); + new KernelExecutionTest(context, Arrays.asList(1, 2)); + new KernelExecutionTest(context, Collections.singletonList(1)); + new KernelExecutionTest(context, Collections.singletonList(2)); + new KernelExecutionTest(context, Arrays.asList(1, 3)); + new KernelExecutionTest(context, Arrays.asList(1, 4)); + new KernelExecutionTest(context, Collections.singletonList(4)); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(6, dag.getNumVertices()); + assertEquals(5, dag.getNumEdges()); + assertEquals(4, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3), dag.getVertices().get(4), dag.getVertices().get(5))), + new HashSet<>(dag.getFrontier())); + + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertFalse(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertFalse(dag.getVertices().get(2).isStart()); + assertTrue(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + assertTrue(dag.getVertices().get(4).isFrontier()); + assertFalse(dag.getVertices().get(4).isStart()); + assertTrue(dag.getVertices().get(5).isFrontier()); + assertFalse(dag.getVertices().get(5).isStart()); } private static final int NUM_THREADS_PER_BLOCK = 128; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index e956f3de..4a8d8a52 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -47,7 +47,7 @@ public void append(GrCUDAComputationalElement kernel) { // Remove from the frontier vertices that no longer belong to it; frontier = frontier.stream().filter(DAGVertex::isFrontier).collect(Collectors.toList()); // Add the new vertex to the frontier if it has no children; - if (newVertex.isFrontier) { + if (newVertex.isFrontier()) { frontier.add(newVertex); } } @@ -97,10 +97,6 @@ public class DAGVertex { * False only if the vertex has parent vertices. */ private boolean isStart = true; - /** - * False only if the vertex has child vertices. - */ - private boolean isFrontier = true; /** * List of edges that connect this vertex to its parents (they are the start of each edge). */ @@ -128,8 +124,14 @@ public boolean isStart() { return isStart; } + /** + * A vertex is considered part of the DAG frontier if it could lead to dependencies. + * In general, a vertex is not part of the frontier only if it has no arguments, it has already been executed, + * or all its arguments have already been superseded by the arguments of computations that depends on this one; + * @return if this vertex is part of the DAG frontier + */ public boolean isFrontier() { - return isFrontier; + return kernel.hasPossibleDependencies(); } public List getParents() { @@ -140,14 +142,14 @@ public List getChildren() { return children; } + public List getParentVertices() { return parents.stream().map(DAGEdge::getStart).collect(Collectors.toList()); } + + public List getChildVertices() { return children.stream().map(DAGEdge::getEnd).collect(Collectors.toList()); } + public void setStart(boolean start) { isStart = start; } - public void setFrontier(boolean frontier) { - isFrontier = frontier; - } - public void addParent(DAGEdge edge) { parents.add(edge); isStart = false; @@ -155,7 +157,6 @@ public void addParent(DAGEdge edge) { public void addChild(DAGEdge edge) { children.add(edge); - isFrontier = false; } @Override @@ -163,7 +164,7 @@ public String toString() { return "V(" + ", id=" + id + ", isStart=" + isStart + - ", isFrontier=" + isFrontier + + ", isFrontier=" + this.isFrontier() + ", parents=" + parents + ", children=" + children + ')'; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java index 677a1e28..e557d8bf 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java @@ -4,8 +4,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.IntStream; /** * Basic class that represents GrCUDA computations, @@ -14,9 +12,15 @@ public abstract class GrCUDAComputationalElement { /** - * This set contains the input arguments that are used to compute dependencies; + * This set contains the original set of input arguments that are used to compute dependencies; */ protected final Set argumentSet; + /** + * This set contains the input arguments that are considered, at each step, in the dependency computation. + * The set initially coincides with "argumentSet", then arguments are removed from this set once a new dependency is found; + * TODO: should this be moved somewhere else? e.g. inside the DAG, although this means moving the dependency computation too + */ + private Set activeArgumentSet; /** * Reference to the execution context where this computation is executed; */ @@ -29,6 +33,8 @@ public abstract class GrCUDAComputationalElement { */ public GrCUDAComputationalElement(GrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer) { this.argumentSet = initializer.initialize(); + // Initialize by making a copy of the original set; + this.activeArgumentSet = new HashSet<>(this.argumentSet); this.grCUDAExecutionContext = grCUDAExecutionContext; this.grCUDAExecutionContext.registerExecution(this); } @@ -39,9 +45,7 @@ public GrCUDAComputationalElement(GrCUDAExecutionContext grCUDAExecutionContext, * @param args the list of arguments provided to the computation. Arguments are expected to be {@link org.graalvm.polyglot.Value} */ public GrCUDAComputationalElement(GrCUDAExecutionContext grCUDAExecutionContext, List args) { - this.argumentSet = new DefaultExecutionInitializer(args).initialize(); - this.grCUDAExecutionContext = grCUDAExecutionContext; - this.grCUDAExecutionContext.registerExecution(this); + this(grCUDAExecutionContext, new DefaultExecutionInitializer(args)); } public Set getArgumentSet() { @@ -55,10 +59,31 @@ public Set getArgumentSet() { * @return the list of arguments that the two kernels have in common */ public List computeDependencies(GrCUDAComputationalElement other) { - // Obtain the common dependencies through set intersection; - Set intersection = new HashSet<>(argumentSet); - intersection.retainAll(other.argumentSet); - return new ArrayList<>(intersection); + Set dependencies = new HashSet<>(); + Set newArgumentSet = new HashSet<>(); + for (Object arg : this.activeArgumentSet) { + // The other computation requires the current argument, so we have found a new dependency; + if (other.activeArgumentSet.contains(arg)) { + dependencies.add(arg); + } else { + // Otherwise, the current argument is still "active", and could enforce a dependency on a future computation; + newArgumentSet.add(arg); + } + } + // Arguments that are not leading to a new dependency could still create new dependencies later on! + this.activeArgumentSet = newArgumentSet; + // Return the list of arguments that created dependencies with the new computation; + return new ArrayList<>(dependencies); + } + + /** + * Return if this computation could lead to dependencies with future computations. + * If not, this usually means that all of its arguments have already been superseded by other computations, + * or that the computation didn't have any arguments to begin with; + * @return if the computation could lead to future dependencies + */ + public boolean hasPossibleDependencies() { + return !this.activeArgumentSet.isEmpty(); } /** From a6f27546b6b76b0c4d5554be7e26c318ada79819 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 17 Apr 2020 10:25:55 +0200 Subject: [PATCH 013/236] updated notes --- notes.md | 113 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 66 insertions(+), 47 deletions(-) diff --git a/notes.md b/notes.md index acd1f3ef..115ea517 100644 --- a/notes.md +++ b/notes.md @@ -1,35 +1,55 @@ -# Notes on GrCUDA architecture - -The `nodes` package contains the basic Truffle nodes that define the language - * Not relevant to our goal, we can deal with already-parsed functions (e.g. `buildkernel`) and `InteropLibrary` objects -The `function` package contains functions that can be invoked through the DSL, such as `buildkernel` - * We might want to add observers/callbacks in some of these functions, or do it directly in the `Kernel` constructor - -`Namespace` handling: the `Namespace` class maintains a tree of functions (e.g. `buildkernel`) and other namespaces (e.g. `ML`) - * When `CallNode` is executed, we look for a function whose name matches the identifier of the `CallNode` - * If a function has a namespace, like `ML::cumlDpDbscanFit`, it is decomposed in multiple pieces (`ML` and `cumlDpDbscanFit`), and it is retrieved with a tree visit in the namespace - * Additional namespaces are created in `GrCUDAContext`, and a registry like `CUMLRegistry` adds functions to the namespace - * Each function in the registry is added to the namespace as an `ExternalFunction` -# Notes on GrCUDA extensions +# Extending GrCUDA with a dynamic computational DAG -Idea: keep a computational DAG that connects GPU computations expressed in GrCUDA and their dependencies - * Then use the DAG to schedule parallel computations on different streams and avoid synchronization when not necessary - * See `projects/resources/python/examples/pipeline_1.py` for a practical example +The main idea is to **represent GrCUDA computations as vertices of a DAG**, connected using their dependencies (e.g. the output of a kernel is used as input in another one). + * The DAG allows scheduling parallel computations on different streams and avoid synchronization when not necessary + * See `projects/resources/python/examples/pipeline_1.py` for a simple example of how it can be useful + +Differences w.r.t. existing techniques (e.g. TensorFlow or [CUDA Graphs](https://devblogs.nvidia.com/cuda-graphs/)): + 1. The DAG creation is automatic, instead of being built by the user + 2. The DAG is built at runtime, not at compile time. This means that we don't have to worry about the control flow of the host program, but only about data dependencies, + as we dynamically add and schedule new vertices/computations as the user provides them. We can also collect profiling information and adjust the DAG creation based on that (e.g. how many CUDA streams we need) We need a class (e.g. `GpuExecutionContext`) that tracks GPU computational elements (e.g. `kernels`) declarations and invocations - * When a new kernel is created, or when it is called, update the context with the new information - * Then the context will decide whether to execute it immediately or add a sync point (this could also be done in a different class, design is WIP) + * When a new computation is created, or when it is called, notify `GpuExecutionContext` so that it updates the `DAG` + * Different computations are overlapped using different CUDA streams + * If a computation requires one or more computations to finish before starting, it will have to wait by using a synchronization point on the right CUDA stream(s) + * Otherwise it will execute immediately + + +## API Design + +Dependencies can be explicitely specified by the user using handles, or we can try inferring dependencies automatically + 1. Automatic dependency inferring is more interesting from a research perspective, and *cleaner* for end-users + * By default, we need to have explicit sync points after every kernel call + * Automatic dependency inferring will remove some sync points if possible + * It must be a *white-listing* process, as we need to guarantee correctness + 2. The API needs ways to modify/turn off this policy, if desired + * Startup option? Easy, but cannot be modified + * Expose a function in the GrCUDA DSL? More flexibility, but changing options using the DSL is not very clean + 3. How to handle CPU control flow? In GrCUDA we are not aware of `if` and `for` loops on the host side + * The DAG is built dynamically: we need to update it as we receive scheduling orders, and decide if we can execute or not. We don't care about the original control flow + 4. How do we identify if a **parameter is read-only**? If two kernels use the same parameter but only read from it, they can execute in parallel + * This is not trivial: LLVM can understand, for example, if a scalar value is read-only, but doing that with an array is not always possible + * Users might have to specify which parameters are read-only in the kernel signature, which is probably better than using explicit handles + 5. How do we handle scalar values? We could also have dependencies due to scalar values (e.g. a computation is started only if the error in the next iteration is above a threashold) + * Scalars are returned by copy, so we cannot keep track of their dependencies. Input scalars are read-only by definition, but what about output scalars? + * Currently kernels cannot return scalar values, and scalar outputs are stored in a size-1 array (which we can treat as any other array) + * But library functions can return scalars! + * One idea could be to *box* scalar values with Truffle nodes and store the actual value using a `Future`. + If the user reads or writes the value, we wait for the GPU computation to end. Then the scalar value can be unboxed to avoid further overheads. + 6. Libraries functions: library functions are more complex to handle as they could also have code running on the host side. + * They also do not expose streams, so it could be difficult to pipeline them + * In some cases they might expose streams in the signature, we can probably find them by parsing the signature + * They can also return scalars (see problem 5) + ## What is a computational element in GrCUDA? `bindkernel`, `buildkernel` functions create a `Kernel` object that contains information about the signature and code * `Kernel` is an executable `InteropLibrary` class that creates a `ConfiguredKernel` that contains information about the number of blocks, shared memory size, etc... - * `ConfiguredKernel` could also contain *dependency handles* specified by the programmer, or created internally - * Pro: easy to extend. Cons: it breaks the similarity with CUDA <<< ... >>> syntax - * Alternative: `ConfiguredKernel` can also be called with a single `Handle` parameter, and it will return a new `ConfiguredKernelWithHandle` that can be executed with the kernel args - * Kernel arguments are provided to `ConfiguredKernel` when it's executed, although they are also passed to the corresponding `Kernel` + * Kernel arguments are provided to `ConfiguredKernel` when it's executed, although they are also passed to the corresponding `Kernel` `DeviceArray` accesses can be done in any point, and are not represented as kernels (as they happen on CPU side, using managed memory) * If a `DeviceArray` access happens between two kernels, we must keep the sync point @@ -43,37 +63,36 @@ Pre-registered libraries, such as RAPIDS, can be called like `dbscan_func = poly Library functions (non-kernels) can also be loaded, using `BindFunction` * This loads the function using NFI, and returns a callable object - * It is not clear how to handle calls to the callable object. It might be required to wrap it into a custom Truffle Node - + * They can also return scalar values (see [API Design, point 6](#api-design)) + Other stuff? E.g. `map` and `shred`, currently not documented -* We also need to keep track of `DeviceArrays` and `MultiDimDeviceArray`, and possibly of scalar values, to track dependencies - * How do we track scalar values? They are not handled as objects in GrCUDA - * One option is to turn them into size-1 arrays, and use `DeviceArrays`, or use some other wrapper function + +Invocation to computational elements are wrapped in classes that extend a generic `GrCUDAComputationalElement`, +which is used to build the vertices of the DAG and exposes interfaces to compute data dependencies with other `GrCUDAComputationalElements` and to schedule the computation -## API Design - -We can have explicit handles, or infer dependencies automatically - * Automatic dependency inferring is more interesting from a research perspective, and *cleaner* for end-users - * But more complex to implement, clearly - * By default, we need to have explicit sync points after every kernel call - * Automatic dependency inferring will remove some sync points if possible - * It must be a *white-listing* process, as we need to guarantee correctness - * The API needs ways to modify/turn off this policy, if desired - * Startup option? Easy, but cannot be modified - * Expose a function in the GrCUDA DSL? More flexibility, but changing options using the DSL is not very clean - * Problem: how to handle CPU control flow? In GrCUDA we are not aware of `if` and `for` loops on the host side - * The DAG cannot be build statically, we need to update it as we receive scheduling orders, and decide if we can execute or not - * Problem: how do we identify if a parameter is read-only? If two kernels use the same parameter but only read from it, they can execute in parallel - * This is not trivial: LLVM can understand, for example, if a scalar value is read-only, but doing that with an array is not trivial - * Users might have to specify which parameters are read-only, which is still better than using handles +# Other notes on GrCUDA architecture + +The `nodes` package contains the basic Truffle nodes that define the language + * Not immediately relevant to this project, we can deal with already-parsed functions (e.g. `buildkernel`) and `InteropLibrary` objects + * But it might be required to add nodes to handle scalar values +The `function` package contains functions that can be invoked through the DSL, such as `buildkernel` + * We might want to add some function to change the runtime behaviour at runtime + +`Namespace` handling: the `Namespace` class maintains a tree of functions (e.g. `buildkernel`) and other namespaces (e.g. `ML`) + * When `CallNode` is executed, we look for a function whose name matches the identifier of the `CallNode` + * If a function has a namespace, like `ML::cumlDpDbscanFit`, it is decomposed in multiple pieces (`ML` and `cumlDpDbscanFit`), and it is retrieved with a tree visit in the namespace + * Additional namespaces are created in `GrCUDAContext`, and a registry like `CUMLRegistry` adds functions to the namespace + * Each function in the registry is added to the namespace as an `ExternalFunction` + ## Open questions 1. What are `map` and `shred` functions? Are they exposed to the outside? -2. How to handle library functions? Wrapping them with a Truffle Node? -3. How to handle pre-registered libraries and external functions? Can we maybe use the same wrapping trick as library functions? +2. How to handle library functions? Wrapping them with a `GrCUDAComputationalElement`? +3. How to handle pre-registered libraries and external functions? Wrapping them with a `GrCUDAComputationalElement`? 4. How do we modify kernel calls to add/remove sync points? -5. How do we execute kernels in parallel? We need to have streams +5. How do we execute kernels in parallel? We need to have streams, and a stream manager 6. How do we monitor accesses to `DeviceArrays` to preserve sync points? -7. How do we track scalar values? Probably need to do computations that return scalar synchronously, as we don't know know the guest language will use the scalar +7. How do we track scalar values? 8. How to understand if a parameter is read-only? +9. When doing unit-testing, can we access internal data structures of the guest language (e.g. to monitor the state of the DAG) From 40b041504f7f8f7be41a81da6944a5322325d3b8 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 18 Apr 2020 12:18:01 +0200 Subject: [PATCH 014/236] moved cudaruntime inside grcudaexecutioncontext --- .../grcuda/test/gpu/ExecutionDAGTest.java | 17 ++++++++-- .../src/com/nvidia/grcuda/GrCUDAContext.java | 23 ++++++++------ .../nvidia/grcuda/array/AbstractArray.java | 9 +++--- .../com/nvidia/grcuda/array/DeviceArray.java | 24 ++++++-------- .../grcuda/array/MultiDimDeviceArray.java | 11 ++++--- .../grcuda/array/MultiDimDeviceArrayView.java | 2 +- .../grcuda/functions/BindKernelFunction.java | 9 +++--- .../grcuda/functions/BuildKernelFunction.java | 9 +++--- .../grcuda/functions/DeviceArrayFunction.java | 19 ++++++------ .../functions/MapDeviceArrayFunction.java | 17 +++++----- .../functions/TypedDeviceArrayFunction.java | 9 +++--- .../TypedMapDeviceArrayFunction.java | 9 +++--- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 15 +++------ .../grcuda/gpu/GrCUDAExecutionContext.java | 31 ++++++++++++++++--- .../src/com/nvidia/grcuda/gpu/Kernel.java | 16 +++++----- .../nvidia/grcuda/gpu/KernelExecution.java | 4 +-- .../com/nvidia/grcuda/nodes/ArrayNode.java | 7 +++-- 17 files changed, 133 insertions(+), 98 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index ea5a596c..7ff9a07d 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,9 +1,11 @@ package com.nvidia.grcuda.test.gpu; +import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.InitializeArgumentSet; +import com.oracle.truffle.api.TruffleLanguage; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; import org.junit.Test; @@ -30,6 +32,15 @@ public static class KernelExecutionTest extends GrCUDAComputationalElement { } } + /** + * Mock class to test the GrCUDAExecutionContextTest, it has a null CUDARuntime; + */ + public static class GrCUDAExecutionContextTest extends GrCUDAExecutionContext { + GrCUDAExecutionContextTest() { + super(null); + } + } + @Test public void executionDAGConstructorTest() { ExecutionDAG dag = new ExecutionDAG(); @@ -42,7 +53,7 @@ public void executionDAGConstructorTest() { @Test public void addVertexToDAGTest() { - GrCUDAExecutionContext context = new GrCUDAExecutionContext(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); // Create two mock kernel executions; new KernelExecutionTest(context, Arrays.asList(1, 2, 3)); @@ -73,7 +84,7 @@ public void addVertexToDAGTest() { @Test public void dependencyPipelineSimpleMockTest() { - GrCUDAExecutionContext context = new GrCUDAExecutionContext(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); @@ -114,7 +125,7 @@ public void dependencyPipelineSimpleMockTest() { @Test public void complexFrontierMockTest() { - GrCUDAExecutionContext context = new GrCUDAExecutionContext(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // \----> C(2) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index 7fd4ffc7..defd1749 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -32,6 +32,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import org.graalvm.options.OptionKey; import com.nvidia.grcuda.cublas.CUBLASRegistry; @@ -58,7 +59,7 @@ public final class GrCUDAContext { private static final String ROOT_NAMESPACE = "CU"; private final Env env; - private final CUDARuntime cudaRuntime; + private final GrCUDAExecutionContext grCUDAExecutionContext; private final Namespace rootNamespace; private final ArrayList disposables = new ArrayList<>(); private AtomicInteger moduleId = new AtomicInteger(0); @@ -69,19 +70,19 @@ public final class GrCUDAContext { public GrCUDAContext(Env env) { this.env = env; - this.cudaRuntime = new CUDARuntime(this, env); + this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env); Namespace namespace = new Namespace(ROOT_NAMESPACE); namespace.addNamespace(namespace); namespace.addFunction(new BindFunction()); - namespace.addFunction(new DeviceArrayFunction(cudaRuntime)); + namespace.addFunction(new DeviceArrayFunction(this.grCUDAExecutionContext)); namespace.addFunction(new MapFunction()); namespace.addFunction(new ShredFunction()); - namespace.addFunction(new BindKernelFunction(cudaRuntime)); - namespace.addFunction(new BuildKernelFunction(cudaRuntime)); - namespace.addFunction(new GetDevicesFunction(cudaRuntime)); - namespace.addFunction(new GetDeviceFunction(cudaRuntime)); - cudaRuntime.registerCUDAFunctions(namespace); + namespace.addFunction(new BindKernelFunction(this.grCUDAExecutionContext)); + namespace.addFunction(new BuildKernelFunction(this.grCUDAExecutionContext)); + namespace.addFunction(new GetDevicesFunction(this.grCUDAExecutionContext.getCudaRuntime())); + namespace.addFunction(new GetDeviceFunction(this.grCUDAExecutionContext.getCudaRuntime())); + this.grCUDAExecutionContext.getCudaRuntime().registerCUDAFunctions(namespace); if (this.getOption(GrCUDAOptions.CuMLEnabled)) { Namespace ml = new Namespace(CUMLRegistry.NAMESPACE); namespace.addNamespace(ml); @@ -99,8 +100,12 @@ public Env getEnv() { return env; } + public GrCUDAExecutionContext getGrCUDAExecutionContext() { + return grCUDAExecutionContext; + } + public CUDARuntime getCUDARuntime() { - return cudaRuntime; + return this.grCUDAExecutionContext.getCudaRuntime(); } public Namespace getRootNamespace() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index a1e80361..ea4c16d5 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -2,6 +2,7 @@ import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.oracle.truffle.api.interop.InteropLibrary; import com.oracle.truffle.api.interop.InvalidArrayIndexException; import com.oracle.truffle.api.interop.TruffleObject; @@ -19,7 +20,7 @@ public abstract class AbstractArray implements TruffleObject { /** * Reference to the underlying CUDA runtime that manages the array memory. */ - protected final CUDARuntime runtime; + protected final GrCUDAExecutionContext grCUDAExecutionContext; /** * Data type of elements stored in the array. @@ -36,8 +37,8 @@ public ElementType getElementType() { return elementType; } - protected AbstractArray(CUDARuntime runtime, ElementType elementType) { - this.runtime = runtime; + protected AbstractArray(GrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType) { + this.grCUDAExecutionContext = grCUDAExecutionContext; this.elementType = elementType; } @@ -48,7 +49,7 @@ protected AbstractArray(CUDARuntime runtime, ElementType elementType) { */ protected void registerArray() { if (!this.registeredInContext) { - this.runtime.getExecutionContext().registerArray(this); + this.grCUDAExecutionContext.registerArray(this); this.registeredInContext = true; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index 5a27fdf2..9aadf49f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -33,6 +33,7 @@ import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.functions.DeviceArrayCopyFunction; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.LittleEndianNativeArrayView; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; @@ -59,10 +60,8 @@ public final class DeviceArray extends AbstractArray implements TruffleObject { private static final String COPY_FROM = "copyFrom"; private static final String COPY_TO = "copyTo"; - private static final String DAG = "dag"; - - private static final MemberSet PUBLIC_MEMBERS = new MemberSet(COPY_FROM, COPY_TO, DAG); - private static final MemberSet MEMBERS = new MemberSet(POINTER, COPY_FROM, COPY_TO, DAG); + private static final MemberSet PUBLIC_MEMBERS = new MemberSet(COPY_FROM, COPY_TO); + private static final MemberSet MEMBERS = new MemberSet(POINTER, COPY_FROM, COPY_TO); @ExportLibrary(InteropLibrary.class) public static final class MemberSet implements TruffleObject { @@ -115,11 +114,11 @@ public boolean constainsValue(String name) { /** Mutable view onto the underlying memory buffer. */ private final LittleEndianNativeArrayView nativeView; - public DeviceArray(CUDARuntime runtime, long numElements, ElementType elementType) { - super(runtime, elementType); + public DeviceArray(GrCUDAExecutionContext grCUDAExecutionContext, long numElements, ElementType elementType) { + super(grCUDAExecutionContext, elementType); this.numElements = numElements; this.sizeBytes = numElements * elementType.getSizeBytes(); - this.nativeView = runtime.cudaMallocManaged(sizeBytes); + this.nativeView = grCUDAExecutionContext.getCudaRuntime().cudaMallocManaged(sizeBytes); // Register the array in the GrCUDAExecutionContext; this.registerArray(); } @@ -139,7 +138,7 @@ public String toString() { @Override protected void finalize() throws Throwable { - runtime.cudaFree(nativeView); + grCUDAExecutionContext.getCudaRuntime().cudaFree(nativeView); super.finalize(); } @@ -250,7 +249,7 @@ Object getMembers(boolean includeInternal) { boolean isMemberReadable(String memberName, @Shared("memberName") @Cached("createIdentityProfile()") ValueProfile memberProfile) { String name = memberProfile.profile(memberName); - return POINTER.equals(name) || COPY_FROM.equals(name) || COPY_TO.equals(name) || DAG.equals(name); + return POINTER.equals(name) || COPY_FROM.equals(name) || COPY_TO.equals(name); } @ExportMessage @@ -269,9 +268,6 @@ Object readMember(String memberName, if (COPY_TO.equals(memberName)) { return new DeviceArrayCopyFunction(this, DeviceArrayCopyFunction.CopyDirection.TO_POINTER); } - if (DAG.equals(memberName)) { - return runtime.getExecutionContext().getDag(); - } CompilerDirectives.transferToInterpreter(); throw UnknownIdentifierException.create(memberName); } @@ -308,7 +304,7 @@ public void copyFrom(long fromPointer, long numCopyElements) throws IndexOutOfBo CompilerDirectives.transferToInterpreter(); throw new IndexOutOfBoundsException(); } - runtime.cudaMemcpy(getPointer(), fromPointer, numBytesToCopy); + grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(getPointer(), fromPointer, numBytesToCopy); } public void copyTo(long toPointer, long numCopyElements) throws IndexOutOfBoundsException { @@ -317,6 +313,6 @@ public void copyTo(long toPointer, long numCopyElements) throws IndexOutOfBounds CompilerDirectives.transferToInterpreter(); throw new IndexOutOfBoundsException(); } - runtime.cudaMemcpy(toPointer, getPointer(), numBytesToCopy); + grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(toPointer, getPointer(), numBytesToCopy); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java index eb256be6..48c5de55 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java @@ -33,6 +33,7 @@ import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.LittleEndianNativeArrayView; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; @@ -66,9 +67,9 @@ public class MultiDimDeviceArray extends AbstractArray implements TruffleObject /** Mutable view onto the underlying memory buffer. */ private final LittleEndianNativeArrayView nativeView; - public MultiDimDeviceArray(CUDARuntime runtime, ElementType elementType, long[] dimensions, - boolean useColumnMajor) { - super(runtime, elementType); + public MultiDimDeviceArray(GrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType, long[] dimensions, + boolean useColumnMajor) { + super(grCUDAExecutionContext, elementType); if (dimensions.length < 2) { CompilerDirectives.transferToInterpreter(); throw new IllegalArgumentException( @@ -88,7 +89,7 @@ public MultiDimDeviceArray(CUDARuntime runtime, ElementType elementType, long[] System.arraycopy(dimensions, 0, this.elementsPerDimension, 0, dimensions.length); this.stridePerDimension = computeStride(dimensions, columnMajor); this.numElements = prod; - this.nativeView = runtime.cudaMallocManaged(getSizeBytes()); + this.nativeView = grCUDAExecutionContext.getCudaRuntime().cudaMallocManaged(getSizeBytes()); // Register the array in the GrCUDAExecutionContext; this.registerArray(); } @@ -172,7 +173,7 @@ public String toString() { @Override protected void finalize() throws Throwable { - runtime.cudaFree(nativeView); + grCUDAExecutionContext.getCudaRuntime().cudaFree(nativeView); super.finalize(); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java index c56a9742..d573f23a 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java @@ -50,7 +50,7 @@ public final class MultiDimDeviceArrayView extends AbstractArray implements Truf private final long stride; MultiDimDeviceArrayView(MultiDimDeviceArray mdDeviceArray, int dim, long offset, long stride) { - super(mdDeviceArray.runtime, mdDeviceArray.elementType); + super(mdDeviceArray.grCUDAExecutionContext, mdDeviceArray.elementType); this.mdDeviceArray = mdDeviceArray; this.thisDimension = dim; this.offset = offset; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindKernelFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindKernelFunction.java index c58127cb..a2b22a64 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindKernelFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindKernelFunction.java @@ -29,17 +29,18 @@ package com.nvidia.grcuda.functions; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.ArityException; import com.oracle.truffle.api.interop.UnsupportedTypeException; public final class BindKernelFunction extends Function { - private final CUDARuntime cudaRuntime; + private final GrCUDAExecutionContext grCUDAExecutionContext; - public BindKernelFunction(CUDARuntime cudaRuntime) { + public BindKernelFunction(GrCUDAExecutionContext grCUDAExecutionContext) { super("bindkernel"); - this.cudaRuntime = cudaRuntime; + this.grCUDAExecutionContext = grCUDAExecutionContext; } @Override @@ -51,6 +52,6 @@ public Object call(Object[] arguments) throws UnsupportedTypeException, ArityExc String kernelName = expectString(arguments[1], "argument 2 of bindkernel must be string (kernel name)"); String kernelSignature = expectString(arguments[2], "argument 3 of bindkernel must be string (signature of kernel)"); - return cudaRuntime.loadKernel(cubinFile, kernelName, kernelSignature); + return grCUDAExecutionContext.loadKernel(cubinFile, kernelName, kernelSignature); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BuildKernelFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BuildKernelFunction.java index 7ccc23d6..bceed0a3 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BuildKernelFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BuildKernelFunction.java @@ -29,16 +29,17 @@ package com.nvidia.grcuda.functions; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.ArityException; import com.oracle.truffle.api.interop.UnsupportedTypeException; public class BuildKernelFunction extends Function { - private final CUDARuntime cudaRuntime; + private final GrCUDAExecutionContext grCUDAExecutionContext; - public BuildKernelFunction(CUDARuntime cudaRuntime) { + public BuildKernelFunction(GrCUDAExecutionContext grCUDAExecutionContext) { super("buildkernel"); - this.cudaRuntime = cudaRuntime; + this.grCUDAExecutionContext = grCUDAExecutionContext; } @Override @@ -50,6 +51,6 @@ public Object call(Object[] arguments) throws UnsupportedTypeException, ArityExc String kernelName = expectString(arguments[1], "argument 2 of buildkernel must be string (kernel name)"); String kernelSignature = expectString(arguments[2], "argument 3 of buildkernel must be string (signature of kernel)"); - return this.cudaRuntime.buildKernel(code, kernelName, kernelSignature); + return grCUDAExecutionContext.buildKernel(code, kernelName, kernelSignature); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java index 4cfb447e..7f4227d9 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java @@ -38,6 +38,7 @@ import com.nvidia.grcuda.TypeException; import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; @@ -59,11 +60,11 @@ public final class DeviceArrayFunction extends Function { private static final MemberSet MEMBERS = new MemberSet(MAP); - private final CUDARuntime runtime; + private final GrCUDAExecutionContext grCUDAExecutionContext; - public DeviceArrayFunction(CUDARuntime runtime) { + public DeviceArrayFunction(GrCUDAExecutionContext grCUDAExecutionContext) { super("DeviceArray"); - this.runtime = runtime; + this.grCUDAExecutionContext = grCUDAExecutionContext; } @Override @@ -80,13 +81,13 @@ public Object call(Object[] arguments) throws ArityException, UnsupportedTypeExc throw new GrCUDAException(e.getMessage()); } if (arguments.length == 1) { - return new TypedDeviceArrayFunction(runtime, elementType); + return new TypedDeviceArrayFunction(grCUDAExecutionContext, elementType); } else { - return createArray(arguments, 1, elementType, runtime); + return createArray(arguments, 1, elementType, grCUDAExecutionContext); } } - static Object createArray(Object[] arguments, int start, ElementType elementType, CUDARuntime runtime) throws UnsupportedTypeException { + static Object createArray(Object[] arguments, int start, ElementType elementType, GrCUDAExecutionContext grCUDAExecutionContext) throws UnsupportedTypeException { ArrayList elementsPerDim = new ArrayList<>(); Optional useColumnMajor = Optional.empty(); for (int i = start; i < arguments.length; ++i) { @@ -113,10 +114,10 @@ static Object createArray(Object[] arguments, int start, ElementType elementType } } if (elementsPerDim.size() == 1) { - return new DeviceArray(runtime, elementsPerDim.get(0), elementType); + return new DeviceArray(grCUDAExecutionContext, elementsPerDim.get(0), elementType); } long[] dimensions = elementsPerDim.stream().mapToLong(l -> l).toArray(); - return new MultiDimDeviceArray(runtime, elementType, dimensions, useColumnMajor.orElse(false)); + return new MultiDimDeviceArray(grCUDAExecutionContext, elementType, dimensions, useColumnMajor.orElse(false)); } @ExportMessage @@ -144,7 +145,7 @@ boolean isMemberExisting(String memberName, Object readMember(String memberName, @Shared("memberName") @Cached("createIdentityProfile()") ValueProfile memberProfile) throws UnknownIdentifierException { if (MAP.equals(memberProfile.profile(memberName))) { - return new MapDeviceArrayFunction(runtime); + return new MapDeviceArrayFunction(grCUDAExecutionContext); } CompilerDirectives.transferToInterpreter(); throw UnknownIdentifierException.create(memberName); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java index 45bec9e8..9975efbe 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java @@ -39,6 +39,7 @@ import com.nvidia.grcuda.NoneValue; import com.nvidia.grcuda.TypeException; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.Truffle; @@ -75,7 +76,7 @@ @GenerateUncached abstract class MapArrayNode extends Node { - abstract Object execute(Object source, ElementType elementType, CUDARuntime runtime); + abstract Object execute(Object source, ElementType elementType, GrCUDAExecutionContext grCUDAExecutionContext); private static final FrameDescriptor DESCRIPTOR = new FrameDescriptor(); private static final FrameSlot SIZE_SLOT = DESCRIPTOR.addFrameSlot("size", FrameSlotKind.Long); @@ -170,7 +171,7 @@ protected CallTarget createUncachedLoop(Object source, GrCUDAContext context) { } @Specialization(limit = "3") - Object doMap(Object source, ElementType elementType, CUDARuntime runtime, + Object doMap(Object source, ElementType elementType, GrCUDAExecutionContext grCUDAExecutionContext, @CachedLibrary("source") InteropLibrary interop, @CachedContext(GrCUDALanguage.class) @SuppressWarnings("unused") GrCUDAContext context, @Cached(value = "createLoop(source)", uncached = "createUncachedLoop(source, context)") CallTarget loop) { @@ -191,7 +192,7 @@ Object doMap(Object source, ElementType elementType, CUDARuntime runtime, CompilerDirectives.transferToInterpreter(); throw new GrCUDAException("cannot read array size"); } - DeviceArray result = new DeviceArray(runtime, size, elementType); + DeviceArray result = new DeviceArray(grCUDAExecutionContext, size, elementType); loop.call(size, source, result); return result; } @@ -205,11 +206,11 @@ Object doMap(Object source, ElementType elementType, CUDARuntime runtime, @ExportLibrary(InteropLibrary.class) public final class MapDeviceArrayFunction extends Function { - private final CUDARuntime runtime; + private final GrCUDAExecutionContext grCUDAExecutionContext; - public MapDeviceArrayFunction(CUDARuntime runtime) { + public MapDeviceArrayFunction(GrCUDAExecutionContext grCUDAExecutionContext) { super("MapDeviceArray"); - this.runtime = runtime; + this.grCUDAExecutionContext = grCUDAExecutionContext; } @ExportMessage @@ -236,13 +237,13 @@ public Object execute(Object[] arguments, throw new GrCUDAInternalException(e.getMessage()); } if (arguments.length == 1) { - return new TypedMapDeviceArrayFunction(runtime, elementType); + return new TypedMapDeviceArrayFunction(grCUDAExecutionContext, elementType); } else { if (arguments.length != 2) { CompilerDirectives.transferToInterpreter(); throw ArityException.create(2, arguments.length); } - return mapNode.execute(arguments[1], elementType, runtime); + return mapNode.execute(arguments[1], elementType, grCUDAExecutionContext); } } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedDeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedDeviceArrayFunction.java index 02f80d7c..55923d18 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedDeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedDeviceArrayFunction.java @@ -30,6 +30,7 @@ import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.ArityException; @@ -40,12 +41,12 @@ */ public final class TypedDeviceArrayFunction extends Function { - private final CUDARuntime runtime; + private final GrCUDAExecutionContext grCUDAExecutionContext; private final ElementType elementType; - public TypedDeviceArrayFunction(CUDARuntime runtime, ElementType elementType) { + public TypedDeviceArrayFunction(GrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType) { super("TypedDeviceArray"); - this.runtime = runtime; + this.grCUDAExecutionContext = grCUDAExecutionContext; this.elementType = elementType; } @@ -56,6 +57,6 @@ public Object call(Object[] arguments) throws ArityException, UnsupportedTypeExc CompilerDirectives.transferToInterpreter(); throw ArityException.create(1, arguments.length); } - return DeviceArrayFunction.createArray(arguments, 0, elementType, runtime); + return DeviceArrayFunction.createArray(arguments, 0, elementType, grCUDAExecutionContext); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedMapDeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedMapDeviceArrayFunction.java index ffde1574..c09b1cb0 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedMapDeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedMapDeviceArrayFunction.java @@ -30,6 +30,7 @@ import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.interop.ArityException; @@ -43,12 +44,12 @@ @ExportLibrary(InteropLibrary.class) public final class TypedMapDeviceArrayFunction extends Function { - private final CUDARuntime runtime; + private final GrCUDAExecutionContext grCUDAExecutionContext; private final ElementType elementType; - public TypedMapDeviceArrayFunction(CUDARuntime runtime, ElementType elementType) { + public TypedMapDeviceArrayFunction(GrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType) { super("TypedMapDeviceArray"); - this.runtime = runtime; + this.grCUDAExecutionContext = grCUDAExecutionContext; this.elementType = elementType; } @@ -59,6 +60,6 @@ public Object execute(Object[] arguments, CompilerDirectives.transferToInterpreter(); throw ArityException.create(1, arguments.length); } - return mapNode.execute(arguments[0], elementType, runtime); + return mapNode.execute(arguments[0], elementType, grCUDAExecutionContext); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 34651283..41a7c358 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -55,7 +55,6 @@ import com.oracle.truffle.api.interop.UnsupportedMessageException; import com.oracle.truffle.api.interop.UnsupportedTypeException; import com.oracle.truffle.api.source.Source; -import org.graalvm.polyglot.HostAccess; public final class CUDARuntime { @@ -64,7 +63,6 @@ public final class CUDARuntime { static final String NVRTC_LIBRARY_NAME = "nvrtc"; private final GrCUDAContext context; - private final GrCUDAExecutionContext executionContext; private final NVRuntimeCompiler nvrtc; /** @@ -79,7 +77,6 @@ public final class CUDARuntime { public CUDARuntime(GrCUDAContext context, Env env) { this.context = context; - this.executionContext = new GrCUDAExecutionContext(); try { TruffleObject libcudart = (TruffleObject) env.parseInternal( Source.newBuilder("nfi", "load " + "lib" + CUDA_RUNTIME_LIBRARY_NAME + ".so", "cudaruntime").build()).call(); @@ -101,10 +98,6 @@ public CUDARuntime(GrCUDAContext context, Env env) { // using this slow/uncached instance since all calls are non-critical private static final InteropLibrary INTEROP = InteropLibrary.getFactory().getUncached(); - public GrCUDAExecutionContext getExecutionContext() { - return executionContext; - } - interface CallSupport { String getName(); @@ -495,14 +488,14 @@ public Object getSymbol(CUDARuntime runtime) throws UnknownIdentifierException { private HashMap loadedModules = new HashMap<>(); @TruffleBoundary - public Kernel loadKernel(String cubinFile, String kernelName, String signature) { + public Kernel loadKernel(GrCUDAExecutionContext grCUDAExecutionContext, String cubinFile, String kernelName, String signature) { CUModule module = loadedModules.get(cubinFile); try { if (module == null) { module = cuModuleLoad(cubinFile); } long kernelFunction = cuModuleGetFunction(module, kernelName); - return new Kernel(this, kernelName, module, kernelFunction, signature); + return new Kernel(grCUDAExecutionContext, kernelName, module, kernelFunction, signature); } catch (Exception e) { if ((module != null) && (module.getRefCount() == 1)) { cuModuleUnload(module); @@ -512,14 +505,14 @@ public Kernel loadKernel(String cubinFile, String kernelName, String signature) } @TruffleBoundary - public Kernel buildKernel(String code, String kernelName, String signature) { + public Kernel buildKernel(GrCUDAExecutionContext grCUDAExecutionContext, String code, String kernelName, String signature) { String moduleName = "truffle" + context.getNextModuleId(); PTXKernel ptx = nvrtc.compileKernel(code, kernelName, moduleName, "--std=c++14"); CUModule module = null; try { module = cuModuleLoadData(ptx.getPtxSource(), moduleName); long kernelFunction = cuModuleGetFunction(module, ptx.getLoweredKernelName()); - return new Kernel(this, ptx.getLoweredKernelName(), module, kernelFunction, + return new Kernel(grCUDAExecutionContext, ptx.getLoweredKernelName(), module, kernelFunction, signature, ptx.getPtxSource()); } catch (Exception e) { if (module != null) { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index e3bc5a92..39bf8827 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -1,6 +1,8 @@ package com.nvidia.grcuda.gpu; +import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.array.AbstractArray; +import com.oracle.truffle.api.TruffleLanguage; import java.util.HashSet; import java.util.Set; @@ -11,6 +13,11 @@ */ public class GrCUDAExecutionContext { + /** + * Reference to the inner {@link CUDARuntime} used to execute kernels and other {@link GrCUDAComputationalElement} + */ + private final CUDARuntime cudaRuntime; + /** * Set that contains all the arrays allocated so far. */ @@ -29,27 +36,41 @@ public class GrCUDAExecutionContext { final private ExecutionDAG dag = new ExecutionDAG(); - public GrCUDAExecutionContext() { + public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { + this.cudaRuntime = new CUDARuntime(context, env); + } + public GrCUDAExecutionContext(CUDARuntime cudaRuntime) { + this.cudaRuntime = cudaRuntime; } public void registerArray(AbstractArray array) { arraySet.add(array); -// System.out.println("-- added array to context: " + System.identityHashCode(array) + "; " + array.toString()); } public void registerKernel(Kernel kernel) { kernelSet.add(kernel); -// System.out.println("-- added kernel to context: " + System.identityHashCode(kernel) + "; " + kernel.toString()); } public void registerExecution(GrCUDAComputationalElement kernel) { dag.append(kernel); -// System.out.println("\n///////////////////////////////\n"); -// System.out.println(dag); } public ExecutionDAG getDag() { return dag; } + + public CUDARuntime getCudaRuntime() { + return cudaRuntime; + } + + // Functions used to interface directly with the CUDA runtime; + + public Kernel loadKernel(String cubinFile, String kernelName, String signature) { + return cudaRuntime.loadKernel(this, cubinFile, kernelName, signature); + } + + public Kernel buildKernel(String code, String kernelName, String signature) { + return cudaRuntime.buildKernel(this, code, kernelName, signature); + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index d6956e0d..24b4cf7c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -55,7 +55,7 @@ @ExportLibrary(InteropLibrary.class) public class Kernel implements TruffleObject { - private final CUDARuntime cudaRuntime; + private final GrCUDAExecutionContext grCUDAExecutionContext; private final String kernelName; private final CUDARuntime.CUModule kernelModule; private final long kernelFunction; @@ -65,20 +65,20 @@ public class Kernel implements TruffleObject { private final List argsAreArrays; private String ptxCode; - public Kernel(CUDARuntime cudaRuntime, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, String kernelSignature) { - this.cudaRuntime = cudaRuntime; + public Kernel(GrCUDAExecutionContext grCUDAExecutionContext, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, String kernelSignature) { + this.grCUDAExecutionContext = grCUDAExecutionContext; this.kernelName = kernelName; this.kernelModule = kernelModule; this.kernelFunction = kernelFunction; this.kernelSignature = kernelSignature; this.argumentTypes = parseSignature(kernelSignature); this.argsAreArrays = computeIfArgsAreArrays(this.argumentTypes); - this.cudaRuntime.getExecutionContext().registerKernel(this); + this.grCUDAExecutionContext.registerKernel(this); } - public Kernel(CUDARuntime cudaRuntime, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, + public Kernel(GrCUDAExecutionContext grCUDAExecutionContext, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, String kernelSignature, String ptx) { - this(cudaRuntime, kernelName, kernelModule, kernelFunction, kernelSignature); + this(grCUDAExecutionContext, kernelName, kernelModule, kernelFunction, kernelSignature); this.ptxCode = ptx; } @@ -86,8 +86,8 @@ public void incrementLaunchCount() { launchCount++; } - public CUDARuntime getCudaRuntime() { - return cudaRuntime; + public GrCUDAExecutionContext getGrCUDAExecutionContext() { + return grCUDAExecutionContext; } public ArgumentType[] getArgumentTypes() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java index 579bf619..e2bae506 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -18,7 +18,7 @@ public class KernelExecution extends GrCUDAComputationalElement { public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) { super( - configuredKernel.getKernel().getCudaRuntime().getExecutionContext(), + configuredKernel.getKernel().getGrCUDAExecutionContext(), new KernelExecutionInitializer(configuredKernel.getKernel(), args) ); this.configuredKernel = configuredKernel; @@ -28,7 +28,7 @@ public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) } public void execute() { - kernel.getCudaRuntime().cuLaunchKernel(kernel, config, args); + kernel.getGrCUDAExecutionContext().getCudaRuntime().cuLaunchKernel(kernel, config, args); } public ConfiguredKernel getConfiguredKernel() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java index 6950f85d..e1d5f0f0 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java @@ -38,6 +38,7 @@ import com.nvidia.grcuda.GrCUDALanguage; import com.nvidia.grcuda.array.MultiDimDeviceArray; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.CachedContext; import com.oracle.truffle.api.dsl.Specialization; @@ -58,7 +59,7 @@ public abstract class ArrayNode extends ExpressionNode { @Specialization AbstractArray doDefault(VirtualFrame frame, @CachedContext(GrCUDALanguage.class) GrCUDAContext context) { - final CUDARuntime runtime = context.getCUDARuntime(); + final GrCUDAExecutionContext grCUDAExecutionContext = context.getGrCUDAExecutionContext(); long[] elementsPerDim = new long[sizeNodes.length]; int dim = 0; for (ExpressionNode sizeNode : sizeNodes) { @@ -71,10 +72,10 @@ AbstractArray doDefault(VirtualFrame frame, dim += 1; } if (sizeNodes.length == 1) { - return new DeviceArray(runtime, elementsPerDim[0], elementType); + return new DeviceArray(grCUDAExecutionContext, elementsPerDim[0], elementType); } else { final boolean columnMajorOrder = false; - return new MultiDimDeviceArray(runtime, elementType, elementsPerDim, columnMajorOrder); + return new MultiDimDeviceArray(grCUDAExecutionContext, elementType, elementsPerDim, columnMajorOrder); } } } From 837911f7c19b01276750a8889aa2ad61e508ee92 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 18 Apr 2020 15:11:50 +0200 Subject: [PATCH 015/236] separating kernel scheduling from execution, added generic execute and schedule interfaces to grcudacomputatioanlelement --- .../grcuda/test/gpu/ExecutionDAGTest.java | 28 ++++++++++--------- .../nvidia/grcuda/gpu/ConfiguredKernel.java | 3 +- .../gpu/GrCUDAComputationalElement.java | 18 +++++++++++- .../grcuda/gpu/GrCUDAExecutionContext.java | 6 ++++ .../nvidia/grcuda/gpu/KernelExecution.java | 1 + 5 files changed, 40 insertions(+), 16 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 7ff9a07d..9ecaad0e 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -14,7 +14,6 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; -import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -30,6 +29,9 @@ public static class KernelExecutionTest extends GrCUDAComputationalElement { KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { super(grCUDAExecutionContext, args); } + + @Override + public void execute() {} } /** @@ -55,7 +57,7 @@ public void executionDAGConstructorTest() { public void addVertexToDAGTest() { GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); // Create two mock kernel executions; - new KernelExecutionTest(context, Arrays.asList(1, 2, 3)); + new KernelExecutionTest(context, Arrays.asList(1, 2, 3)).schedule(); ExecutionDAG dag = context.getDag(); @@ -65,7 +67,7 @@ public void addVertexToDAGTest() { assertTrue(dag.getFrontier().get(0).isFrontier()); assertTrue(dag.getFrontier().get(0).isStart()); - new KernelExecutionTest(context, Arrays.asList(1, 2, 3)); + new KernelExecutionTest(context, Arrays.asList(1, 2, 3)).schedule(); assertEquals(2, dag.getNumVertices()); assertEquals(1, dag.getNumEdges()); @@ -88,10 +90,10 @@ public void dependencyPipelineSimpleMockTest() { // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); - new KernelExecutionTest(context, Collections.singletonList(1)); - new KernelExecutionTest(context, Collections.singletonList(2)); - new KernelExecutionTest(context, Arrays.asList(1, 2, 3)); - new KernelExecutionTest(context, Collections.singletonList(3)); + new KernelExecutionTest(context, Collections.singletonList(1)).schedule(); + new KernelExecutionTest(context, Collections.singletonList(2)).schedule(); + new KernelExecutionTest(context, Arrays.asList(1, 2, 3)).schedule(); + new KernelExecutionTest(context, Collections.singletonList(3)).schedule(); ExecutionDAG dag = context.getDag(); @@ -130,12 +132,12 @@ public void complexFrontierMockTest() { // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // \----> C(2) // The final frontier is composed by C(2), D(3), E(1), F(4); - new KernelExecutionTest(context, Arrays.asList(1, 2)); - new KernelExecutionTest(context, Collections.singletonList(1)); - new KernelExecutionTest(context, Collections.singletonList(2)); - new KernelExecutionTest(context, Arrays.asList(1, 3)); - new KernelExecutionTest(context, Arrays.asList(1, 4)); - new KernelExecutionTest(context, Collections.singletonList(4)); + new KernelExecutionTest(context, Arrays.asList(1, 2)).schedule(); + new KernelExecutionTest(context, Collections.singletonList(1)).schedule(); + new KernelExecutionTest(context, Collections.singletonList(2)).schedule(); + new KernelExecutionTest(context, Arrays.asList(1, 3)).schedule(); + new KernelExecutionTest(context, Arrays.asList(1, 4)).schedule(); + new KernelExecutionTest(context, Collections.singletonList(4)).schedule(); ExecutionDAG dag = context.getDag(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java index 8573baf8..9123fc84 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java @@ -62,8 +62,7 @@ Object execute(Object[] arguments, @CachedLibrary(limit = "3") InteropLibrary doubleAccess) throws UnsupportedTypeException, ArityException { kernel.incrementLaunchCount(); try (KernelArguments args = kernel.createKernelArguments(arguments, int32Access, int64Access, doubleAccess)) { - new KernelExecution(this, args).execute(); -// kernel.getCudaRuntime().cuLaunchKernel(kernel, config, args); + new KernelExecution(this, args).schedule(); } return this; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java index e557d8bf..9eedef46 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java @@ -36,7 +36,6 @@ public GrCUDAComputationalElement(GrCUDAExecutionContext grCUDAExecutionContext, // Initialize by making a copy of the original set; this.activeArgumentSet = new HashSet<>(this.argumentSet); this.grCUDAExecutionContext = grCUDAExecutionContext; - this.grCUDAExecutionContext.registerExecution(this); } /** @@ -86,6 +85,23 @@ public boolean hasPossibleDependencies() { return !this.activeArgumentSet.isEmpty(); } + /** + * Schedule this computation for future execution by the {@link GrCUDAExecutionContext}. + * The scheduling request is separate from the {@link GrCUDAComputationalElement} instantiation + * as we need to ensure that the the computational element subclass has been completely instantiated; + */ + public void schedule() { + this.grCUDAExecutionContext.registerExecution(this); + } + + /** + * Generic interface to perform the execution of this {@link GrCUDAComputationalElement}. + * The actual execution implementation must be added by concrete computational elements. + * The execution request will be done by the {@link GrCUDAExecutionContext}, after this computation has been scheduled + * using {@link GrCUDAComputationalElement.schedule()} + */ + public abstract void execute(); + /** * The default initializer will simply store all the arguments, * and consider each of them in the dependency computations; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index 39bf8827..a74ef8ac 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -52,8 +52,14 @@ public void registerKernel(Kernel kernel) { kernelSet.add(kernel); } + /** + * Register this computation for future execution by the {@link GrCUDAExecutionContext}, + * and add it to the current computational DAG. + * The actual execution might be deferred depending on the inferred data dependencies; + */ public void registerExecution(GrCUDAComputationalElement kernel) { dag.append(kernel); + kernel.execute(); } public ExecutionDAG getDag() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java index e2bae506..8959fa69 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -27,6 +27,7 @@ public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) this.args = args; } + @Override public void execute() { kernel.getGrCUDAExecutionContext().getCudaRuntime().cuLaunchKernel(kernel, config, args); } From 4bbf114a3a325f0f208d044d219355427fb78088 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 19 Apr 2020 13:32:28 +0200 Subject: [PATCH 016/236] added initial cuda stream support --- .../nvidia/grcuda/test/CreateStreamTest.java | 121 ++++++++++++++++++ .../nvidia/grcuda/test/MultiDimArrayTest.java | 1 + .../grcuda/test/gpu/ExecutionDAGTest.java | 8 +- .../src/com/nvidia/grcuda/GPUPointer.java | 21 ++- .../src/com/nvidia/grcuda/GrCUDAContext.java | 27 +++- .../src/com/nvidia/grcuda/GrCUDALanguage.java | 12 +- .../nvidia/grcuda/GrCUDAThreadManager.java | 74 +++++++++++ .../functions/CreateStreamFunction.java | 22 ++++ .../com/nvidia/grcuda/gpu/CUDARuntime.java | 41 +++++- .../grcuda/gpu/GrCUDAExecutionContext.java | 25 +++- .../src/com/nvidia/grcuda/gpu/Kernel.java | 34 +++-- .../com/nvidia/grcuda/gpu/KernelConfig.java | 22 ++-- .../nvidia/grcuda/gpu/KernelExecution.java | 1 + .../nvidia/grcuda/gpu/stream/CUDAStream.java | 46 +++++++ .../grcuda/gpu/stream/DefaultStream.java | 15 +++ .../resources/python/examples/pipeline_1.py | 3 + 16 files changed, 442 insertions(+), 31 deletions(-) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/CreateStreamFunction.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java new file mode 100644 index 00000000..69438fe6 --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java @@ -0,0 +1,121 @@ +package com.nvidia.grcuda.test; + +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Value; +import org.junit.Test; + +import java.util.HashSet; +import java.util.Set; +import java.util.stream.IntStream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class CreateStreamTest { + + /** + * Simply check if we can create a CUDA stream without blowing things up! + */ + @Test + public void createStreamSimpleTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "createstream"); + Value stream = createStream.execute(); + assertNotNull(stream); + assertTrue(stream.isNativePointer()); + } + } + + /** + * Check that we can create many different streams; + */ + @Test + public void createManyStreamsTest() { + int numStreams = 8; + Set streamSet = new HashSet<>(); + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + IntStream.range(0, numStreams).forEach(i -> { + Value createStream = context.eval("grcuda", "createstream"); + Value stream = createStream.execute(); + streamSet.add(stream.asNativePointer()); + assertNotNull(stream); + assertTrue(stream.isNativePointer()); + }); + } + assertEquals(numStreams, streamSet.size()); + } + + private static final int NUM_THREADS_PER_BLOCK = 32; + + private static final String SQUARE_KERNEL = + "extern \"C\" __global__ void square(float* x, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " x[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + + /** + * Execute a simple kernel on a non-default stream; + */ + @Test + public void useStreamTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "createstream"); + Value stream = createStream.execute(); + assertNotNull(stream); + assertTrue(stream.isNativePointer()); + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + // Set the custom stream; + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream); + configuredSquareKernel.execute(x, numElements); + for (int i = 0; i < numElements; i++) { + assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); + } + } + } + + /** + * Execute two simple kernel on non-default streams; + */ + @Test + public void useTwoStreamsTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "createstream"); + Value stream1 = createStream.execute(); + Value stream2 = createStream.execute(); + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + y.setArrayElement(i, 4.0); + } + // Set the custom streams; + Value configuredSquareKernel1 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream1); + Value configuredSquareKernel2 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream2); + + configuredSquareKernel1.execute(x, numElements); + configuredSquareKernel2.execute(y, numElements); + for (int i = 0; i < numElements; i++) { + assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); + assertEquals(16.0, y.getArrayElement(i).asFloat(), 0.01); + } + } + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/MultiDimArrayTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/MultiDimArrayTest.java index 690f7579..09d2d515 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/MultiDimArrayTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/MultiDimArrayTest.java @@ -291,6 +291,7 @@ public void test2DimArrayAsKernelArgument() { matrix.getArrayElement(i).setArrayElement(j, i * numDim2 + j); } } + final Value buildKernel = context.eval("grcuda", "buildkernel"); final Value kernel = buildKernel.execute(INC2D_KERNEL_SOURCE, "inc2d", INC2D_KERNEL_SIGNATURE); final int blocks = 80; diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 9ecaad0e..8fa4c59b 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,11 +1,8 @@ package com.nvidia.grcuda.test.gpu; -import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; -import com.nvidia.grcuda.gpu.InitializeArgumentSet; -import com.oracle.truffle.api.TruffleLanguage; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; import org.junit.Test; @@ -39,7 +36,7 @@ public void execute() {} */ public static class GrCUDAExecutionContextTest extends GrCUDAExecutionContext { GrCUDAExecutionContextTest() { - super(null); + super(null, null); } } @@ -244,6 +241,9 @@ public void dependencyPipelineSimpleTest() { configuredDiffKernel.execute(x, y, z, numElements); configuredReduceKernel.execute(z, res, numElements); + // FIXME: temporary sync point until we add array accesses as DAG nodes! + Value sync = context.eval("grcuda", "cudaDeviceSynchronize"); + sync.execute(); // Verify the output; float resScalar = res.getArrayElement(0).asFloat(); assertEquals(-4.93, resScalar, 0.01); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GPUPointer.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GPUPointer.java index ae3db5e5..a86834ba 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GPUPointer.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GPUPointer.java @@ -33,8 +33,10 @@ import com.oracle.truffle.api.library.ExportLibrary; import com.oracle.truffle.api.library.ExportMessage; +import java.util.Objects; + @ExportLibrary(InteropLibrary.class) -public final class GPUPointer implements TruffleObject { +public class GPUPointer implements TruffleObject { private final long rawPointer; @@ -53,12 +55,25 @@ public String toString() { @ExportMessage @SuppressWarnings("static-method") - boolean isPointer() { + public boolean isPointer() { return true; } @ExportMessage - long asPointer() { + public long asPointer() { return rawPointer; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + GPUPointer that = (GPUPointer) o; + return rawPointer == that.rawPointer; + } + + @Override + public int hashCode() { + return Objects.hash(rawPointer); + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index defd1749..80a36f4e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -32,6 +32,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; +import com.nvidia.grcuda.functions.CreateStreamFunction; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import org.graalvm.options.OptionKey; @@ -65,12 +66,18 @@ public final class GrCUDAContext { private AtomicInteger moduleId = new AtomicInteger(0); private volatile boolean cudaInitialized = false; + /** + * Store a reference to the thread manager used to schedule GPU computations; + */ + private final GrCUDAThreadManager threadManager; + // this is used to look up pre-existing call targets for "map" operations, see MapArrayNode private final ConcurrentHashMap, CallTarget> uncachedMapCallTargets = new ConcurrentHashMap<>(); public GrCUDAContext(Env env) { this.env = env; - this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env); + this.threadManager = new GrCUDAThreadManager(this); + this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env, this.threadManager); Namespace namespace = new Namespace(ROOT_NAMESPACE); namespace.addNamespace(namespace); @@ -82,6 +89,7 @@ public GrCUDAContext(Env env) { namespace.addFunction(new BuildKernelFunction(this.grCUDAExecutionContext)); namespace.addFunction(new GetDevicesFunction(this.grCUDAExecutionContext.getCudaRuntime())); namespace.addFunction(new GetDeviceFunction(this.grCUDAExecutionContext.getCudaRuntime())); + namespace.addFunction(new CreateStreamFunction(this.grCUDAExecutionContext.getCudaRuntime())); this.grCUDAExecutionContext.getCudaRuntime().registerCUDAFunctions(namespace); if (this.getOption(GrCUDAOptions.CuMLEnabled)) { Namespace ml = new Namespace(CUMLRegistry.NAMESPACE); @@ -94,6 +102,7 @@ public GrCUDAContext(Env env) { new CUBLASRegistry(this).registerCUBLASFunctions(blas); } this.rootNamespace = namespace; + } public Env getEnv() { @@ -138,8 +147,24 @@ public ConcurrentHashMap, CallTarget> getMapCallTargets() { return uncachedMapCallTargets; } + /** + * Compute the maximum number of concurrent threads that can be spawned by GrCUDA. + * This value is usually smaller or equal than the number of logical CPU threads available on the machine. + * @return the maximum number of concurrent threads that can be spawned by GrCUDA + */ + public int getNumberOfThreads() { + return Runtime.getRuntime().availableProcessors(); + } + @TruffleBoundary public T getOption(OptionKey key) { return env.getOptions().get(key); } + + /** + * Cleanup the GrCUDA context at the end of the execution; + */ + public void cleanup() { + this.threadManager.finalizeManager(); + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java index 821e0000..36f6ada1 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java @@ -43,7 +43,7 @@ /** * grCUDA Truffle language that exposes the GPU device and CUDA runtime to polyglot Graal languages. */ -@TruffleLanguage.Registration(id = GrCUDALanguage.ID, name = "grcuda", version = "0.1", internal = false) +@TruffleLanguage.Registration(id = GrCUDALanguage.ID, name = "grcuda", version = "0.1", internal = false, contextPolicy = TruffleLanguage.ContextPolicy.SHARED) public final class GrCUDALanguage extends TruffleLanguage { public static final String ID = "grcuda"; @@ -90,4 +90,14 @@ protected OptionDescriptors getOptionDescriptors() { return new GrCUDAOptionsOptionDescriptors(); } + @Override + protected boolean isThreadAccessAllowed(Thread thread, boolean singleThreaded) { + return true; + } + + @Override + protected void finalizeContext(GrCUDAContext context) { + context.cleanup(); + } + } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java new file mode 100644 index 00000000..3b99f120 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java @@ -0,0 +1,74 @@ +package com.nvidia.grcuda; + +import com.oracle.truffle.api.CompilerDirectives; + +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +public class GrCUDAThreadManager { + + private final ExecutorService threadPool; + private final GrCUDAContext context; + private final List toJoin; + + public GrCUDAThreadManager(GrCUDAContext context) { + this.toJoin = new LinkedList<>(); + this.context = context; + this.threadPool = Executors.newFixedThreadPool(context.getNumberOfThreads(), this::createJavaThread); + } + + private Thread createJavaThread(Runnable runnable) { + Thread thread = context.getEnv().createThread(runnable); + toJoin.add(thread); + return thread; + } + + public void submitRunnable(Runnable task) { + threadPool.submit(task); + } + + public Future submitCallable(Callable task) { + return threadPool.submit(task); + } + + public List getResults(Collection> futures) { + List results = new LinkedList<>(); + futures.forEach(f -> { + try { + results.add(f.get()); + } catch (InterruptedException | ExecutionException e) { + System.out.println("Failed to get result of future, exception: " + e); + e.printStackTrace(); + } + }); + return results; + } + + public void finalizeManager() { + if (threadPool == null) + return; + + threadPool.shutdown(); + try { + if (!threadPool.awaitTermination(60, TimeUnit.SECONDS)) { + threadPool.shutdownNow(); + } + threadPool.awaitTermination(60, TimeUnit.SECONDS); + + for (Thread t : toJoin) { + t.join(); + } + + } catch (InterruptedException ie) { + threadPool.shutdownNow(); + Thread.currentThread().interrupt(); + } + } +} \ No newline at end of file diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/CreateStreamFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/CreateStreamFunction.java new file mode 100644 index 00000000..51655480 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/CreateStreamFunction.java @@ -0,0 +1,22 @@ +package com.nvidia.grcuda.functions; + +import com.nvidia.grcuda.gpu.CUDARuntime; +import com.oracle.truffle.api.CompilerDirectives; +import com.oracle.truffle.api.interop.ArityException; +import com.oracle.truffle.api.interop.UnsupportedTypeException; + +public class CreateStreamFunction extends Function { + private final CUDARuntime cudaRuntime; + + public CreateStreamFunction(CUDARuntime cudaRuntime) { + super("createstream"); + this.cudaRuntime = cudaRuntime; + } + + @Override + @CompilerDirectives.TruffleBoundary + public Object call(Object[] arguments) throws UnsupportedTypeException, ArityException { + checkArgumentLength(arguments, 0); + return cudaRuntime.cudaStreamCreate(); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 41a7c358..a09ef26b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -34,6 +34,8 @@ import static com.nvidia.grcuda.functions.Function.expectPositiveLong; import java.util.HashMap; + +import com.nvidia.grcuda.gpu.stream.CUDAStream; import org.graalvm.collections.Pair; import com.nvidia.grcuda.GPUPointer; import com.nvidia.grcuda.GrCUDAContext; @@ -65,6 +67,15 @@ public final class CUDARuntime { private final GrCUDAContext context; private final NVRuntimeCompiler nvrtc; + // FIXME: move in a separate stream manager! + private int numStreams = 0; + public void incrementNumStreams() { + numStreams++; + } + public int getNumStreams() { + return numStreams; + } + /** * Map from library-path to NFI library. */ @@ -276,6 +287,18 @@ public String cudaGetErrorString(int errorCode) { } } + @TruffleBoundary + public CUDAStream cudaStreamCreate() { + try (UnsafeHelper.PointerObject streamPointer = UnsafeHelper.createPointerObject()) { + Object callable = CUDARuntimeFunction.CUDA_STREAMCREATE.getSymbol(this); + Object result = INTEROP.execute(callable, streamPointer.getAddress()); + checkCUDAReturnCode(result, "cudaStreamCreate"); + return new CUDAStream(streamPointer.getValueOfPointer(), numStreams++); + } catch (InteropException e) { + throw new GrCUDAException(e); + } + } + /** * Get function as callable from native library. * @@ -466,6 +489,20 @@ public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException callSymbol(cudaRuntime, destPointer, fromPointer, numBytesToCopy, cudaMemcpyDefault); return NoneValue.get(); } + }, + CUDA_STREAMCREATE("cudaStreamCreate", "(pointer): sint32") { + @Override + @TruffleBoundary + public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, UnsupportedTypeException, InteropException { + checkArgumentLength(args, 0); + try (UnsafeHelper.PointerObject streamPointer = UnsafeHelper.createPointerObject()) { + callSymbol(cudaRuntime, streamPointer.getAddress()); + long streamAllocatedPointer = streamPointer.getValueOfPointer(); + CUDAStream stream = new CUDAStream(streamPointer.getValueOfPointer(), cudaRuntime.getNumStreams()); + cudaRuntime.incrementNumStreams(); + return stream; + } + } }; private final String name; @@ -611,12 +648,12 @@ public void cuLaunchKernel(Kernel kernel, KernelConfig config, KernelArguments a blockSize.getY(), blockSize.getZ(), config.getDynamicSharedMemoryBytes(), - config.getStream(), + config.getStream().getRawPointer(), args.getPointer(), // pointer to kernel arguments array 0 // extra args ); checkCUReturnCode(result, "cuLaunchKernel"); - cudaDeviceSynchronize(); +// cudaDeviceSynchronize(); } catch (InteropException e) { throw new GrCUDAException(e); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index a74ef8ac..c8c3847c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -1,11 +1,13 @@ package com.nvidia.grcuda.gpu; import com.nvidia.grcuda.GrCUDAContext; +import com.nvidia.grcuda.GrCUDAThreadManager; import com.nvidia.grcuda.array.AbstractArray; import com.oracle.truffle.api.TruffleLanguage; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.Callable; /** * Class used to monitor the state of GrCUDA execution, keep track of memory allocated, @@ -18,6 +20,8 @@ public class GrCUDAExecutionContext { */ private final CUDARuntime cudaRuntime; + private GrCUDAThreadManager threadManager; + /** * Set that contains all the arrays allocated so far. */ @@ -36,12 +40,14 @@ public class GrCUDAExecutionContext { final private ExecutionDAG dag = new ExecutionDAG(); - public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { + public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, GrCUDAThreadManager threadManager) { this.cudaRuntime = new CUDARuntime(context, env); + this.threadManager = threadManager; } - public GrCUDAExecutionContext(CUDARuntime cudaRuntime) { + public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager) { this.cudaRuntime = cudaRuntime; + this.threadManager = threadManager; } public void registerArray(AbstractArray array) { @@ -59,7 +65,20 @@ public void registerKernel(Kernel kernel) { */ public void registerExecution(GrCUDAComputationalElement kernel) { dag.append(kernel); - kernel.execute(); + + if (threadManager != null) { + cudaRuntime.cudaDeviceSynchronize(); + kernel.execute(); + cudaRuntime.cudaDeviceSynchronize(); + } +// // TODO: here should go the scheduling logic, and decide if/when the thread is spawned and under which conditions; +// if (threadManager != null) { +// threadManager.submitRunnable(() -> { +// cudaRuntime.cudaDeviceSynchronize(); +// kernel.execute(); +//// cudaRuntime.cudaDeviceSynchronize(); +// }); +// } } public ExecutionDAG getDag() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index 24b4cf7c..1795c367 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -37,6 +37,8 @@ import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.GrCUDAInternalException; import com.nvidia.grcuda.array.MultiDimDeviceArray; +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.DefaultStream; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Fallback; @@ -320,6 +322,15 @@ private static Dim3 extractDim3(Object valueObj, String argumentName, InteropLib } return new Dim3(extractNumber(valueObj, argumentName, access)); } + + private static CUDAStream extractStream(Object streamObj) throws UnsupportedTypeException { + if (streamObj instanceof CUDAStream) { + return (CUDAStream) streamObj; + } else { + CompilerDirectives.transferToInterpreter(); + throw UnsupportedTypeException.create(new Object[]{streamObj}, "expected CUDAStream type, received " + streamObj.getClass()); + } + } @ExportMessage @SuppressWarnings("static-method") @@ -334,20 +345,27 @@ Object execute(Object[] arguments, @CachedLibrary(limit = "3") InteropLibrary blockSizeAccess, @CachedLibrary(limit = "3") InteropLibrary blockSizeElementAccess, @CachedLibrary(limit = "3") InteropLibrary sharedMemoryAccess) throws UnsupportedTypeException, ArityException { - int dynamicSharedMemoryBytes; - if (arguments.length == 2) { - dynamicSharedMemoryBytes = 0; - } else if (arguments.length == 3) { - // dynamic shared memory specified - dynamicSharedMemoryBytes = extractNumber(arguments[2], "dynamicSharedMemory", sharedMemoryAccess); - } else { + int dynamicSharedMemoryBytes = 0; + CUDAStream stream = new DefaultStream(); + // FIXME: ArityException allows to specify only 1 arity, and cannot be sublassed! We might want to use a custom exception here; + if (arguments.length == 3) { + if (sharedMemoryAccess.isNumber(arguments[2])) { + // dynamic shared memory specified + dynamicSharedMemoryBytes = extractNumber(arguments[2], "dynamicSharedMemory", sharedMemoryAccess); + } else { + stream = extractStream(arguments[2]); + } + } else if (arguments.length == 4) { + stream = extractStream(arguments[3]); + } + else if (arguments.length < 2 || arguments.length > 4) { CompilerDirectives.transferToInterpreter(); throw ArityException.create(2, arguments.length); } Dim3 gridSize = extractDim3(arguments[0], "gridSize", gridSizeAccess, gridSizeElementAccess); Dim3 blockSize = extractDim3(arguments[1], "blockSize", blockSizeAccess, blockSizeElementAccess); - KernelConfig config = new KernelConfig(gridSize, blockSize, dynamicSharedMemoryBytes); + KernelConfig config = new KernelConfig(gridSize, blockSize, dynamicSharedMemoryBytes, stream); return new ConfiguredKernel(this, config); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java index f4c4a069..3141bd65 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java @@ -31,29 +31,33 @@ import java.util.Arrays; import java.util.Objects; +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.DefaultStream; import com.oracle.truffle.api.CompilerAsserts; public final class KernelConfig { private final Dim3 gridSize; private final Dim3 blockSize; private final int dynamicSharedMemoryBytes; + private final CUDAStream stream; public KernelConfig(int numBlocks, int numThreadsPerBlock) { - gridSize = new Dim3(numBlocks); - blockSize = new Dim3(numThreadsPerBlock); - dynamicSharedMemoryBytes = 0; + this(new Dim3(numBlocks), new Dim3(numThreadsPerBlock)); } public KernelConfig(Dim3 gridSize, Dim3 blockSize) { - this.gridSize = gridSize; - this.blockSize = blockSize; - this.dynamicSharedMemoryBytes = 0; + this(gridSize, blockSize, 0); } public KernelConfig(Dim3 gridSize, Dim3 blockSize, int sharedMemoryBytes) { + this(gridSize, blockSize, sharedMemoryBytes, new DefaultStream()); + } + + public KernelConfig(Dim3 gridSize, Dim3 blockSize, int sharedMemoryBytes, CUDAStream stream) { this.gridSize = gridSize; this.blockSize = blockSize; this.dynamicSharedMemoryBytes = sharedMemoryBytes; + this.stream = stream; } @Override @@ -75,8 +79,8 @@ public int getDynamicSharedMemoryBytes() { } @SuppressWarnings("static-method") - public int getStream() { - return 0; // default stream + public CUDAStream getStream() { + return stream; } @Override @@ -89,7 +93,7 @@ public boolean equals(Object o) { } KernelConfig that = (KernelConfig) o; return dynamicSharedMemoryBytes == that.dynamicSharedMemoryBytes && - getStream() == that.getStream() && + getStream().equals(that.getStream()) && gridSize.equals(that.gridSize) && blockSize.equals(that.blockSize); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java index 8959fa69..06b2f0b1 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -29,6 +29,7 @@ public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) @Override public void execute() { + System.out.println("EXECUTING: " + this); kernel.getGrCUDAExecutionContext().getCudaRuntime().cuLaunchKernel(kernel, config, args); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java new file mode 100644 index 00000000..85400a4d --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java @@ -0,0 +1,46 @@ +package com.nvidia.grcuda.gpu.stream; + +import com.nvidia.grcuda.GPUPointer; +import com.oracle.truffle.api.interop.InteropLibrary; +import com.oracle.truffle.api.library.ExportLibrary; +import com.oracle.truffle.api.library.ExportMessage; + +import java.util.Objects; + +@ExportLibrary(InteropLibrary.class) +public class CUDAStream extends GPUPointer { + + private final int streamNumber; + + public CUDAStream(long rawPointer, int streamNumber) { + super(rawPointer); + this.streamNumber = streamNumber; + } + + public int getStreamNumber() { + return streamNumber; + } + + @Override + public String toString() { + return "CUDAStream(streamNumber=" + this.streamNumber + "; address=0x" + Long.toHexString(this.getRawPointer()); + } + + @ExportMessage + public Object toDisplayString(boolean allowSideEffect) { + return this.toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CUDAStream that = (CUDAStream) o; + return (streamNumber == that.streamNumber && this.getRawPointer() == that.getRawPointer()); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), streamNumber); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java new file mode 100644 index 00000000..768113be --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java @@ -0,0 +1,15 @@ +package com.nvidia.grcuda.gpu.stream; + +public class DefaultStream extends CUDAStream { + + static final int DEFAULT_STREAM_NUMBER = 0; + + public DefaultStream() { + super(0, DEFAULT_STREAM_NUMBER); + } + + @Override + public String toString() { + return "DefaultCUDAStream(streamNumber=" + DEFAULT_STREAM_NUMBER + "; address=0x" + Long.toHexString(this.getRawPointer()); + } +} diff --git a/projects/resources/python/examples/pipeline_1.py b/projects/resources/python/examples/pipeline_1.py index 061e7df8..05534e48 100644 --- a/projects/resources/python/examples/pipeline_1.py +++ b/projects/resources/python/examples/pipeline_1.py @@ -112,5 +112,8 @@ print(f"overheads, time: {end - start_tot - time_cumulative:.4f} sec") print(f"total time: {end - start_tot:.4f} sec") + sync = polyglot.eval(language="grcuda", string="cudaDeviceSynchronize") + sync() + result = res[0] print(f"result={result:.4f}") From 3c1749f736d6a16f1d0fda413556c9923d5860bc Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 19 Apr 2020 14:34:15 +0200 Subject: [PATCH 017/236] added stream destroy and synchronize, removed unnecessary streamcreate function --- .../nvidia/grcuda/test/CreateStreamTest.java | 66 +++++++++++++++++-- .../src/com/nvidia/grcuda/GrCUDAContext.java | 2 - .../functions/CreateStreamFunction.java | 22 ------- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 54 +++++++++++++++ 4 files changed, 115 insertions(+), 29 deletions(-) delete mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/CreateStreamFunction.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java index 69438fe6..9cbaa227 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java @@ -20,7 +20,7 @@ public class CreateStreamTest { @Test public void createStreamSimpleTest() { try (Context context = Context.newBuilder().allowAllAccess(true).build()) { - Value createStream = context.eval("grcuda", "createstream"); + Value createStream = context.eval("grcuda", "cudaStreamCreate"); Value stream = createStream.execute(); assertNotNull(stream); assertTrue(stream.isNativePointer()); @@ -36,7 +36,7 @@ public void createManyStreamsTest() { Set streamSet = new HashSet<>(); try (Context context = Context.newBuilder().allowAllAccess(true).build()) { IntStream.range(0, numStreams).forEach(i -> { - Value createStream = context.eval("grcuda", "createstream"); + Value createStream = context.eval("grcuda", "cudaStreamCreate"); Value stream = createStream.execute(); streamSet.add(stream.asNativePointer()); assertNotNull(stream); @@ -62,7 +62,7 @@ public void createManyStreamsTest() { @Test public void useStreamTest() { try (Context context = Context.newBuilder().allowAllAccess(true).build()) { - Value createStream = context.eval("grcuda", "createstream"); + Value createStream = context.eval("grcuda", "cudaStreamCreate"); Value stream = createStream.execute(); assertNotNull(stream); assertTrue(stream.isNativePointer()); @@ -91,7 +91,7 @@ public void useStreamTest() { @Test public void useTwoStreamsTest() { try (Context context = Context.newBuilder().allowAllAccess(true).build()) { - Value createStream = context.eval("grcuda", "createstream"); + Value createStream = context.eval("grcuda", "cudaStreamCreate"); Value stream1 = createStream.execute(); Value stream2 = createStream.execute(); @@ -109,7 +109,7 @@ public void useTwoStreamsTest() { // Set the custom streams; Value configuredSquareKernel1 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream1); Value configuredSquareKernel2 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream2); - + configuredSquareKernel1.execute(x, numElements); configuredSquareKernel2.execute(y, numElements); for (int i = 0; i < numElements; i++) { @@ -118,4 +118,60 @@ public void useTwoStreamsTest() { } } } + + /** + * Execute two simple kernel on non-default streams, and synchronize each stream independently; + */ + @Test + public void syncStreamsTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value stream1 = createStream.execute(); + Value stream2 = createStream.execute(); + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + y.setArrayElement(i, 4.0); + } + // Set the custom streams; + Value configuredSquareKernel1 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream1); + Value configuredSquareKernel2 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream2); + + configuredSquareKernel1.execute(x, numElements); + configuredSquareKernel2.execute(y, numElements); + + Value syncStream = context.eval("grcuda", "cudaStreamSynchronize"); + syncStream.execute(stream1); + syncStream.execute(stream2); + + for (int i = 0; i < numElements; i++) { + assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); + assertEquals(16.0, y.getArrayElement(i).asFloat(), 0.01); + } + } + } + + + @Test + public void streamDestroyTest() { + int numStreams = 8; + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Set streamSet = new HashSet<>(); + IntStream.range(0, numStreams).forEach(i -> { + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value stream = createStream.execute(); + streamSet.add(stream); + assertNotNull(stream); + }); + Value destroyStream = context.eval("grcuda", "cudaStreamDestroy"); + streamSet.forEach(destroyStream::execute); + } + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index 80a36f4e..22c30549 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -32,7 +32,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; -import com.nvidia.grcuda.functions.CreateStreamFunction; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import org.graalvm.options.OptionKey; @@ -89,7 +88,6 @@ public GrCUDAContext(Env env) { namespace.addFunction(new BuildKernelFunction(this.grCUDAExecutionContext)); namespace.addFunction(new GetDevicesFunction(this.grCUDAExecutionContext.getCudaRuntime())); namespace.addFunction(new GetDeviceFunction(this.grCUDAExecutionContext.getCudaRuntime())); - namespace.addFunction(new CreateStreamFunction(this.grCUDAExecutionContext.getCudaRuntime())); this.grCUDAExecutionContext.getCudaRuntime().registerCUDAFunctions(namespace); if (this.getOption(GrCUDAOptions.CuMLEnabled)) { Namespace ml = new Namespace(CUMLRegistry.NAMESPACE); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/CreateStreamFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/CreateStreamFunction.java deleted file mode 100644 index 51655480..00000000 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/CreateStreamFunction.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.nvidia.grcuda.functions; - -import com.nvidia.grcuda.gpu.CUDARuntime; -import com.oracle.truffle.api.CompilerDirectives; -import com.oracle.truffle.api.interop.ArityException; -import com.oracle.truffle.api.interop.UnsupportedTypeException; - -public class CreateStreamFunction extends Function { - private final CUDARuntime cudaRuntime; - - public CreateStreamFunction(CUDARuntime cudaRuntime) { - super("createstream"); - this.cudaRuntime = cudaRuntime; - } - - @Override - @CompilerDirectives.TruffleBoundary - public Object call(Object[] arguments) throws UnsupportedTypeException, ArityException { - checkArgumentLength(arguments, 0); - return cudaRuntime.cudaStreamCreate(); - } -} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index a09ef26b..56b3c097 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -299,6 +299,28 @@ public CUDAStream cudaStreamCreate() { } } + @TruffleBoundary + public void cudaStreamSynchronize(CUDAStream stream) { + try { + Object callable = CUDARuntimeFunction.CUDA_STREAMSYNCHRONIZE.getSymbol(this); + Object result = INTEROP.execute(callable, stream.getRawPointer()); + checkCUDAReturnCode(result, "cudaStreamSynchronize"); + } catch (InteropException e) { + throw new GrCUDAException(e); + } + } + + @TruffleBoundary + public void cudaStreamDestroy(CUDAStream stream) { + try { + Object callable = CUDARuntimeFunction.CUDA_STREAMDESTROY.getSymbol(this); + Object result = INTEROP.execute(callable, stream.getRawPointer()); + checkCUDAReturnCode(result, "cudaStreamDestroy"); + } catch (InteropException e) { + throw new GrCUDAException(e); + } + } + /** * Get function as callable from native library. * @@ -503,6 +525,38 @@ public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException return stream; } } + }, + CUDA_STREAMSYNCHRONIZE("cudaStreamSynchronize", "(pointer): sint32") { + @Override + @TruffleBoundary + public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, UnsupportedTypeException, InteropException { + checkArgumentLength(args, 1); + Object pointerObj = args[0]; + long addr; + if (pointerObj instanceof CUDAStream) { + addr = ((CUDAStream) pointerObj).getRawPointer(); + } else { + throw new GrCUDAException("expected CUDAStream object"); + } + callSymbol(cudaRuntime, addr); + return NoneValue.get(); + } + }, + CUDA_STREAMDESTROY("cudaStreamDestroy", "(pointer): sint32") { + @Override + @TruffleBoundary + public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, UnsupportedTypeException, InteropException { + checkArgumentLength(args, 1); + Object pointerObj = args[0]; + long addr; + if (pointerObj instanceof CUDAStream) { + addr = ((CUDAStream) pointerObj).getRawPointer(); + } else { + throw new GrCUDAException("expected CUDAStream object"); + } + callSymbol(cudaRuntime, addr); + return NoneValue.get(); + } }; private final String name; From bee17ee02177c3835c2259b8e8ea9331ae813458 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 19 Apr 2020 16:21:25 +0200 Subject: [PATCH 018/236] adding stream manager. removed some deprecation warnings --- .../grcuda/test/gpu/ExecutionDAGTest.java | 3 +- .../src/com/nvidia/grcuda/GrCUDAContext.java | 10 +--- .../nvidia/grcuda/functions/BindFunction.java | 2 +- .../functions/MapDeviceArrayFunction.java | 2 +- .../grcuda/gpu/GrCUDAExecutionContext.java | 26 +++++++++-- .../nvidia/grcuda/gpu/NVRuntimeCompiler.java | 2 +- .../gpu/stream/GrCUDAStreamManager.java | 46 +++++++++++++++++++ 7 files changed, 74 insertions(+), 17 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 8fa4c59b..24a10318 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,5 +1,6 @@ package com.nvidia.grcuda.test.gpu; +import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; @@ -36,7 +37,7 @@ public void execute() {} */ public static class GrCUDAExecutionContextTest extends GrCUDAExecutionContext { GrCUDAExecutionContextTest() { - super(null, null); + super((CUDARuntime) null, null); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index 22c30549..8b6e6b2f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -65,18 +65,12 @@ public final class GrCUDAContext { private AtomicInteger moduleId = new AtomicInteger(0); private volatile boolean cudaInitialized = false; - /** - * Store a reference to the thread manager used to schedule GPU computations; - */ - private final GrCUDAThreadManager threadManager; - // this is used to look up pre-existing call targets for "map" operations, see MapArrayNode private final ConcurrentHashMap, CallTarget> uncachedMapCallTargets = new ConcurrentHashMap<>(); public GrCUDAContext(Env env) { this.env = env; - this.threadManager = new GrCUDAThreadManager(this); - this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env, this.threadManager); + this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env); Namespace namespace = new Namespace(ROOT_NAMESPACE); namespace.addNamespace(namespace); @@ -163,6 +157,6 @@ public T getOption(OptionKey key) { * Cleanup the GrCUDA context at the end of the execution; */ public void cleanup() { - this.threadManager.finalizeManager(); + this.grCUDAExecutionContext.cleanup(); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindFunction.java index 2af61ed9..e53b98e5 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindFunction.java @@ -51,7 +51,7 @@ public Object call(Object[] arguments) throws UnsupportedTypeException, ArityExc String symbolName = expectString(arguments[1], "argument 2 of bind must be string (symbol name)"); String signature = expectString(arguments[2], "argument 3 of bind must be string (signature)"); try { - return GrCUDALanguage.getCurrentLanguage().getContextReference().get().getCUDARuntime().getSymbol(libraryFile, symbolName, signature); + return GrCUDALanguage.getCurrentContext().getCUDARuntime().getSymbol(libraryFile, symbolName, signature); } catch (UnknownIdentifierException e) { CompilerDirectives.transferToInterpreter(); throw new GrCUDAException(symbolName + " not found in " + libraryFile); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java index 9975efbe..33a023e3 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java @@ -151,7 +151,7 @@ public Object execute(VirtualFrame frame) { frame.setLong(INDEX_SLOT, 0); frame.setObject(SOURCE_SLOT, frame.getArguments()[1]); frame.setObject(RESULT_SLOT, frame.getArguments()[2]); - loop.executeLoop(frame); + loop.execute(frame); return NoneValue.get(); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index c8c3847c..37fe8eee 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -3,6 +3,7 @@ import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAThreadManager; import com.nvidia.grcuda.array.AbstractArray; +import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import com.oracle.truffle.api.TruffleLanguage; import java.util.HashSet; @@ -19,8 +20,15 @@ public class GrCUDAExecutionContext { * Reference to the inner {@link CUDARuntime} used to execute kernels and other {@link GrCUDAComputationalElement} */ private final CUDARuntime cudaRuntime; - - private GrCUDAThreadManager threadManager; + /** + * Reference to the {@link com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager} that takes care of + * scheduling computations on different streams; + */ + private final GrCUDAStreamManager streamManager; + /** + * Store a reference to the thread manager used to schedule GPU computations; + */ + private final GrCUDAThreadManager threadManager; /** * Set that contains all the arrays allocated so far. @@ -40,14 +48,14 @@ public class GrCUDAExecutionContext { final private ExecutionDAG dag = new ExecutionDAG(); - public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, GrCUDAThreadManager threadManager) { - this.cudaRuntime = new CUDARuntime(context, env); - this.threadManager = threadManager; + public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { + this(new CUDARuntime(context, env), new GrCUDAThreadManager(context)); } public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager) { this.cudaRuntime = cudaRuntime; this.threadManager = threadManager; + this.streamManager = new GrCUDAStreamManager(this.cudaRuntime); } public void registerArray(AbstractArray array) { @@ -98,4 +106,12 @@ public Kernel loadKernel(String cubinFile, String kernelName, String signature) public Kernel buildKernel(String code, String kernelName, String signature) { return cudaRuntime.buildKernel(this, code, kernelName, signature); } + + /** + * Delete internal structures that require manual cleanup operations; + */ + public void cleanup() { + threadManager.finalizeManager(); + streamManager.cleanup(); + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/NVRuntimeCompiler.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/NVRuntimeCompiler.java index 4057b814..19318523 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/NVRuntimeCompiler.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/NVRuntimeCompiler.java @@ -61,7 +61,7 @@ public PTXKernel compileKernel(String code, String kernelName, String moduleName NVRTCResult compileResult = nvrtcCompileProgram(program, compileOpts); if (compileResult != NVRTCResult.NVRTC_SUCCESS) { String compileLog = getProgramLog(program); - PrintStream err = new PrintStream(GrCUDALanguage.getCurrentLanguage().getContextReference().get().getEnv().err()); + PrintStream err = new PrintStream(GrCUDALanguage.getCurrentContext().getEnv().err()); err.println("compile result: " + compileResult); err.println("program log: " + compileLog); throw new NVRTCException(compileResult.errorCode, compileLog); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java new file mode 100644 index 00000000..f8d63446 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -0,0 +1,46 @@ +package com.nvidia.grcuda.gpu.stream; + +import com.nvidia.grcuda.GrCUDAThreadManager; +import com.nvidia.grcuda.gpu.CUDARuntime; + +import java.util.ArrayList; +import java.util.List; + +public class GrCUDAStreamManager { + + /** + * List of {@link CUDAStream} that have been currently allocated; + */ + List streams = new ArrayList<>(); + /** + * Reference to the CUDA runtime that manages the streams; + */ + CUDARuntime runtime; + + public GrCUDAStreamManager(CUDARuntime runtime) { + this.runtime = runtime; + } + + /** + * Create a new {@link CUDAStream} and add it to this manager, then return it; + */ + public CUDAStream createStream() { + CUDAStream newStream = runtime.cudaStreamCreate(); + streams.add(newStream); + return newStream; + } + + /** + * Obtain the number of streams managed by this manager; + */ + public int getNumberOfStreams() { + return streams.size(); + } + + /** + * Cleanup and deallocate the streams managed by this manager; + */ + public void cleanup() { + streams.forEach(runtime::cudaStreamDestroy); + } +} From 30fd61b5438c13902871fae33e202a7a3f8035c4 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 20 Apr 2020 13:02:26 +0200 Subject: [PATCH 019/236] added stream selection. modified computational element to hold stream and isExecuted; using builder for kernel config --- .../grcuda/test/gpu/ExecutionDAGTest.java | 15 ++++++- .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 35 +++++++++------- .../gpu/GrCUDAComputationalElement.java | 40 ++++++++++++++++++- .../grcuda/gpu/GrCUDAExecutionContext.java | 17 +++++--- .../src/com/nvidia/grcuda/gpu/Kernel.java | 30 +++++++------- .../com/nvidia/grcuda/gpu/KernelConfig.java | 28 ++++++------- .../grcuda/gpu/KernelConfigBuilder.java | 37 +++++++++++++++++ .../nvidia/grcuda/gpu/KernelExecution.java | 27 +++++++++++++ .../nvidia/grcuda/gpu/stream/CUDAStream.java | 2 +- .../grcuda/gpu/stream/DefaultStream.java | 2 +- .../gpu/stream/GrCUDAStreamManager.java | 18 ++++++++- 11 files changed, 197 insertions(+), 54 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfigBuilder.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 24a10318..009af27a 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,9 +1,12 @@ package com.nvidia.grcuda.test.gpu; +import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; import org.junit.Test; @@ -37,7 +40,17 @@ public void execute() {} */ public static class GrCUDAExecutionContextTest extends GrCUDAExecutionContext { GrCUDAExecutionContextTest() { - super((CUDARuntime) null, null); + super((CUDARuntime) null, null, new GrCUDAStreamManagerTest(null)); + } + } + + public static class GrCUDAStreamManagerTest extends GrCUDAStreamManager { + int streamNumber = 0; + GrCUDAStreamManagerTest(CUDARuntime runtime) { super(runtime); } + + @Override + public CUDAStream createStream() { + return new CUDAStream(0, streamNumber++); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index 4a8d8a52..d490b497 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -23,9 +23,10 @@ public class ExecutionDAG implements TruffleObject { /** * Add a new computation to the graph, and compute its dependencies. - * @param kernel a kernel computation, containing kernel configuration and input arguments. + * @param kernel a kernel computation, containing kernel configuration and input arguments + * @return the new vertex that has been appended to the DAG */ - public void append(GrCUDAComputationalElement kernel) { + public DAGVertex append(GrCUDAComputationalElement kernel) { // Add it to the list of vertices; DAGVertex newVertex = new DAGVertex(kernel); @@ -33,9 +34,6 @@ public void append(GrCUDAComputationalElement kernel) { // Compute dependencies with other vertices in the DAG frontier, and create edges; ////////////////////////////// - // TODO: the frontier is not just composed of vertices without children!! - // I need to consider for each kernel the arguments that haven't been "covered" by a new vertex - // For each vertex in the frontier, compute dependencies of the vertex; for (DAGVertex frontierVertex : frontier) { List dependencies = computeDependencies(frontierVertex, newVertex); @@ -50,10 +48,11 @@ public void append(GrCUDAComputationalElement kernel) { if (newVertex.isFrontier()) { frontier.add(newVertex); } + return newVertex; } private List computeDependencies(DAGVertex startVertex, DAGVertex endVertex) { - return startVertex.getKernel().computeDependencies(endVertex.getKernel()); + return startVertex.getComputation().computeDependencies(endVertex.getComputation()); } public List getVertices() { @@ -86,11 +85,11 @@ public String toString() { } /** - * Simple vertex class used to encapsulate {@link KernelExecution}. + * Simple vertex class used to encapsulate {@link GrCUDAComputationalElement}. */ public class DAGVertex { - private final GrCUDAComputationalElement kernel; + private final GrCUDAComputationalElement computation; private final int id; /** @@ -106,14 +105,14 @@ public class DAGVertex { */ private final List children = new ArrayList<>(); - DAGVertex(GrCUDAComputationalElement kernel) { - this.kernel = kernel; + DAGVertex(GrCUDAComputationalElement computation) { + this.computation = computation; this.id = getNumVertices(); vertices.add(this); } - GrCUDAComputationalElement getKernel() { - return kernel; + public GrCUDAComputationalElement getComputation() { + return computation; } int getId() { @@ -131,7 +130,7 @@ public boolean isStart() { * @return if this vertex is part of the DAG frontier */ public boolean isFrontier() { - return kernel.hasPossibleDependencies(); + return computation.hasPossibleDependencies() && !computation.isComputationFinished(); } public List getParents() { @@ -146,6 +145,14 @@ public List getChildren() { public List getChildVertices() { return children.stream().map(DAGEdge::getEnd).collect(Collectors.toList()); } + public List getParentComputations() { + return parents.stream().map(e -> e.getStart().getComputation()).collect(Collectors.toList()); + } + + public List getChildComputations() { + return children.stream().map(e -> e.getEnd().getComputation()).collect(Collectors.toList()); + } + public void setStart(boolean start) { isStart = start; } @@ -162,7 +169,7 @@ public void addChild(DAGEdge edge) { @Override public String toString() { return "V(" + - ", id=" + id + + "id=" + id + ", isStart=" + isStart + ", isFrontier=" + this.isFrontier() + ", parents=" + parents + diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java index 9eedef46..4d2c003c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java @@ -1,5 +1,8 @@ package com.nvidia.grcuda.gpu; +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.DefaultStream; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -25,6 +28,18 @@ public abstract class GrCUDAComputationalElement { * Reference to the execution context where this computation is executed; */ protected final GrCUDAExecutionContext grCUDAExecutionContext; + /** + * Reference to the stream where this computation will be executed, + * if possible (i.e. if the computation can be executed on a custom stream). + * Subclasses can keep an internal reference to the stream, e.g. if it can be manually modified by the user, + * but it is required to keep that value consistent to this one if it is modified; + */ + private CUDAStream stream = new DefaultStream(); + /** + * Keep track of whether this computation has already been executed, and represents a "dead" vertex in the DAG. + * Computations that are already executed will not be considered when computing dependencies; + */ + private boolean computationFinished = false; /** * Constructor that takes an argument set initializer to build the set of arguments used in the dependency computation @@ -98,10 +113,33 @@ public void schedule() { * Generic interface to perform the execution of this {@link GrCUDAComputationalElement}. * The actual execution implementation must be added by concrete computational elements. * The execution request will be done by the {@link GrCUDAExecutionContext}, after this computation has been scheduled - * using {@link GrCUDAComputationalElement.schedule()} + * using {@link GrCUDAComputationalElement#schedule()} */ public abstract void execute(); + public CUDAStream getStream() { + return stream; + } + + public void setStream(CUDAStream stream) { + this.stream = stream; + } + + public boolean isComputationFinished() { + return computationFinished; + } + + public void setComputationFinished(boolean computationFinished) { + this.computationFinished = computationFinished; + } + + /** + * Find whether this computation should be done on a user-specified {@link com.nvidia.grcuda.gpu.stream.CUDAStream}; + * If not, the stream will be provided internally using the specified execution policy. By default return false; + * @return if the computation is done on a custom CUDA stream; + */ + public boolean useManuallySpecifiedStream() { return false; } + /** * The default initializer will simply store all the arguments, * and consider each of them in the dependency computations; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index 37fe8eee..c76c2b5e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -8,7 +8,6 @@ import java.util.HashSet; import java.util.Set; -import java.util.concurrent.Callable; /** * Class used to monitor the state of GrCUDA execution, keep track of memory allocated, @@ -53,9 +52,13 @@ public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { } public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager) { + this(cudaRuntime, threadManager, new GrCUDAStreamManager(cudaRuntime)); + } + + public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, GrCUDAStreamManager streamManager) { this.cudaRuntime = cudaRuntime; this.threadManager = threadManager; - this.streamManager = new GrCUDAStreamManager(this.cudaRuntime); + this.streamManager = streamManager; } public void registerArray(AbstractArray array) { @@ -71,12 +74,16 @@ public void registerKernel(Kernel kernel) { * and add it to the current computational DAG. * The actual execution might be deferred depending on the inferred data dependencies; */ - public void registerExecution(GrCUDAComputationalElement kernel) { - dag.append(kernel); + public void registerExecution(GrCUDAComputationalElement computation) { + // Add the new computation to the DAG + ExecutionDAG.DAGVertex vertex = dag.append(computation); + // Compute the stream where the computation will be done; + streamManager.assignStream(vertex); + if (threadManager != null) { cudaRuntime.cudaDeviceSynchronize(); - kernel.execute(); + computation.execute(); cudaRuntime.cudaDeviceSynchronize(); } // // TODO: here should go the scheduling logic, and decide if/when the thread is spawned and under which conditions; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index 1795c367..8df7ef18 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -345,29 +345,29 @@ Object execute(Object[] arguments, @CachedLibrary(limit = "3") InteropLibrary blockSizeAccess, @CachedLibrary(limit = "3") InteropLibrary blockSizeElementAccess, @CachedLibrary(limit = "3") InteropLibrary sharedMemoryAccess) throws UnsupportedTypeException, ArityException { - int dynamicSharedMemoryBytes = 0; - CUDAStream stream = new DefaultStream(); // FIXME: ArityException allows to specify only 1 arity, and cannot be sublassed! We might want to use a custom exception here; - if (arguments.length == 3) { - if (sharedMemoryAccess.isNumber(arguments[2])) { - // dynamic shared memory specified - dynamicSharedMemoryBytes = extractNumber(arguments[2], "dynamicSharedMemory", sharedMemoryAccess); - } else { - stream = extractStream(arguments[2]); - } - } else if (arguments.length == 4) { - stream = extractStream(arguments[3]); - } - else if (arguments.length < 2 || arguments.length > 4) { + if (arguments.length < 2 || arguments.length > 4) { CompilerDirectives.transferToInterpreter(); throw ArityException.create(2, arguments.length); } Dim3 gridSize = extractDim3(arguments[0], "gridSize", gridSizeAccess, gridSizeElementAccess); Dim3 blockSize = extractDim3(arguments[1], "blockSize", blockSizeAccess, blockSizeElementAccess); - KernelConfig config = new KernelConfig(gridSize, blockSize, dynamicSharedMemoryBytes, stream); + KernelConfigBuilder configBuilder = new KernelConfigBuilder(gridSize, blockSize); + if (arguments.length == 3) { + if (sharedMemoryAccess.isNumber(arguments[2])) { + // Dynamic shared memory specified; + configBuilder.dynamicSharedMemoryBytes(extractNumber(arguments[2], "dynamicSharedMemory", sharedMemoryAccess)); + } else { + // Stream specified; + configBuilder.stream(extractStream(arguments[2])); + } + } else if (arguments.length == 4) { + // Stream specified; + configBuilder.stream(extractStream(arguments[3])); + } - return new ConfiguredKernel(this, config); + return new ConfiguredKernel(this, configBuilder.build()); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java index 3141bd65..e1dcef36 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java @@ -39,25 +39,15 @@ public final class KernelConfig { private final Dim3 gridSize; private final Dim3 blockSize; private final int dynamicSharedMemoryBytes; - private final CUDAStream stream; + private CUDAStream stream; + private final boolean useCustomStream; - public KernelConfig(int numBlocks, int numThreadsPerBlock) { - this(new Dim3(numBlocks), new Dim3(numThreadsPerBlock)); - } - - public KernelConfig(Dim3 gridSize, Dim3 blockSize) { - this(gridSize, blockSize, 0); - } - - public KernelConfig(Dim3 gridSize, Dim3 blockSize, int sharedMemoryBytes) { - this(gridSize, blockSize, sharedMemoryBytes, new DefaultStream()); - } - - public KernelConfig(Dim3 gridSize, Dim3 blockSize, int sharedMemoryBytes, CUDAStream stream) { + public KernelConfig(Dim3 gridSize, Dim3 blockSize, int sharedMemoryBytes, CUDAStream stream, boolean useCustomStream) { this.gridSize = gridSize; this.blockSize = blockSize; this.dynamicSharedMemoryBytes = sharedMemoryBytes; this.stream = stream; + this.useCustomStream = useCustomStream; } @Override @@ -83,6 +73,14 @@ public CUDAStream getStream() { return stream; } + public void setStream(CUDAStream stream) { + this.stream = stream; + } + + public boolean useCustomStream() { + return useCustomStream; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -95,7 +93,7 @@ public boolean equals(Object o) { return dynamicSharedMemoryBytes == that.dynamicSharedMemoryBytes && getStream().equals(that.getStream()) && gridSize.equals(that.gridSize) && - blockSize.equals(that.blockSize); + blockSize.equals(that.blockSize) && stream.equals(that.stream); } @Override diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfigBuilder.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfigBuilder.java new file mode 100644 index 00000000..6fb866a8 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfigBuilder.java @@ -0,0 +1,37 @@ +package com.nvidia.grcuda.gpu; + +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.DefaultStream; + +public class KernelConfigBuilder { + + private final Dim3 gridSize; + private final Dim3 blockSize; + private int dynamicSharedMemoryBytes = 0; + private CUDAStream stream = new DefaultStream(); + private boolean useCustomStream = false; + + KernelConfigBuilder(Dim3 gridSize, Dim3 blockSize) { + this.gridSize = gridSize; + this.blockSize = blockSize; + } + + public static KernelConfigBuilder newBuilder(Dim3 gridSize, Dim3 blockSize) { + return new KernelConfigBuilder(gridSize, blockSize); + } + + public KernelConfigBuilder dynamicSharedMemoryBytes(int bytes) { + this.dynamicSharedMemoryBytes = bytes; + return this; + } + + public KernelConfigBuilder stream(CUDAStream stream) { + this.stream = stream; + this.useCustomStream = true; + return this; + } + + public KernelConfig build() { + return new KernelConfig(gridSize, blockSize, dynamicSharedMemoryBytes, stream, useCustomStream); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java index 06b2f0b1..b9bab62b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -1,6 +1,10 @@ package com.nvidia.grcuda.gpu; +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.oracle.truffle.api.Option; + import java.util.Arrays; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -45,6 +49,29 @@ public KernelArguments getArgs() { return args; } + /** + * Setting the stream must be done inside the {@link KernelConfig}; + * @param stream the stream where this computation will be executed + */ + @Override + public void setStream(CUDAStream stream) { + // Make sure that the internal reference is consistent; + super.setStream(stream); + config.setStream(stream); + } + + /** + * The stream is stored in the internal {@link KernelConfig}; + * @return the stream where this computation will be executed + */ + @Override + public CUDAStream getStream() { + return config.getStream(); + } + + @Override + public boolean useManuallySpecifiedStream() { return config.useCustomStream(); } + @Override public String toString() { return "KernelExecution(" + configuredKernel.toString() + "; args=[" + diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java index 85400a4d..ba01f603 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java @@ -23,7 +23,7 @@ public int getStreamNumber() { @Override public String toString() { - return "CUDAStream(streamNumber=" + this.streamNumber + "; address=0x" + Long.toHexString(this.getRawPointer()); + return "CUDAStream(streamNumber=" + this.streamNumber + "; address=0x" + Long.toHexString(this.getRawPointer()) + ")"; } @ExportMessage diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java index 768113be..e027fd14 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java @@ -10,6 +10,6 @@ public DefaultStream() { @Override public String toString() { - return "DefaultCUDAStream(streamNumber=" + DEFAULT_STREAM_NUMBER + "; address=0x" + Long.toHexString(this.getRawPointer()); + return "DefaultCUDAStream(streamNumber=" + DEFAULT_STREAM_NUMBER + "; address=0x" + Long.toHexString(this.getRawPointer()) + ")"; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index f8d63446..f1c47808 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -1,7 +1,7 @@ package com.nvidia.grcuda.gpu.stream; -import com.nvidia.grcuda.GrCUDAThreadManager; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.ExecutionDAG; import java.util.ArrayList; import java.util.List; @@ -21,6 +21,22 @@ public GrCUDAStreamManager(CUDARuntime runtime) { this.runtime = runtime; } + public void assignStream(ExecutionDAG.DAGVertex vertex) { + // If it has a manually specified stream, use it; + if (!vertex.getComputation().useManuallySpecifiedStream()) { + if (vertex.isStart()) { + // Else, if the computation doesn't have parents, provide a new stream to it; + // TODO: can we do better? E.g. re-use a stream that is not being used + vertex.getComputation().setStream(this.createStream()); + } else { + // Else, compute the streams used by the parent computations. + // If more than one stream is available, keep the first; + CUDAStream stream = vertex.getParentComputations().get(0).getStream(); + vertex.getComputation().setStream(stream); + } + } + } + /** * Create a new {@link CUDAStream} and add it to this manager, then return it; */ From 03d27801c526d9d84bcf04725a9006edc99dc43a Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 20 Apr 2020 17:04:23 +0200 Subject: [PATCH 020/236] adding multithreaded execution of DAG, not working yet --- .../grcuda/test/gpu/ExecutionDAGTest.java | 53 ++++++----- .../gpu/stream/GrCUDAStreamManagerTest.java | 87 +++++++++++++++++++ .../nvidia/grcuda/GrCUDAThreadManager.java | 3 +- .../com/nvidia/grcuda/array/DeviceArray.java | 6 +- .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 16 ++++ .../gpu/GrCUDAComputationalElement.java | 27 +++++- .../grcuda/gpu/GrCUDAExecutionContext.java | 48 +++++++--- .../nvidia/grcuda/gpu/KernelExecution.java | 3 +- .../gpu/stream/GrCUDAStreamManager.java | 8 +- 9 files changed, 204 insertions(+), 47 deletions(-) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 009af27a..e8fdcf35 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -27,30 +27,33 @@ public class ExecutionDAGTest { * Mock class to test the DAG execution; */ public static class KernelExecutionTest extends GrCUDAComputationalElement { - KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { + public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { super(grCUDAExecutionContext, args); } @Override - public void execute() {} + protected void executeInner() {} } /** * Mock class to test the GrCUDAExecutionContextTest, it has a null CUDARuntime; */ public static class GrCUDAExecutionContextTest extends GrCUDAExecutionContext { - GrCUDAExecutionContextTest() { - super((CUDARuntime) null, null, new GrCUDAStreamManagerTest(null)); + public GrCUDAExecutionContextTest() { + super(null, null, new GrCUDAStreamManagerTest(null)); } } public static class GrCUDAStreamManagerTest extends GrCUDAStreamManager { - int streamNumber = 0; GrCUDAStreamManagerTest(CUDARuntime runtime) { super(runtime); } + int numStreams = 0; + @Override public CUDAStream createStream() { - return new CUDAStream(0, streamNumber++); + CUDAStream newStream = new CUDAStream(0, numStreams++); + streams.add(newStream); + return newStream; } } @@ -227,40 +230,42 @@ public void dependencyPipelineSimpleTest() { Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); Value x = deviceArrayConstructor.execute("float", numElements); Value y = deviceArrayConstructor.execute("float", numElements); - Value z = deviceArrayConstructor.execute("float", numElements); - Value res = deviceArrayConstructor.execute("float", 1); +// Value z = deviceArrayConstructor.execute("float", numElements); +// Value res = deviceArrayConstructor.execute("float", 1); Value buildkernel = context.eval("grcuda", "buildkernel"); Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); - Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32"); - Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32"); +// Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32"); +// Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32"); assertNotNull(squareKernel); - assertNotNull(diffKernel); - assertNotNull(reduceKernel); +// assertNotNull(diffKernel); +// assertNotNull(reduceKernel); for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 1.0 / (i + 1)); - y.setArrayElement(i, 2.0 / (i + 1)); - z.setArrayElement(i, 0.0); + x.setArrayElement(i, 2.0); // 1.0 / (i + 1)); + y.setArrayElement(i, 4.0); // 2.0 / (i + 1)); +// z.setArrayElement(i, 0.0); } - res.setArrayElement(0, 0); +// res.setArrayElement(0, 0); Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); +// Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); +// Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); // Perform the computation; configuredSquareKernel.execute(x, numElements); configuredSquareKernel.execute(y, numElements); - configuredDiffKernel.execute(x, y, z, numElements); - configuredReduceKernel.execute(z, res, numElements); +// configuredDiffKernel.execute(x, y, z, numElements); +// configuredReduceKernel.execute(z, res, numElements); // FIXME: temporary sync point until we add array accesses as DAG nodes! - Value sync = context.eval("grcuda", "cudaDeviceSynchronize"); - sync.execute(); +// Value sync = context.eval("grcuda", "cudaDeviceSynchronize"); +// sync.execute(); // Verify the output; - float resScalar = res.getArrayElement(0).asFloat(); - assertEquals(-4.93, resScalar, 0.01); + assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(16.0, y.getArrayElement(0).asFloat(), 0.1); +// float resScalar = res.getArrayElement(0).asFloat(); +// assertEquals(-4.93, resScalar, 0.01); } } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java new file mode 100644 index 00000000..1e5b1a3b --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -0,0 +1,87 @@ +package com.nvidia.grcuda.test.gpu.stream; + +import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.test.gpu.ExecutionDAGTest; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; + +import static org.junit.Assert.assertEquals; + +public class GrCUDAStreamManagerTest { + @Test + public void streamSelectionSimpleMockTest() { + GrCUDAExecutionContext context = new ExecutionDAGTest.GrCUDAExecutionContextTest(); + // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, + // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), + // and kernel 4 (argument "3" is active); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(1)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(2)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 2, 3)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(3)).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check that kernels have been given the right stream; + assertEquals(2, context.getStreamManager().getNumberOfStreams()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); + } + + @Test + public void streamSelectionMockTest() { + GrCUDAExecutionContext context = new ExecutionDAGTest.GrCUDAExecutionContextTest(); + + // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) + // \----> C(2) + // The final frontier is composed by C(2), D(3), E(1), F(4); + new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 2)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(1)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(2)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 3)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 4)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(4)).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check that kernels have been given the right stream; + assertEquals(1, context.getStreamManager().getNumberOfStreams()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(5).getComputation().getStream().getStreamNumber()); + } + + @Test + public void streamSelection2MockTest() { + GrCUDAExecutionContext context = new ExecutionDAGTest.GrCUDAExecutionContextTest(); + + // A(1,2) -> B(1) -> D(1,3) + // \----> C(2) + // E(4) -> F(4, 5) + new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 2)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(1)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(2)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 3)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(4)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(4, 5)).schedule(); + + + ExecutionDAG dag = context.getDag(); + + // Check that kernels have been given the right stream; + assertEquals(2, context.getStreamManager().getNumberOfStreams()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(5).getComputation().getStream().getStreamNumber()); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java index 3b99f120..346ce599 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java @@ -54,7 +54,7 @@ public List getResults(Collection> futures) { public void finalizeManager() { if (threadPool == null) return; - + System.out.println("closing GrCUDA thread manager..."); threadPool.shutdown(); try { if (!threadPool.awaitTermination(60, TimeUnit.SECONDS)) { @@ -70,5 +70,6 @@ public void finalizeManager() { threadPool.shutdownNow(); Thread.currentThread().interrupt(); } + System.out.println("closed GrCUDA thread manager"); } } \ No newline at end of file diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index 9aadf49f..c433e15c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -169,11 +169,11 @@ boolean isArrayElementInsertable(@SuppressWarnings("unused") long index) { @ExportMessage Object readArrayElement(long index, @Shared("elementType") @Cached("createIdentityProfile()") ValueProfile elementTypeProfile) throws InvalidArrayIndexException { - + System.out.println("READ ELEM " + index); + grCUDAExecutionContext.getCudaRuntime().cudaDeviceSynchronize(); if ((index < 0) || (index >= numElements)) { CompilerDirectives.transferToInterpreter(); throw InvalidArrayIndexException.create(index); - } switch (elementTypeProfile.profile(elementType)) { case BYTE: @@ -197,7 +197,7 @@ Object readArrayElement(long index, public void writeArrayElement(long index, Object value, @CachedLibrary(limit = "3") InteropLibrary valueLibrary, @Shared("elementType") @Cached("createIdentityProfile()") ValueProfile elementTypeProfile) throws UnsupportedTypeException, InvalidArrayIndexException { - + grCUDAExecutionContext.getCudaRuntime().cudaDeviceSynchronize(); if ((index < 0) || (index >= numElements)) { CompilerDirectives.transferToInterpreter(); throw InvalidArrayIndexException.create(index); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index d490b497..94d74c72 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -133,6 +133,22 @@ public boolean isFrontier() { return computation.hasPossibleDependencies() && !computation.isComputationFinished(); } + /** + * Check if this vertex corresponds to a computation that can be immediately executed. + * This usually happens if the computations has no parents, or all the parents have already completed their execution; + * @return if the computation can be started immediately + */ + public boolean isExecutable() { + return !computation.isComputationStarted() && (parents.isEmpty() || allParentsHaveFinishedComputation()); + } + + private boolean allParentsHaveFinishedComputation() { + for (DAGEdge e : parents) { + if (!e.getStart().getComputation().isComputationFinished()) return false; + } + return true; + } + public List getParents() { return parents; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java index 4d2c003c..40eb6397 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java @@ -40,6 +40,10 @@ public abstract class GrCUDAComputationalElement { * Computations that are already executed will not be considered when computing dependencies; */ private boolean computationFinished = false; + /** + * Keep track of whether this computation has already been started, to avoid performing the same computation multiple times; + */ + private boolean computationStarted = false; /** * Constructor that takes an argument set initializer to build the set of arguments used in the dependency computation @@ -115,7 +119,16 @@ public void schedule() { * The execution request will be done by the {@link GrCUDAExecutionContext}, after this computation has been scheduled * using {@link GrCUDAComputationalElement#schedule()} */ - public abstract void execute(); + protected abstract void executeInner(); + + /** + * Perform execution taking care of setting appropriate flags that keep track of the execution status; + */ + public void execute() { + setComputationStarted(); + executeInner(); + setComputationFinished(); + } public CUDAStream getStream() { return stream; @@ -129,8 +142,16 @@ public boolean isComputationFinished() { return computationFinished; } - public void setComputationFinished(boolean computationFinished) { - this.computationFinished = computationFinished; + public boolean isComputationStarted() { + return computationStarted; + } + + public void setComputationFinished() { + this.computationFinished = true; + } + + public void setComputationStarted() { + this.computationStarted = true; } /** diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index c76c2b5e..5849d157 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -80,19 +80,16 @@ public void registerExecution(GrCUDAComputationalElement computation) { // Compute the stream where the computation will be done; streamManager.assignStream(vertex); - - if (threadManager != null) { - cudaRuntime.cudaDeviceSynchronize(); - computation.execute(); - cudaRuntime.cudaDeviceSynchronize(); + + // If the computation can be executed immediately, start it; + if (vertex.isExecutable() && threadManager != null) { + threadManager.submitRunnable(new ComputationThread(vertex)); } -// // TODO: here should go the scheduling logic, and decide if/when the thread is spawned and under which conditions; + // if (threadManager != null) { -// threadManager.submitRunnable(() -> { -// cudaRuntime.cudaDeviceSynchronize(); -// kernel.execute(); -//// cudaRuntime.cudaDeviceSynchronize(); -// }); +// cudaRuntime.cudaDeviceSynchronize(); +// computation.execute(); +// cudaRuntime.cudaDeviceSynchronize(); // } } @@ -104,6 +101,10 @@ public CUDARuntime getCudaRuntime() { return cudaRuntime; } + public GrCUDAStreamManager getStreamManager() { + return streamManager; + } + // Functions used to interface directly with the CUDA runtime; public Kernel loadKernel(String cubinFile, String kernelName, String signature) { @@ -121,4 +122,29 @@ public void cleanup() { threadManager.finalizeManager(); streamManager.cleanup(); } + + public class ComputationThread implements Runnable { + + private final ExecutionDAG.DAGVertex vertex; + + public ComputationThread(ExecutionDAG.DAGVertex vertex) { + this.vertex = vertex; + } + + public void run(){ + // Perform the computation; + System.out.println("Starting execution of " + vertex.getComputation()); + vertex.getComputation().execute(); + // Synchronize on the stream associated to this computation; + System.out.println("\tsync thread on stream " + vertex.getComputation().getStream()); + cudaRuntime.cudaStreamSynchronize(vertex.getComputation().getStream()); + System.out.println("\tfinish sync thread on stream " + vertex.getComputation().getStream()); + // Update the status of this computation and of its children, ; + vertex.getChildVertices().forEach(v -> { + if (v.isExecutable() && threadManager != null) { + threadManager.submitRunnable(new ComputationThread(v)); + } + }); + } + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java index b9bab62b..08bcdb77 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -32,8 +32,7 @@ public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) } @Override - public void execute() { - System.out.println("EXECUTING: " + this); + public void executeInner() { kernel.getGrCUDAExecutionContext().getCudaRuntime().cuLaunchKernel(kernel, config, args); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index f1c47808..1edd3190 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -11,11 +11,11 @@ public class GrCUDAStreamManager { /** * List of {@link CUDAStream} that have been currently allocated; */ - List streams = new ArrayList<>(); + protected List streams = new ArrayList<>(); /** * Reference to the CUDA runtime that manages the streams; */ - CUDARuntime runtime; + protected CUDARuntime runtime; public GrCUDAStreamManager(CUDARuntime runtime) { this.runtime = runtime; @@ -27,10 +27,12 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { if (vertex.isStart()) { // Else, if the computation doesn't have parents, provide a new stream to it; // TODO: can we do better? E.g. re-use a stream that is not being used - vertex.getComputation().setStream(this.createStream()); + vertex.getComputation().setStream(createStream()); } else { // Else, compute the streams used by the parent computations. // If more than one stream is available, keep the first; + // TODO: this should be more complex! + // If 2 child computations have disjoint set of dependencies, they can use 2 streams and run in parallel! CUDAStream stream = vertex.getParentComputations().get(0).getStream(); vertex.getComputation().setStream(stream); } From 48ed234583a06333b39a8cd91eebbffd4c331b58 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 22 Apr 2020 10:35:03 +0200 Subject: [PATCH 021/236] added sync execution on multiple streams --- mx.grcuda/suite.py | 2 +- .../grcuda/test/gpu/ExecutionDAGTest.java | 8 +- .../com/nvidia/grcuda/array/DeviceArray.java | 2 +- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 18 +- .../gpu/GrCUDAComputationalElement.java | 11 +- .../grcuda/gpu/GrCUDAExecutionContext.java | 31 +- .../nvidia/grcuda/gpu/KernelExecution.java | 2 +- .../gpu/stream/GrCUDAStreamManager.java | 22 + .../python/examples/hs_err_pid18546.log | 1356 +++++++++++++++++ .../resources/python/examples/pipeline_1.py | 10 +- 10 files changed, 1421 insertions(+), 41 deletions(-) create mode 100644 projects/resources/python/examples/hs_err_pid18546.log diff --git a/mx.grcuda/suite.py b/mx.grcuda/suite.py index 3c79d822..ded1c0b0 100644 --- a/mx.grcuda/suite.py +++ b/mx.grcuda/suite.py @@ -125,7 +125,7 @@ "dependencies": [ "com.nvidia.grcuda", "mx:JUNIT", - "truffle:TRUFFLE_TEST" + "truffle:TRUFFLE_TEST", ], "checkstyle": "com.nvidia.grcuda", "javaCompliance": "1.8", diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index e8fdcf35..ac833378 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,6 +1,5 @@ package com.nvidia.grcuda.test.gpu; -import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.GrCUDAComputationalElement; @@ -32,7 +31,7 @@ public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List= numElements)) { CompilerDirectives.transferToInterpreter(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 56b3c097..f86a0f93 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -28,15 +28,6 @@ */ package com.nvidia.grcuda.gpu; -import static com.nvidia.grcuda.functions.Function.checkArgumentLength; -import static com.nvidia.grcuda.functions.Function.expectInt; -import static com.nvidia.grcuda.functions.Function.expectLong; -import static com.nvidia.grcuda.functions.Function.expectPositiveLong; - -import java.util.HashMap; - -import com.nvidia.grcuda.gpu.stream.CUDAStream; -import org.graalvm.collections.Pair; import com.nvidia.grcuda.GPUPointer; import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAException; @@ -45,6 +36,7 @@ import com.nvidia.grcuda.functions.CUDAFunction; import com.nvidia.grcuda.gpu.UnsafeHelper.Integer32Object; import com.nvidia.grcuda.gpu.UnsafeHelper.Integer64Object; +import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; @@ -57,6 +49,14 @@ import com.oracle.truffle.api.interop.UnsupportedMessageException; import com.oracle.truffle.api.interop.UnsupportedTypeException; import com.oracle.truffle.api.source.Source; +import org.graalvm.collections.Pair; + +import java.util.HashMap; + +import static com.nvidia.grcuda.functions.Function.checkArgumentLength; +import static com.nvidia.grcuda.functions.Function.expectInt; +import static com.nvidia.grcuda.functions.Function.expectLong; +import static com.nvidia.grcuda.functions.Function.expectPositiveLong; public final class CUDARuntime { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java index 40eb6397..a8573513 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java @@ -119,16 +119,7 @@ public void schedule() { * The execution request will be done by the {@link GrCUDAExecutionContext}, after this computation has been scheduled * using {@link GrCUDAComputationalElement#schedule()} */ - protected abstract void executeInner(); - - /** - * Perform execution taking care of setting appropriate flags that keep track of the execution status; - */ - public void execute() { - setComputationStarted(); - executeInner(); - setComputationFinished(); - } + protected abstract void execute(); public CUDAStream getStream() { return stream; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index 5849d157..fa09fa2b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -81,15 +81,12 @@ public void registerExecution(GrCUDAComputationalElement computation) { // Compute the stream where the computation will be done; streamManager.assignStream(vertex); - // If the computation can be executed immediately, start it; - if (vertex.isExecutable() && threadManager != null) { - threadManager.submitRunnable(new ComputationThread(vertex)); - } - -// if (threadManager != null) { -// cudaRuntime.cudaDeviceSynchronize(); -// computation.execute(); -// cudaRuntime.cudaDeviceSynchronize(); + // Start the computation; + executeComputationSync(vertex); +// +// // If the computation can be executed immediately, start it; +// if (vertex.isExecutable() && threadManager != null) { +// threadManager.submitRunnable(new ComputationThread(vertex)); // } } @@ -123,7 +120,17 @@ public void cleanup() { streamManager.cleanup(); } - public class ComputationThread implements Runnable { + private void executeComputationSync(ExecutionDAG.DAGVertex vertex) { + // Before starting this computation, ensure that all its parents have finished their computation; + streamManager.syncParentStreams(vertex); + + // Perform the computation; + System.out.println("Starting execution of " + vertex.getComputation()); + vertex.getComputation().setComputationStarted(); + vertex.getComputation().execute(); + } + + private class ComputationThread implements Runnable { private final ExecutionDAG.DAGVertex vertex; @@ -134,12 +141,14 @@ public ComputationThread(ExecutionDAG.DAGVertex vertex) { public void run(){ // Perform the computation; System.out.println("Starting execution of " + vertex.getComputation()); + vertex.getComputation().setComputationStarted(); vertex.getComputation().execute(); // Synchronize on the stream associated to this computation; System.out.println("\tsync thread on stream " + vertex.getComputation().getStream()); cudaRuntime.cudaStreamSynchronize(vertex.getComputation().getStream()); + vertex.getComputation().setComputationFinished(); System.out.println("\tfinish sync thread on stream " + vertex.getComputation().getStream()); - // Update the status of this computation and of its children, ; + // Update the status of this computation and of its children; vertex.getChildVertices().forEach(v -> { if (v.isExecutable() && threadManager != null) { threadManager.submitRunnable(new ComputationThread(v)); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java index 08bcdb77..bb667436 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java @@ -32,7 +32,7 @@ public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) } @Override - public void executeInner() { + public void execute() { kernel.getGrCUDAExecutionContext().getCudaRuntime().cuLaunchKernel(kernel, config, args); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 1edd3190..8cb8035a 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -21,6 +21,11 @@ public GrCUDAStreamManager(CUDARuntime runtime) { this.runtime = runtime; } + /** + * Assign a {@link CUDAStream} to the input computation, based on its dependencies and on the available streams. + * This function has no effect if the stream was manually specified by the user; + * @param vertex an input computation for which we want to assign a stream + */ public void assignStream(ExecutionDAG.DAGVertex vertex) { // If it has a manually specified stream, use it; if (!vertex.getComputation().useManuallySpecifiedStream()) { @@ -39,6 +44,23 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { } } + /** + * Given a computation, synchronize all its parent streams. The caller thread will be blocked until all the + * computations on the parents streams are finished; + * @param vertex a computation whose parents should be synchronized + */ + public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { + vertex.getParentComputations().forEach(c -> { + if (!c.isComputationFinished()) { + System.out.println("\tsync thread on stream " + c.getStream()); + runtime.cudaStreamSynchronize(c.getStream()); + System.out.println("\tfinish sync thread on stream " + c.getStream()); + // Set the parent computations to be finished; + c.setComputationFinished(); + } + }); + } + /** * Create a new {@link CUDAStream} and add it to this manager, then return it; */ diff --git a/projects/resources/python/examples/hs_err_pid18546.log b/projects/resources/python/examples/hs_err_pid18546.log new file mode 100644 index 00000000..993ed79b --- /dev/null +++ b/projects/resources/python/examples/hs_err_pid18546.log @@ -0,0 +1,1356 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x00007f44eaf3ca40, pid=18546, tid=0x00007f442a654700 +# +# JRE version: OpenJDK Runtime Environment (8.0_242-b06) (build 1.8.0_242-b06) +# Java VM: OpenJDK 64-Bit Server VM GraalVM CE 20.0.0 (25.242-b06-jvmci-20.0-b02 mixed mode linux-amd64 compressed oops) +# Problematic frame: +# C [libc.so.6+0x15ba40] __memmove_ssse3_back+0x27f0 +# +# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again +# +# If you would like to submit a bug report, please visit: +# http://bugreport.java.com/bugreport/crash.jsp +# The crash happened outside the Java Virtual Machine in native code. +# See problematic frame for where to report the bug. +# + +--------------- T H R E A D --------------- + +Current thread (0x00007f44e5ffe000): JavaThread "Polyglot-grcuda-1" [_thread_in_native, id=18594, stack(0x00007f442a554000,0x00007f442a655000)] + +siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x00007f44000003e8 + +Registers: +RAX=0x00007f44e5a0a040, RBX=0x0000000000000008, RCX=0x0000000000000000, RDX=0x00007f44eaf3ca40 +RSP=0x00007f442a6526a8, RBP=0x0000000000000001, RSI=0x00007f44000003e8, RDI=0x00007f44e5a0a040 +R8 =0x00007f442a65273c, R9 =0x0000000000000000, R10=0x0000000000000002, R11=0x00007f44eaf6e580 +R12=0x00007f44e5a0a040, R13=0x00007f44e5500e70, R14=0x00007f44e5501e40, R15=0x0000000000000080 +RIP=0x00007f44eaf3ca40, EFLAGS=0x0000000000010287, CSGSFS=0x0000000000000033, ERR=0x0000000000000004 + TRAPNO=0x000000000000000e + +Top of Stack: (sp=0x00007f442a6526a8) +0x00007f442a6526a8: 00007f4432560437 00007f44e5501e40 +0x00007f442a6526b8: 00007f44e5501e40 0000000000000001 +0x00007f442a6526c8: 0000000000000001 0000000000000008 +0x00007f442a6526d8: 00007f4432560636 0000000000000000 +0x00007f442a6526e8: 0000000000000000 00007f44e5a0a040 +0x00007f442a6526f8: 00007f442a65273c 00007f44e5501e40 +0x00007f442a652708: 00007f44e4e19390 0000000000000001 +0x00007f442a652718: 00007f443247afbf 0000000000000000 +0x00007f442a652728: 0000000000000000 00007f44e58ce920 +0x00007f442a652738: 0000000000000000 00007f44e4e19390 +0x00007f442a652748: 00007f44e4e19390 0000000000000000 +0x00007f442a652758: 00007f44e5501e40 0000000000000008 +0x00007f442a652768: 0000000000000001 0000000000000001 +0x00007f442a652778: 0000000000000080 0000000000000001 +0x00007f442a652788: 00007f443247b3db 00007f4400000001 +0x00007f442a652798: 00007f4400000001 00007f4400000000 +0x00007f442a6527a8: 00007f44e58ce920 00007f44e5500e70 +0x00007f442a6527b8: 0000000000000000 0000000000000000 +0x00007f442a6527c8: 00007f442a6527e0 00007f442a652838 +0x00007f442a6527d8: 00007f44d5007d80 000000071f7b9318 +0x00007f442a6527e8: 00000005cd4bf9f0 00007f440c001390 +0x00007f442a6527f8: 00007f442a6527f8 00007f44e4e19390 +0x00007f442a652808: 00007f442a652860 00007f44e4e19390 +0x00007f442a652818: 0000000000000000 00007f44e58ce920 +0x00007f442a652828: 0000000000000000 00007f442a652848 +0x00007f442a652838: 00007f442a6528a8 00007f44d5007d80 +0x00007f442a652848: 000000071f7b9318 00000005cd4bf9f0 +0x00007f442a652858: 000000071f4311f0 000000071f7b93c8 +0x00007f442a652868: 00007f442a652868 00007f446096e7e7 +0x00007f442a652878: 00007f44d1e64480 0000000000000000 +0x00007f442a652888: 00007f44e5501e40 0000000000000008 +0x00007f442a652898: 0000000000000001 00007f4408001b80 + +Instructions: (pc=0x00007f44eaf3ca40) +0x00007f44eaf3ca20: 18 f3 0f 7f 47 18 f2 0f f0 46 08 f2 0f f0 0e f3 +0x00007f44eaf3ca30: 0f 7f 47 08 f3 0f 7f 0f c3 0f 1f 80 00 00 00 00 +0x00007f44eaf3ca40: 48 8b 16 48 89 17 c3 66 0f 1f 84 00 00 00 00 00 +0x00007f44eaf3ca50: f2 0f f0 46 77 f3 0f 7f 47 77 f2 0f f0 46 67 f3 + +Register to memory mapping: + +RAX=0x00007f44e5a0a040 is an unknown value +RBX=0x0000000000000008 is an unknown value +RCX=0x0000000000000000 is an unknown value +RDX=0x00007f44eaf3ca40: in /lib64/libc.so.6 at 0x00007f44eade1000 +RSP=0x00007f442a6526a8 is pointing into the stack for thread: 0x00007f44e5ffe000 +RBP=0x0000000000000001 is an unknown value +RSI=0x00007f44000003e8 is an unknown value +RDI=0x00007f44e5a0a040 is an unknown value +R8 =0x00007f442a65273c is pointing into the stack for thread: 0x00007f44e5ffe000 +R9 =0x0000000000000000 is an unknown value +R10=0x0000000000000002 is an unknown value +R11=0x00007f44eaf6e580: in /lib64/libc.so.6 at 0x00007f44eade1000 +R12=0x00007f44e5a0a040 is an unknown value +R13=0x00007f44e5500e70 is an unknown value +R14=0x00007f44e5501e40 is an unknown value +R15=0x0000000000000080 is an unknown value + + +Stack: [0x00007f442a554000,0x00007f442a655000], sp=0x00007f442a6526a8, free space=1017k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libc.so.6+0x15ba40] __memmove_ssse3_back+0x27f0 + +Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) +j com.oracle.truffle.nfi.impl.NFIContext.executePrimitive(JJJ[BI[I[Ljava/lang/Object;)J+0 +j com.oracle.truffle.nfi.impl.NFIContext.executePrimitive(JJ[BI[I[Ljava/lang/Object;)J+14 +j com.oracle.truffle.nfi.impl.LibFFISignature.execute(Lcom/oracle/truffle/nfi/impl/NFIContext;JLcom/oracle/truffle/nfi/impl/NativeArgumentBuffer$Array;)Ljava/lang/Object;+110 +j com.oracle.truffle.nfi.impl.FunctionExecuteNode$SlowPathExecuteNode.slowPathExecute(Lcom/oracle/truffle/nfi/impl/NFIContext;Lcom/oracle/truffle/nfi/impl/LibFFISignature;JLcom/oracle/truffle/nfi/impl/NativeArgumentBuffer$Array;)Ljava/lang/Object;+5 +j com.oracle.truffle.nfi.impl.FunctionExecuteNode$SlowPathExecuteNode.execute(Lcom/oracle/truffle/api/frame/VirtualFrame;)Ljava/lang/Object;+74 +J 4039 JVMCI-native org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot([Ljava/lang/Object;)Ljava/lang/Object; (48 bytes) @ 0x00007f44d6369c7d [0x00007f44d6369b40+0x13d] +j org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary([Ljava/lang/Object;)Ljava/lang/Object;+15 +J 4435 C1 org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(Lcom/oracle/truffle/api/nodes/Node;[Ljava/lang/Object;)Ljava/lang/Object; (59 bytes) @ 0x00007f44d65227dc [0x00007f44d6521a00+0xddc] +j org.graalvm.compiler.truffle.runtime.OptimizedIndirectCallNode$1.call(Lcom/oracle/truffle/api/CallTarget;[Ljava/lang/Object;)Ljava/lang/Object;+11 +j com.oracle.truffle.nfi.impl.FunctionExecuteNode.genericExecute(Lcom/oracle/truffle/nfi/impl/NativePointer;Lcom/oracle/truffle/nfi/impl/LibFFISignature;[Ljava/lang/Object;Lcom/oracle/truffle/nfi/impl/NativeArgumentLibrary;Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;)Ljava/lang/Object;+125 +j com.oracle.truffle.nfi.impl.FunctionExecuteNodeGen$Uncached.execute(Lcom/oracle/truffle/nfi/impl/NativePointer;Lcom/oracle/truffle/nfi/impl/LibFFISignature;[Ljava/lang/Object;)Ljava/lang/Object;+22 +j com.oracle.truffle.nfi.impl.NativePointer.call(Ljava/lang/Object;[Ljava/lang/Object;Lcom/oracle/truffle/nfi/impl/FunctionExecuteNode;)Ljava/lang/Object;+29 +j com.oracle.truffle.nfi.impl.NativePointerGen$NativeSymbolLibraryExports$Uncached.call(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+37 +j com.oracle.truffle.nfi.NFISymbol.execute([Ljava/lang/Object;Lcom/oracle/truffle/nfi/spi/NativeSymbolLibrary;Lcom/oracle/truffle/api/profiles/BranchProfile;)Ljava/lang/Object;+17 +j com.oracle.truffle.nfi.NFISymbolGen$InteropLibraryExports$Uncached.execute(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+47 +j com.oracle.truffle.api.interop.InteropLibraryGen$UncachedDispatch.execute(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+12 +j com.nvidia.grcuda.gpu.CUDARuntime.cuLaunchKernel(Lcom/nvidia/grcuda/gpu/Kernel;Lcom/nvidia/grcuda/gpu/KernelConfig;Lcom/nvidia/grcuda/gpu/KernelArguments;)V+152 +j com.nvidia.grcuda.gpu.KernelExecution.executeInner()V+22 +j com.nvidia.grcuda.gpu.GrCUDAComputationalElement.execute()V+5 +j com.nvidia.grcuda.gpu.GrCUDAExecutionContext$ComputationThread.run()V+38 +j java.util.concurrent.Executors$RunnableAdapter.call()Ljava/lang/Object;+4 +j java.util.concurrent.FutureTask.run()V+42 +j java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+95 +j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+5 +j java.lang.Thread.run()V+11 +j com.oracle.truffle.polyglot.PolyglotThread.run()V+28 +v ~StubRoutines::call_stub + +--------------- P R O C E S S --------------- + +Java Threads: ( => current thread ) +=>0x00007f44e5ffe000 JavaThread "Polyglot-grcuda-1" [_thread_in_native, id=18594, stack(0x00007f442a554000,0x00007f442a655000)] + 0x00007f44e54f0800 JavaThread "Polyglot-grcuda-0" [_thread_blocked, id=18593, stack(0x00007f44300cc000,0x00007f44301cd000)] + 0x00007f44e4dbc000 JavaThread "nfi-gc" daemon [_thread_blocked, id=18572, stack(0x00007f444000c000,0x00007f444010d000)] + 0x00007f44e4d43000 JavaThread "pool-2-thread-1" daemon [_thread_blocked, id=18569, stack(0x00007f44433fe000,0x00007f44434ff000)] + 0x00007f44e4b91000 JavaThread "pool-1-thread-1" daemon [_thread_blocked, id=18568, stack(0x00007f44436ff000,0x00007f4443800000)] + 0x00007f44e4542800 JavaThread "TruffleCompilerThread-15" daemon [_thread_blocked, id=18567, stack(0x00007f445d4ff000,0x00007f445d600000)] + 0x00007f447c077000 JavaThread "HotSpotGraalManagement Bean Registration" daemon [_thread_blocked, id=18566, stack(0x00007f44b82ff000,0x00007f44b8400000)] + 0x00007f44e40d2800 JavaThread "Service Thread" daemon [_thread_blocked, id=18564, stack(0x00007f44bb1f6000,0x00007f44bb2f7000)] + 0x00007f44e40cd800 JavaThread "C1 CompilerThread3" daemon [_thread_in_native, id=18563, stack(0x00007f44bb2f8000,0x00007f44bb4f8000)] + 0x00007f44e40cb000 JavaThread "JVMCI-native CompilerThread2" daemon [_thread_in_vm, id=18562, stack(0x00007f44bb4f9000,0x00007f44bb6f9000)] + 0x00007f44e40c9800 JavaThread "JVMCI-native CompilerThread1" daemon [_thread_in_vm, id=18561, stack(0x00007f44bb6fa000,0x00007f44bb8fa000)] + 0x00007f44e40c6800 JavaThread "JVMCI-native CompilerThread0" daemon [_thread_in_native, id=18560, stack(0x00007f44bb8fb000,0x00007f44bbafb000)] + 0x00007f44e40c4800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=18559, stack(0x00007f44bbafb000,0x00007f44bbbfc000)] + 0x00007f44e4091800 JavaThread "Finalizer" daemon [_thread_blocked, id=18558, stack(0x00007f44bbbfc000,0x00007f44bbcfd000)] + 0x00007f44e408d000 JavaThread "Reference Handler" daemon [_thread_blocked, id=18557, stack(0x00007f44bbcfd000,0x00007f44bbdfe000)] + 0x00007f44e400b800 JavaThread "main" [_thread_blocked, id=18547, stack(0x00007f44eb8db000,0x00007f44eb9db000)] + +Other Threads: + 0x00007f44e4085000 VMThread [stack: 0x00007f44bbdff000,0x00007f44bbeff000] [id=18556] + 0x00007f44e40d7000 WatcherThread [stack: 0x00007f44bb0f6000,0x00007f44bb1f6000] [id=18565] + +VM state:not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event]) +[0x00007f44e40073a0] CodeCache_lock - owner thread: 0x00007f44e40c9800 +[0x00007f44e4008a20] Compile_lock - owner thread: 0x00007f44e40c9800 +[0x00007f44e4008b20] MethodCompileQueue_lock - owner thread: 0x00007f44e40c9800 + +heap address: 0x00000005ccc00000, size: 7988 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 +Narrow klass base: 0x0000000000000000, Narrow klass shift: 3 +Compressed class space size: 1073741824 Address: 0x00000007c0000000 + +Heap: + PSYoungGen total 149504K, used 117939K [0x0000000719980000, 0x0000000725480000, 0x00000007c0000000) + eden space 128512K, 75% used [0x0000000719980000,0x000000071f830780,0x0000000721700000) + from space 20992K, 99% used [0x0000000721700000,0x0000000722b7c5a0,0x0000000722b80000) + to space 20992K, 0% used [0x0000000724000000,0x0000000724000000,0x0000000725480000) + ParOldGen total 438272K, used 20442K [0x00000005ccc00000, 0x00000005e7800000, 0x0000000719980000) + object space 438272K, 4% used [0x00000005ccc00000,0x00000005cdff6a60,0x00000005e7800000) + Metaspace used 45063K, capacity 45678K, committed 46336K, reserved 1089536K + class space used 6126K, capacity 6346K, committed 6400K, reserved 1048576K + +Card table byte_map: [0x00007f44d4065000,0x00007f44d5000000] byte_map_base: 0x00007f44d11ff000 + +Marking Bits: (ParMarkBitMap*) 0x00007f44eadc40c0 + Begin Bits: [0x00007f449c660000, 0x00007f44a4330000) + End Bits: [0x00007f44a4330000, 0x00007f44ac000000) + +Polling page: 0x00007f44eba04000 + +CodeCache: size=245760Kb used=23292Kb max_used=23293Kb free=222467Kb + bounds [0x00007f44d5000000, 0x00007f44d66d0000, 0x00007f44e4000000] + total_blobs=4695 nmethods=4153 adapters=455 + compilation: enabled + +Compilation events (10 events): +Event: 4.148 Thread 0x00007f44e40cb000 4875 4 sun.misc.URLClassPath$JarLoader$2::getCodeSigners (8 bytes) +Event: 4.148 Thread 0x00007f44e40c6800 4876 4 sun.misc.URLClassPath$JarLoader$2::getCodeSourceURL (8 bytes) +Event: 4.149 Thread 0x00007f44e40c6800 nmethod 4876 0x00007f44d66c34d0 code [0x00007f44d66c3620, 0x00007f44d66c3680] +Event: 4.149 Thread 0x00007f44e40cd800 4877 3 java.lang.invoke.MethodType::changeReturnType (20 bytes) +Event: 4.150 Thread 0x00007f44e40cd800 nmethod 4877 0x00007f44d66c3010 code [0x00007f44d66c3180, 0x00007f44d66c3388] +Event: 4.150 Thread 0x00007f44e40cd800 4879 3 com.oracle.graal.python.runtime.PythonOptions::getAttributeAccessInlineCacheMaxDepth (16 bytes) +Event: 4.150 Thread 0x00007f44e40c9800 4882 4 java.lang.ThreadLocal$ThreadLocalMap::set (136 bytes) +Event: 4.150 Thread 0x00007f44e40c6800 4883 ! 4 com.oracle.graal.python.parser.antlr.Python3Parser::expr (256 bytes) +Event: 4.150 Thread 0x00007f44e40cd800 nmethod 4879 0x00007f44d66c4d10 code [0x00007f44d66c4f00, 0x00007f44d66c5a98] +Event: 4.150 Thread 0x00007f44e40cd800 4885 3 jdk.internal.org.objectweb.asm.MethodWriter::visitMaxs (1159 bytes) + +GC Heap History (10 events): +Event: 0.637 GC heap before +{Heap before GC invocations=1 (full 0): + PSYoungGen total 149504K, used 82250K [0x0000000719980000, 0x0000000724000000, 0x00000007c0000000) + eden space 128512K, 64% used [0x0000000719980000,0x000000071e9d28e8,0x0000000721700000) + from space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) + to space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) + ParOldGen total 341504K, used 0K [0x00000005ccc00000, 0x00000005e1980000, 0x0000000719980000) + object space 341504K, 0% used [0x00000005ccc00000,0x00000005ccc00000,0x00000005e1980000) + Metaspace used 20716K, capacity 21052K, committed 21296K, reserved 1067008K + class space used 2817K, capacity 2943K, committed 2944K, reserved 1048576K +Event: 0.642 GC heap after +Heap after GC invocations=1 (full 0): + PSYoungGen total 149504K, used 5505K [0x0000000719980000, 0x0000000724000000, 0x00000007c0000000) + eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) + from space 20992K, 26% used [0x0000000721700000,0x0000000721c60560,0x0000000722b80000) + to space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) + ParOldGen total 341504K, used 16K [0x00000005ccc00000, 0x00000005e1980000, 0x0000000719980000) + object space 341504K, 0% used [0x00000005ccc00000,0x00000005ccc04000,0x00000005e1980000) + Metaspace used 20716K, capacity 21052K, committed 21296K, reserved 1067008K + class space used 2817K, capacity 2943K, committed 2944K, reserved 1048576K +} +Event: 0.642 GC heap before +{Heap before GC invocations=2 (full 1): + PSYoungGen total 149504K, used 5505K [0x0000000719980000, 0x0000000724000000, 0x00000007c0000000) + eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) + from space 20992K, 26% used [0x0000000721700000,0x0000000721c60560,0x0000000722b80000) + to space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) + ParOldGen total 341504K, used 16K [0x00000005ccc00000, 0x00000005e1980000, 0x0000000719980000) + object space 341504K, 0% used [0x00000005ccc00000,0x00000005ccc04000,0x00000005e1980000) + Metaspace used 20716K, capacity 21052K, committed 21296K, reserved 1067008K + class space used 2817K, capacity 2943K, committed 2944K, reserved 1048576K +Event: 0.659 GC heap after +Heap after GC invocations=2 (full 1): + PSYoungGen total 149504K, used 0K [0x0000000719980000, 0x0000000724000000, 0x00000007c0000000) + eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) + from space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) + to space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) + ParOldGen total 233984K, used 5312K [0x00000005ccc00000, 0x00000005db080000, 0x0000000719980000) + object space 233984K, 2% used [0x00000005ccc00000,0x00000005cd1302c0,0x00000005db080000) + Metaspace used 20716K, capacity 21052K, committed 21296K, reserved 1067008K + class space used 2817K, capacity 2943K, committed 2944K, reserved 1048576K +} +Event: 1.358 GC heap before +{Heap before GC invocations=3 (full 1): + PSYoungGen total 149504K, used 90731K [0x0000000719980000, 0x0000000724000000, 0x00000007c0000000) + eden space 128512K, 70% used [0x0000000719980000,0x000000071f21ae20,0x0000000721700000) + from space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) + to space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) + ParOldGen total 233984K, used 5312K [0x00000005ccc00000, 0x00000005db080000, 0x0000000719980000) + object space 233984K, 2% used [0x00000005ccc00000,0x00000005cd1302c0,0x00000005db080000) + Metaspace used 34703K, capacity 35152K, committed 35456K, reserved 1079296K + class space used 5321K, capacity 5495K, committed 5504K, reserved 1048576K +Event: 1.363 GC heap after +Heap after GC invocations=3 (full 1): + PSYoungGen total 149504K, used 7134K [0x0000000719980000, 0x0000000725b80000, 0x00000007c0000000) + eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) + from space 20992K, 33% used [0x0000000722b80000,0x0000000723277928,0x0000000724000000) + to space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) + ParOldGen total 233984K, used 5320K [0x00000005ccc00000, 0x00000005db080000, 0x0000000719980000) + object space 233984K, 2% used [0x00000005ccc00000,0x00000005cd1322c0,0x00000005db080000) + Metaspace used 34703K, capacity 35152K, committed 35456K, reserved 1079296K + class space used 5321K, capacity 5495K, committed 5504K, reserved 1048576K +} +Event: 1.363 GC heap before +{Heap before GC invocations=4 (full 2): + PSYoungGen total 149504K, used 7134K [0x0000000719980000, 0x0000000725b80000, 0x00000007c0000000) + eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) + from space 20992K, 33% used [0x0000000722b80000,0x0000000723277928,0x0000000724000000) + to space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) + ParOldGen total 233984K, used 5320K [0x00000005ccc00000, 0x00000005db080000, 0x0000000719980000) + object space 233984K, 2% used [0x00000005ccc00000,0x00000005cd1322c0,0x00000005db080000) + Metaspace used 34703K, capacity 35152K, committed 35456K, reserved 1079296K + class space used 5321K, capacity 5495K, committed 5504K, reserved 1048576K +Event: 1.417 GC heap after +Heap after GC invocations=4 (full 2): + PSYoungGen total 149504K, used 0K [0x0000000719980000, 0x0000000725b80000, 0x00000007c0000000) + eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) + from space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) + to space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) + ParOldGen total 438272K, used 11738K [0x00000005ccc00000, 0x00000005e7800000, 0x0000000719980000) + object space 438272K, 2% used [0x00000005ccc00000,0x00000005cd776a50,0x00000005e7800000) + Metaspace used 34703K, capacity 35152K, committed 35456K, reserved 1079296K + class space used 5321K, capacity 5495K, committed 5504K, reserved 1048576K +} +Event: 2.662 GC heap before +{Heap before GC invocations=5 (full 2): + PSYoungGen total 149504K, used 128512K [0x0000000719980000, 0x0000000725b80000, 0x00000007c0000000) + eden space 128512K, 100% used [0x0000000719980000,0x0000000721700000,0x0000000721700000) + from space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) + to space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) + ParOldGen total 438272K, used 11738K [0x00000005ccc00000, 0x00000005e7800000, 0x0000000719980000) + object space 438272K, 2% used [0x00000005ccc00000,0x00000005cd776a50,0x00000005e7800000) + Metaspace used 40453K, capacity 41036K, committed 41472K, reserved 1085440K + class space used 5639K, capacity 5827K, committed 5888K, reserved 1048576K +Event: 2.679 GC heap after +Heap after GC invocations=5 (full 2): + PSYoungGen total 149504K, used 20977K [0x0000000719980000, 0x0000000725480000, 0x00000007c0000000) + eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) + from space 20992K, 99% used [0x0000000721700000,0x0000000722b7c5a0,0x0000000722b80000) + to space 20992K, 0% used [0x0000000724000000,0x0000000724000000,0x0000000725480000) + ParOldGen total 438272K, used 20442K [0x00000005ccc00000, 0x00000005e7800000, 0x0000000719980000) + object space 438272K, 4% used [0x00000005ccc00000,0x00000005cdff6a60,0x00000005e7800000) + Metaspace used 40453K, capacity 41036K, committed 41472K, reserved 1085440K + class space used 5639K, capacity 5827K, committed 5888K, reserved 1048576K +} + +Class unloading (0 events): +No events + +Deoptimization events (10 events): +Event: 3.581 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d59d9a74 method=com.oracle.truffle.polyglot.PolyglotContextImpl.getLanguageContextImpl(Ljava/lang/Class;)Lcom/oracle/truffle/polyglot/PolyglotLanguageContext; @ 4 +Event: 3.867 Thread 0x00007f44e400b800 Uncommon trap: reason=intrinsic_or_type_checked_inlining action=reinterpret pc=0x00007f44d667b490 method=com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNodeGen$ReadAttributeFromObjectNotTypeNodeGen.execute(Ljava/lang/Object;Ljava/lang/Obj +Event: 3.876 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5bf8bf1 method=org.antlr.v4.runtime.atn.ParserATNSimulator.computeReachSet(Lorg/antlr/v4/runtime/atn/ATNConfigSet;IZ)Lorg/antlr/v4/runtime/atn/ATNConfigSet; @ 207 +Event: 4.142 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5f35c11 method=com.oracle.truffle.api.library.LibraryFactory.create(Ljava/lang/Object;)Lcom/oracle/truffle/api/library/Library; @ 93 +Event: 4.149 Thread 0x00007f44e54f0800 Uncommon trap: reason=intrinsic_or_type_checked_inlining action=reinterpret pc=0x00007f44d54a135f method=java.util.WeakHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @ 0 +Event: 4.149 Thread 0x00007f44e54f0800 Uncommon trap: reason=intrinsic_or_type_checked_inlining action=reinterpret pc=0x00007f44d552ceb8 method=java.util.WeakHashMap.hash(Ljava/lang/Object;)I @ 0 +Event: 4.149 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5bf5ad6 method=org.graalvm.compiler.truffle.runtime.OptimizedAssumption.isValid()Z @ 4 +Event: 4.149 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5f5144e method=org.graalvm.compiler.truffle.runtime.OptimizedAssumption.isValid()Z @ 4 +Event: 4.149 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5f89c2d method=org.graalvm.compiler.truffle.runtime.OptimizedAssumption.isValid()Z @ 4 +Event: 4.150 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5d0c249 method=org.graalvm.compiler.truffle.runtime.OptimizedAssumption.isValid()Z @ 4 + +Classes redefined (0 events): +No events + +Internal exceptions (10 events): +Event: 3.329 Thread 0x00007f44e400b800 Exception (0x000000071db9fa58) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] +Event: 3.372 Thread 0x00007f44e400b800 Exception (0x000000071e29e930) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] +Event: 3.373 Thread 0x00007f44e400b800 Exception (0x000000071e2a2d00) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] +Event: 3.409 Thread 0x00007f44e400b800 Exception (0x000000071e4f6040) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] +Event: 3.455 Thread 0x00007f44e400b800 Implicit null exception at 0x00007f44d510c1bc to 0x00007f44d504932c +Event: 3.455 Thread 0x00007f44e400b800 Exception (0x000000071e7af2e0) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] +Event: 3.468 Thread 0x00007f44e400b800 Exception (0x000000071e852e78) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] +Event: 3.520 Thread 0x00007f44e400b800 Implicit null exception at 0x00007f44d57ba972 to 0x00007f44d504932c +Event: 3.520 Thread 0x00007f44e400b800 Implicit null exception at 0x00007f44d569953a to 0x00007f44d504932c +Event: 3.579 Thread 0x00007f44e400b800 Implicit null exception at 0x00007f44d580e552 to 0x00007f44d504932c + +Events (10 events): +Event: 4.149 Thread 0x00007f44e400b800 Uncommon trap: trap_request=0xffffffed fr.pc=0x00007f44d5f89c2d relative=0x00000000000002ed +Event: 4.149 Thread 0x00007f44e400b800 DEOPT PACKING pc=0x00007f44d5f89c2d sp=0x00007f44eb9d67d0 +Event: 4.149 Thread 0x00007f44e400b800 DEOPT UNPACKING pc=0x00007f44d5049599 sp=0x00007f44eb9d62c8 mode 3 +Event: 4.149 Thread 0x00007f44e400b800 Uncommon trap: trap_request=0xffffffed fr.pc=0x00007f44d5d0c249 relative=0x0000000000000289 +Event: 4.150 Thread 0x00007f44e400b800 DEOPT PACKING pc=0x00007f44d5d0c249 sp=0x00007f44eb9d8250 +Event: 4.150 Thread 0x00007f44e400b800 DEOPT UNPACKING pc=0x00007f44d5049599 sp=0x00007f44eb9d7d48 mode 3 +Event: 4.150 Executing VM operation: RevokeBias +Event: 4.151 Executing VM operation: RevokeBias done +Event: 4.153 loading class com/nvidia/grcuda/gpu/ExecutionDAG$DAGEdge +Event: 4.153 loading class com/nvidia/grcuda/gpu/ExecutionDAG$DAGEdge done + + +Dynamic libraries: +00400000-00401000 r-xp 00000000 08:03 75369845 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/bin/java +00600000-00601000 r--p 00000000 08:03 75369845 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/bin/java +00601000-00602000 rw-p 00001000 08:03 75369845 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/bin/java +013f6000-01417000 rw-p 00000000 00:00 0 [heap] +200000000-202780000 ---p 00000000 00:00 0 +202780000-202880000 rw-s 202780000 00:05 31285 /dev/nvidia-uvm +202880000-400000000 ---p 00000000 00:00 0 +5ccc00000-5e7800000 rw-p 00000000 00:00 0 +5e7800000-719980000 ---p 00000000 00:00 0 +719980000-725480000 rw-p 00000000 00:00 0 +725480000-7c0000000 ---p 00000000 00:00 0 +7c0000000-7c0640000 rw-p 00000000 00:00 0 +7c0640000-800000000 ---p 00000000 00:00 0 +800000000-800100000 rw-s 00000000 00:05 31275 /dev/nvidiactl +800100000-800300000 rw-s 00000000 00:05 31275 /dev/nvidiactl +800300000-802b00000 rw-s 00000000 00:05 31275 /dev/nvidiactl +802b00000-802c00000 rw-s 00000000 00:05 31275 /dev/nvidiactl +802c00000-802d00000 rw-s 00000000 00:04 1281121 /dev/zero (deleted) +802d00000-802e00000 rw-s 00000000 00:05 31275 /dev/nvidiactl +802e00000-802f00000 rw-s 00000000 00:04 1281122 /dev/zero (deleted) +802f00000-803000000 rw-s 00000000 00:05 31275 /dev/nvidiactl +803000000-803120000 ---p 00000000 00:00 0 +803120000-803220000 rw-s 00000000 00:05 31275 /dev/nvidiactl +803220000-803300000 rw-s 00000000 00:05 31275 /dev/nvidiactl +803300000-1100000000 ---p 00000000 00:00 0 +7f4408000000-7f4408021000 rw-p 00000000 00:00 0 +7f4408021000-7f440c000000 ---p 00000000 00:00 0 +7f440c000000-7f440c058000 rw-p 00000000 00:00 0 +7f440c058000-7f4410000000 ---p 00000000 00:00 0 +7f4410000000-7f4410001000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f4410001000-7f4410002000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f4410002000-7f4410003000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f4410003000-7f4410004000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f4410004000-7f4410005000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f4410005000-7f4410006000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f4410006000-7f4410007000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f4410007000-7f4410008000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f4410008000-7f4410009000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f4410009000-7f441000a000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f441000a000-7f441000b000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f441000b000-7f441000c000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f441000c000-7f441000d000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f441000d000-7f441000e000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f441000e000-7f441000f000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f441000f000-7f4410010000 rw-s 00000000 00:05 29264 /dev/nvidia0 +7f4410010000-7f4420000000 ---p 00000000 00:00 0 +7f4420000000-7f4420021000 rw-p 00000000 00:00 0 +7f4420021000-7f4424000000 ---p 00000000 00:00 0 +7f4424000000-7f4424021000 rw-p 00000000 00:00 0 +7f4424021000-7f4428000000 ---p 00000000 00:00 0 +7f442a554000-7f442a557000 ---p 00000000 00:00 0 +7f442a557000-7f442a655000 rw-p 00000000 00:00 0 +7f442a655000-7f442a73e000 r-xp 00000000 08:04 3543193 /usr/lib64/libstdc++.so.6.0.19 +7f442a73e000-7f442a93d000 ---p 000e9000 08:04 3543193 /usr/lib64/libstdc++.so.6.0.19 +7f442a93d000-7f442a945000 r--p 000e8000 08:04 3543193 /usr/lib64/libstdc++.so.6.0.19 +7f442a945000-7f442a947000 rw-p 000f0000 08:04 3543193 /usr/lib64/libstdc++.so.6.0.19 +7f442a947000-7f442a95c000 rw-p 00000000 00:00 0 +7f442a95c000-7f442adfe000 r-xp 00000000 08:04 4075163 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc-builtins.so.10.2.89 +7f442adfe000-7f442affd000 ---p 004a2000 08:04 4075163 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc-builtins.so.10.2.89 +7f442affd000-7f442affe000 rw-p 004a1000 08:04 4075163 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc-builtins.so.10.2.89 +7f442affe000-7f442afff000 ---p 00000000 00:00 0 +7f442afff000-7f442b7ff000 rw-p 00000000 00:00 0 +7f442b7ff000-7f442b800000 ---p 00000000 00:00 0 +7f442b800000-7f442c000000 rw-p 00000000 00:00 0 +7f442c000000-7f442c022000 rw-p 00000000 00:00 0 +7f442c022000-7f4430000000 ---p 00000000 00:00 0 +7f44300cc000-7f44300cf000 ---p 00000000 00:00 0 +7f44300cf000-7f44301cd000 rw-p 00000000 00:00 0 +7f44301cd000-7f44301ce000 ---p 00000000 00:00 0 +7f44301ce000-7f4430ace000 rw-p 00000000 00:00 0 +7f4430ace000-7f4430bce000 ---p 00000000 00:00 0 +7f4430bce000-7f4431dd6000 r-xp 00000000 08:04 4075165 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc.so.10.2.89 +7f4431dd6000-7f4431fd5000 ---p 01208000 08:04 4075165 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc.so.10.2.89 +7f4431fd5000-7f443225d000 r--p 01207000 08:04 4075165 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc.so.10.2.89 +7f443225d000-7f44322d3000 rw-p 0148f000 08:04 4075165 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc.so.10.2.89 +7f44322d3000-7f443237b000 rw-p 00000000 00:00 0 +7f443237b000-7f4433251000 r-xp 00000000 08:04 3539602 /usr/lib64/libcuda.so.440.64.00 +7f4433251000-7f4433450000 ---p 00ed6000 08:04 3539602 /usr/lib64/libcuda.so.440.64.00 +7f4433450000-7f443356b000 rw-p 00ed5000 08:04 3539602 /usr/lib64/libcuda.so.440.64.00 +7f443356b000-7f4433581000 rw-p 00000000 00:00 0 +7f4433581000-7f44335fa000 r-xp 00000000 08:04 4063737 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudart.so.10.2.89 +7f44335fa000-7f44337f9000 ---p 00079000 08:04 4063737 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudart.so.10.2.89 +7f44337f9000-7f44337fd000 rw-p 00078000 08:04 4063737 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudart.so.10.2.89 +7f44337fd000-7f44337ff000 rw-p 00000000 00:00 0 +7f44337ff000-7f4433800000 ---p 00000000 00:00 0 +7f4433800000-7f4434000000 rw-p 00000000 00:00 0 +7f4434000000-7f4434021000 rw-p 00000000 00:00 0 +7f4434021000-7f4438000000 ---p 00000000 00:00 0 +7f4438000000-7f4438021000 rw-p 00000000 00:00 0 +7f4438021000-7f443c000000 ---p 00000000 00:00 0 +7f443c000000-7f443c021000 rw-p 00000000 00:00 0 +7f443c021000-7f4440000000 ---p 00000000 00:00 0 +7f444000c000-7f444000f000 ---p 00000000 00:00 0 +7f444000f000-7f444010d000 rw-p 00000000 00:00 0 +7f444010d000-7f444011a000 r-xp 00000000 08:03 85328353 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libtrufflenfi.so +7f444011a000-7f444031a000 ---p 0000d000 08:03 85328353 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libtrufflenfi.so +7f444031a000-7f444031b000 rw-p 0000d000 08:03 85328353 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libtrufflenfi.so +7f444031b000-7f444031c000 ---p 00000000 00:00 0 +7f444031c000-7f4440b1c000 rw-p 00000000 00:00 0 +7f4440b1c000-7f4440b1e000 r-xp 00000000 08:04 3542881 /usr/lib64/libutil-2.17.so +7f4440b1e000-7f4440d1d000 ---p 00002000 08:04 3542881 /usr/lib64/libutil-2.17.so +7f4440d1d000-7f4440d1e000 r--p 00001000 08:04 3542881 /usr/lib64/libutil-2.17.so +7f4440d1e000-7f4440d1f000 rw-p 00002000 08:04 3542881 /usr/lib64/libutil-2.17.so +7f4440d1f000-7f4440d58000 r-xp 00000000 08:04 4983239 /usr/lib64/gvfs/libgvfscommon.so +7f4440d58000-7f4440f57000 ---p 00039000 08:04 4983239 /usr/lib64/gvfs/libgvfscommon.so +7f4440f57000-7f4440f5d000 r--p 00038000 08:04 4983239 /usr/lib64/gvfs/libgvfscommon.so +7f4440f5d000-7f4440f5e000 rw-p 0003e000 08:04 4983239 /usr/lib64/gvfs/libgvfscommon.so +7f4440f5e000-7f4440f90000 r-xp 00000000 08:04 3671868 /usr/lib64/gio/modules/libgvfsdbus.so +7f4440f90000-7f444118f000 ---p 00032000 08:04 3671868 /usr/lib64/gio/modules/libgvfsdbus.so +7f444118f000-7f4441190000 r--p 00031000 08:04 3671868 /usr/lib64/gio/modules/libgvfsdbus.so +7f4441190000-7f4441192000 rw-p 00032000 08:04 3671868 /usr/lib64/gio/modules/libgvfsdbus.so +7f4441192000-7f44411ad000 r-xp 00000000 08:04 3548627 /usr/lib64/libmagic.so.1.0.0 +7f44411ad000-7f44413ad000 ---p 0001b000 08:04 3548627 /usr/lib64/libmagic.so.1.0.0 +7f44413ad000-7f44413ae000 r--p 0001b000 08:04 3548627 /usr/lib64/libmagic.so.1.0.0 +7f44413ae000-7f44413af000 rw-p 0001c000 08:04 3548627 /usr/lib64/libmagic.so.1.0.0 +7f44413af000-7f44413b3000 r-xp 00000000 08:04 3543238 /usr/lib64/libuuid.so.1.3.0 +7f44413b3000-7f44415b2000 ---p 00004000 08:04 3543238 /usr/lib64/libuuid.so.1.3.0 +7f44415b2000-7f44415b3000 r--p 00003000 08:04 3543238 /usr/lib64/libuuid.so.1.3.0 +7f44415b3000-7f44415b4000 rw-p 00004000 08:04 3543238 /usr/lib64/libuuid.so.1.3.0 +7f44415b4000-7f44415f0000 r-xp 00000000 08:04 3542556 /usr/lib64/libblkid.so.1.1.0 +7f44415f0000-7f44417ef000 ---p 0003c000 08:04 3542556 /usr/lib64/libblkid.so.1.1.0 +7f44417ef000-7f44417f2000 r--p 0003b000 08:04 3542556 /usr/lib64/libblkid.so.1.1.0 +7f44417f2000-7f44417f3000 rw-p 0003e000 08:04 3542556 /usr/lib64/libblkid.so.1.1.0 +7f44417f3000-7f44417f4000 rw-p 00000000 00:00 0 +7f44417f4000-7f4441809000 r-xp 00000000 08:04 3538963 /usr/lib64/libgcc_s-4.8.5-20150702.so.1 +7f4441809000-7f4441a08000 ---p 00015000 08:04 3538963 /usr/lib64/libgcc_s-4.8.5-20150702.so.1 +7f4441a08000-7f4441a09000 r--p 00014000 08:04 3538963 /usr/lib64/libgcc_s-4.8.5-20150702.so.1 +7f4441a09000-7f4441a0a000 rw-p 00015000 08:04 3538963 /usr/lib64/libgcc_s-4.8.5-20150702.so.1 +7f4441a0a000-7f4441a4a000 r-xp 00000000 08:04 3545255 /usr/lib64/libmount.so.1.1.0 +7f4441a4a000-7f4441c4a000 ---p 00040000 08:04 3545255 /usr/lib64/libmount.so.1.1.0 +7f4441c4a000-7f4441c4b000 r--p 00040000 08:04 3545255 /usr/lib64/libmount.so.1.1.0 +7f4441c4b000-7f4441c4c000 rw-p 00041000 08:04 3545255 /usr/lib64/libmount.so.1.1.0 +7f4441c4c000-7f4441c4d000 rw-p 00000000 00:00 0 +7f4441c4d000-7f4441c63000 r-xp 00000000 08:04 3542716 /usr/lib64/libresolv-2.17.so +7f4441c63000-7f4441e62000 ---p 00016000 08:04 3542716 /usr/lib64/libresolv-2.17.so +7f4441e62000-7f4441e63000 r--p 00015000 08:04 3542716 /usr/lib64/libresolv-2.17.so +7f4441e63000-7f4441e64000 rw-p 00016000 08:04 3542716 /usr/lib64/libresolv-2.17.so +7f4441e64000-7f4441e66000 rw-p 00000000 00:00 0 +7f4441e66000-7f4441e8a000 r-xp 00000000 08:04 3543032 /usr/lib64/libselinux.so.1 +7f4441e8a000-7f4442089000 ---p 00024000 08:04 3543032 /usr/lib64/libselinux.so.1 +7f4442089000-7f444208a000 r--p 00023000 08:04 3543032 /usr/lib64/libselinux.so.1 +7f444208a000-7f444208b000 rw-p 00024000 08:04 3543032 /usr/lib64/libselinux.so.1 +7f444208b000-7f444208d000 rw-p 00000000 00:00 0 +7f444208d000-7f44420ed000 r-xp 00000000 08:04 3549973 /usr/lib64/libpcre.so.1.2.0 +7f44420ed000-7f44422ed000 ---p 00060000 08:04 3549973 /usr/lib64/libpcre.so.1.2.0 +7f44422ed000-7f44422ee000 r--p 00060000 08:04 3549973 /usr/lib64/libpcre.so.1.2.0 +7f44422ee000-7f44422ef000 rw-p 00061000 08:04 3549973 /usr/lib64/libpcre.so.1.2.0 +7f44422ef000-7f4442403000 r-xp 00000000 08:04 3545370 /usr/lib64/libglib-2.0.so.0.5600.1 +7f4442403000-7f4442602000 ---p 00114000 08:04 3545370 /usr/lib64/libglib-2.0.so.0.5600.1 +7f4442602000-7f4442603000 r--p 00113000 08:04 3545370 /usr/lib64/libglib-2.0.so.0.5600.1 +7f4442603000-7f4442604000 rw-p 00114000 08:04 3545370 /usr/lib64/libglib-2.0.so.0.5600.1 +7f4442604000-7f4442605000 rw-p 00000000 00:00 0 +7f4442605000-7f4442608000 r-xp 00000000 08:04 3545381 /usr/lib64/libgmodule-2.0.so.0.5600.1 +7f4442608000-7f4442807000 ---p 00003000 08:04 3545381 /usr/lib64/libgmodule-2.0.so.0.5600.1 +7f4442807000-7f4442808000 r--p 00002000 08:04 3545381 /usr/lib64/libgmodule-2.0.so.0.5600.1 +7f4442808000-7f4442809000 rw-p 00003000 08:04 3545381 /usr/lib64/libgmodule-2.0.so.0.5600.1 +7f4442809000-7f4442810000 r-xp 00000000 08:04 3539844 /usr/lib64/libffi.so.6.0.1 +7f4442810000-7f4442a0f000 ---p 00007000 08:04 3539844 /usr/lib64/libffi.so.6.0.1 +7f4442a0f000-7f4442a10000 r--p 00006000 08:04 3539844 /usr/lib64/libffi.so.6.0.1 +7f4442a10000-7f4442a11000 rw-p 00007000 08:04 3539844 /usr/lib64/libffi.so.6.0.1 +7f4442a11000-7f4442a60000 r-xp 00000000 08:04 3545780 /usr/lib64/libgobject-2.0.so.0.5600.1 +7f4442a60000-7f4442c5f000 ---p 0004f000 08:04 3545780 /usr/lib64/libgobject-2.0.so.0.5600.1 +7f4442c5f000-7f4442c60000 r--p 0004e000 08:04 3545780 /usr/lib64/libgobject-2.0.so.0.5600.1 +7f4442c60000-7f4442c61000 rw-p 0004f000 08:04 3545780 /usr/lib64/libgobject-2.0.so.0.5600.1 +7f4442c61000-7f4442df6000 r-xp 00000000 08:04 3540149 /usr/lib64/libgio-2.0.so.0.5600.1 +7f4442df6000-7f4442ff6000 ---p 00195000 08:04 3540149 /usr/lib64/libgio-2.0.so.0.5600.1 +7f4442ff6000-7f4442ffb000 r--p 00195000 08:04 3540149 /usr/lib64/libgio-2.0.so.0.5600.1 +7f4442ffb000-7f4442ffe000 rw-p 0019a000 08:04 3540149 /usr/lib64/libgio-2.0.so.0.5600.1 +7f4442ffe000-7f4443100000 rw-p 00000000 00:00 0 +7f4443200000-7f4443300000 rw-p 00000000 00:00 0 +7f44433fe000-7f4443401000 ---p 00000000 00:00 0 +7f4443401000-7f44436ff000 rw-p 00000000 00:00 0 +7f44436ff000-7f4443702000 ---p 00000000 00:00 0 +7f4443702000-7f4443900000 rw-p 00000000 00:00 0 +7f4443a00000-7f4443b00000 rw-p 00000000 00:00 0 +7f4443c00000-7f4443d00000 rw-p 00000000 00:00 0 +7f4443e00000-7f4444000000 rw-p 00000000 00:00 0 +7f4444000000-7f4444200000 rw-p 00000000 00:00 0 +7f4444200000-7f4444300000 rw-p 00000000 00:00 0 +7f4444400000-7f4444500000 rw-p 00000000 00:00 0 +7f4444600000-7f4444800000 rw-p 00000000 00:00 0 +7f4444800000-7f4444900000 rw-p 00000000 00:00 0 +7f4444a00000-7f4444c00000 rw-p 00000000 00:00 0 +7f4444c00000-7f4444d00000 rw-p 00000000 00:00 0 +7f4444e00000-7f4445000000 rw-p 00000000 00:00 0 +7f4445000000-7f4445200000 rw-p 00000000 00:00 0 +7f4445200000-7f4445400000 rw-p 00000000 00:00 0 +7f4445400000-7f4445600000 rw-p 00000000 00:00 0 +7f4445600000-7f4445700000 rw-p 00000000 00:00 0 +7f4445800000-7f4445900000 rw-p 00000000 00:00 0 +7f4445a00000-7f4445b00000 rw-p 00000000 00:00 0 +7f4445c00000-7f4445d00000 rw-p 00000000 00:00 0 +7f4445e00000-7f4445f00000 rw-p 00000000 00:00 0 +7f4446000000-7f4446100000 rw-p 00000000 00:00 0 +7f4446200000-7f4446300000 rw-p 00000000 00:00 0 +7f4446400000-7f4446500000 rw-p 00000000 00:00 0 +7f4446600000-7f4446700000 rw-p 00000000 00:00 0 +7f4446800000-7f4446900000 rw-p 00000000 00:00 0 +7f4446a00000-7f4446b00000 rw-p 00000000 00:00 0 +7f4446c00000-7f4446d00000 rw-p 00000000 00:00 0 +7f4446e00000-7f4446f00000 rw-p 00000000 00:00 0 +7f4447000000-7f4447100000 rw-p 00000000 00:00 0 +7f4447200000-7f4447300000 rw-p 00000000 00:00 0 +7f4447400000-7f4447500000 rw-p 00000000 00:00 0 +7f4447600000-7f4447700000 rw-p 00000000 00:00 0 +7f4447800000-7f4447900000 rw-p 00000000 00:00 0 +7f4447a00000-7f4447b00000 rw-p 00000000 00:00 0 +7f4447c00000-7f4447d00000 rw-p 00000000 00:00 0 +7f4447e00000-7f4447f00000 rw-p 00000000 00:00 0 +7f4448000000-7f4448100000 rw-p 00000000 00:00 0 +7f4448200000-7f4448300000 rw-p 00000000 00:00 0 +7f4448400000-7f4448500000 rw-p 00000000 00:00 0 +7f4448600000-7f4448700000 rw-p 00000000 00:00 0 +7f4448800000-7f4448900000 rw-p 00000000 00:00 0 +7f4448a00000-7f4448b00000 rw-p 00000000 00:00 0 +7f4448c00000-7f4448d00000 rw-p 00000000 00:00 0 +7f4448e00000-7f4448f00000 rw-p 00000000 00:00 0 +7f4449000000-7f4449100000 rw-p 00000000 00:00 0 +7f4449200000-7f4449300000 rw-p 00000000 00:00 0 +7f4449400000-7f4449500000 rw-p 00000000 00:00 0 +7f4449600000-7f4449700000 rw-p 00000000 00:00 0 +7f4449800000-7f4449a00000 rw-p 00000000 00:00 0 +7f4449a00000-7f4449b00000 rw-p 00000000 00:00 0 +7f4449c00000-7f4449d00000 rw-p 00000000 00:00 0 +7f4449e00000-7f4449f00000 rw-p 00000000 00:00 0 +7f444a000000-7f444a100000 rw-p 00000000 00:00 0 +7f444a200000-7f444a300000 rw-p 00000000 00:00 0 +7f444a400000-7f444a500000 rw-p 00000000 00:00 0 +7f444a600000-7f444a700000 rw-p 00000000 00:00 0 +7f444a800000-7f444a900000 rw-p 00000000 00:00 0 +7f444aa00000-7f444ab00000 rw-p 00000000 00:00 0 +7f444ac00000-7f444ad00000 rw-p 00000000 00:00 0 +7f444ae00000-7f444af00000 rw-p 00000000 00:00 0 +7f444b000000-7f444b100000 rw-p 00000000 00:00 0 +7f444b200000-7f444b300000 rw-p 00000000 00:00 0 +7f444b400000-7f444b500000 rw-p 00000000 00:00 0 +7f444b600000-7f444b700000 rw-p 00000000 00:00 0 +7f444b800000-7f444b900000 rw-p 00000000 00:00 0 +7f444ba00000-7f444bb00000 rw-p 00000000 00:00 0 +7f444bc00000-7f444bd00000 rw-p 00000000 00:00 0 +7f444be00000-7f444bf00000 rw-p 00000000 00:00 0 +7f444c000000-7f444c100000 rw-p 00000000 00:00 0 +7f444c200000-7f444c300000 rw-p 00000000 00:00 0 +7f444c400000-7f444c500000 rw-p 00000000 00:00 0 +7f444c600000-7f444c700000 rw-p 00000000 00:00 0 +7f444c800000-7f444c900000 rw-p 00000000 00:00 0 +7f444ca00000-7f444cb00000 rw-p 00000000 00:00 0 +7f444cc00000-7f444cd00000 rw-p 00000000 00:00 0 +7f444ce00000-7f444cf00000 rw-p 00000000 00:00 0 +7f444d000000-7f444d100000 rw-p 00000000 00:00 0 +7f444d200000-7f444d300000 rw-p 00000000 00:00 0 +7f444d400000-7f444d500000 rw-p 00000000 00:00 0 +7f444d600000-7f444d700000 rw-p 00000000 00:00 0 +7f444d800000-7f444d900000 rw-p 00000000 00:00 0 +7f444da00000-7f444db00000 rw-p 00000000 00:00 0 +7f444dc00000-7f444dd00000 rw-p 00000000 00:00 0 +7f444de00000-7f444df00000 rw-p 00000000 00:00 0 +7f444e000000-7f444e100000 rw-p 00000000 00:00 0 +7f444e200000-7f444e300000 rw-p 00000000 00:00 0 +7f444e400000-7f444e500000 rw-p 00000000 00:00 0 +7f444e600000-7f444e700000 rw-p 00000000 00:00 0 +7f444e800000-7f444e900000 rw-p 00000000 00:00 0 +7f444ea00000-7f444eb00000 rw-p 00000000 00:00 0 +7f444ec00000-7f444ed00000 rw-p 00000000 00:00 0 +7f444ee00000-7f444ef00000 rw-p 00000000 00:00 0 +7f444f000000-7f444f200000 rw-p 00000000 00:00 0 +7f444f200000-7f444f300000 rw-p 00000000 00:00 0 +7f444f400000-7f444f500000 rw-p 00000000 00:00 0 +7f444f600000-7f444f700000 rw-p 00000000 00:00 0 +7f444f800000-7f444f900000 rw-p 00000000 00:00 0 +7f444fa00000-7f444fb00000 rw-p 00000000 00:00 0 +7f444fc00000-7f444fd00000 rw-p 00000000 00:00 0 +7f444fe00000-7f444ff00000 rw-p 00000000 00:00 0 +7f4450000000-7f4450100000 rw-p 00000000 00:00 0 +7f4450200000-7f4450300000 rw-p 00000000 00:00 0 +7f4450400000-7f4450500000 rw-p 00000000 00:00 0 +7f4450600000-7f4450700000 rw-p 00000000 00:00 0 +7f4450800000-7f4450900000 rw-p 00000000 00:00 0 +7f4450a00000-7f4450b00000 rw-p 00000000 00:00 0 +7f4450c00000-7f4450d00000 rw-p 00000000 00:00 0 +7f4450e00000-7f4450f00000 rw-p 00000000 00:00 0 +7f4451000000-7f4451100000 rw-p 00000000 00:00 0 +7f4451200000-7f4451300000 rw-p 00000000 00:00 0 +7f4451400000-7f4451500000 rw-p 00000000 00:00 0 +7f4451600000-7f4451700000 rw-p 00000000 00:00 0 +7f4451800000-7f4451900000 rw-p 00000000 00:00 0 +7f4451a00000-7f4451b00000 rw-p 00000000 00:00 0 +7f4451c00000-7f4451d00000 rw-p 00000000 00:00 0 +7f4451e00000-7f4452000000 rw-p 00000000 00:00 0 +7f4452000000-7f4452100000 rw-p 00000000 00:00 0 +7f4452200000-7f4452300000 rw-p 00000000 00:00 0 +7f4452400000-7f4452500000 rw-p 00000000 00:00 0 +7f4452600000-7f4452700000 rw-p 00000000 00:00 0 +7f4452800000-7f4452900000 rw-p 00000000 00:00 0 +7f4452a00000-7f4452b00000 rw-p 00000000 00:00 0 +7f4452c00000-7f4452d00000 rw-p 00000000 00:00 0 +7f4452e00000-7f4452f00000 rw-p 00000000 00:00 0 +7f4453000000-7f4453100000 rw-p 00000000 00:00 0 +7f4453200000-7f4453300000 rw-p 00000000 00:00 0 +7f4453400000-7f4453500000 rw-p 00000000 00:00 0 +7f4453600000-7f4453700000 rw-p 00000000 00:00 0 +7f4453800000-7f4453900000 rw-p 00000000 00:00 0 +7f4453a00000-7f4453b00000 rw-p 00000000 00:00 0 +7f4453c00000-7f4453d00000 rw-p 00000000 00:00 0 +7f4453e00000-7f4453f00000 rw-p 00000000 00:00 0 +7f4454000000-7f4454100000 rw-p 00000000 00:00 0 +7f4454200000-7f4454300000 rw-p 00000000 00:00 0 +7f4454400000-7f4454500000 rw-p 00000000 00:00 0 +7f4454600000-7f4454700000 rw-p 00000000 00:00 0 +7f4454800000-7f4454900000 rw-p 00000000 00:00 0 +7f4454a00000-7f4454b00000 rw-p 00000000 00:00 0 +7f4454c00000-7f4454d00000 rw-p 00000000 00:00 0 +7f4454e00000-7f4454f00000 rw-p 00000000 00:00 0 +7f4455000000-7f4455100000 rw-p 00000000 00:00 0 +7f4455200000-7f4455300000 rw-p 00000000 00:00 0 +7f4455400000-7f4455500000 rw-p 00000000 00:00 0 +7f4455600000-7f4455700000 rw-p 00000000 00:00 0 +7f4455800000-7f4455900000 rw-p 00000000 00:00 0 +7f4455a00000-7f4455b00000 rw-p 00000000 00:00 0 +7f4455c00000-7f4455d00000 rw-p 00000000 00:00 0 +7f4455e00000-7f4455f00000 rw-p 00000000 00:00 0 +7f4456000000-7f4456100000 rw-p 00000000 00:00 0 +7f4456200000-7f4456300000 rw-p 00000000 00:00 0 +7f4456400000-7f4456500000 rw-p 00000000 00:00 0 +7f4456600000-7f4456700000 rw-p 00000000 00:00 0 +7f4456800000-7f4456900000 rw-p 00000000 00:00 0 +7f4456a00000-7f4456b00000 rw-p 00000000 00:00 0 +7f4456c00000-7f4456d00000 rw-p 00000000 00:00 0 +7f4456e00000-7f4456f00000 rw-p 00000000 00:00 0 +7f4457000000-7f4457100000 rw-p 00000000 00:00 0 +7f4457200000-7f4457300000 rw-p 00000000 00:00 0 +7f4457400000-7f4457500000 rw-p 00000000 00:00 0 +7f4457600000-7f4457700000 rw-p 00000000 00:00 0 +7f4457800000-7f4457900000 rw-p 00000000 00:00 0 +7f4457a00000-7f4457b00000 rw-p 00000000 00:00 0 +7f4457c00000-7f4457e00000 rw-p 00000000 00:00 0 +7f4457e00000-7f4457f00000 rw-p 00000000 00:00 0 +7f4458000000-7f4458021000 rw-p 00000000 00:00 0 +7f4458021000-7f445c000000 ---p 00000000 00:00 0 +7f445c100000-7f445c200000 rw-p 00000000 00:00 0 +7f445c300000-7f445c400000 rw-p 00000000 00:00 0 +7f445c500000-7f445c600000 rw-p 00000000 00:00 0 +7f445c700000-7f445c800000 rw-p 00000000 00:00 0 +7f445c900000-7f445ca00000 rw-p 00000000 00:00 0 +7f445cb00000-7f445cc00000 rw-p 00000000 00:00 0 +7f445cd00000-7f445ce00000 rw-p 00000000 00:00 0 +7f445cf00000-7f445d000000 rw-p 00000000 00:00 0 +7f445d100000-7f445d200000 rw-p 00000000 00:00 0 +7f445d300000-7f445d400000 rw-p 00000000 00:00 0 +7f445d4ff000-7f445d502000 ---p 00000000 00:00 0 +7f445d502000-7f445d700000 rw-p 00000000 00:00 0 +7f445d800000-7f445d900000 rw-p 00000000 00:00 0 +7f445da00000-7f445db00000 rw-p 00000000 00:00 0 +7f445dc00000-7f445dd00000 rw-p 00000000 00:00 0 +7f445de00000-7f445df00000 rw-p 00000000 00:00 0 +7f445e000000-7f445e100000 rw-p 00000000 00:00 0 +7f445e200000-7f445e300000 rw-p 00000000 00:00 0 +7f445e400000-7f445e500000 rw-p 00000000 00:00 0 +7f445e600000-7f445e700000 rw-p 00000000 00:00 0 +7f445e800000-7f445e900000 rw-p 00000000 00:00 0 +7f445ea00000-7f445eb00000 rw-p 00000000 00:00 0 +7f445ec00000-7f445ed00000 rw-p 00000000 00:00 0 +7f445ee00000-7f445ef00000 rw-p 00000000 00:00 0 +7f445f000000-7f445f100000 rw-p 00000000 00:00 0 +7f445f200000-7f445f300000 rw-p 00000000 00:00 0 +7f445f400000-7f445f500000 rw-p 00000000 00:00 0 +7f445f600000-7f445f700000 rw-p 00000000 00:00 0 +7f445f800000-7f445f900000 rw-p 00000000 00:00 0 +7f445fa00000-7f445fb00000 rw-p 00000000 00:00 0 +7f445fc00000-7f445fd00000 rw-p 00000000 00:00 0 +7f445fe00000-7f445ff00000 rw-p 00000000 00:00 0 +7f4460000000-7f4460100000 rw-p 00000000 00:00 0 +7f4460200000-7f4460300000 rw-p 00000000 00:00 0 +7f4460400000-7f4460500000 rw-p 00000000 00:00 0 +7f4460600000-7f4460700000 rw-p 00000000 00:00 0 +7f4460800000-7f4460a00000 rw-p 00000000 00:00 0 +7f4460a00000-7f4460b00000 rw-p 00000000 00:00 0 +7f4460c00000-7f4460d00000 rw-p 00000000 00:00 0 +7f4460e00000-7f4460f00000 rw-p 00000000 00:00 0 +7f4461000000-7f4461100000 rw-p 00000000 00:00 0 +7f4461200000-7f4461300000 rw-p 00000000 00:00 0 +7f4461400000-7f4461500000 rw-p 00000000 00:00 0 +7f4461600000-7f4461700000 rw-p 00000000 00:00 0 +7f4461800000-7f4461900000 rw-p 00000000 00:00 0 +7f4461a00000-7f4461b00000 rw-p 00000000 00:00 0 +7f4461c00000-7f4461d00000 rw-p 00000000 00:00 0 +7f4461e00000-7f4461f00000 rw-p 00000000 00:00 0 +7f4462000000-7f4462100000 rw-p 00000000 00:00 0 +7f4462200000-7f4462300000 rw-p 00000000 00:00 0 +7f4462400000-7f4462500000 rw-p 00000000 00:00 0 +7f4462600000-7f4462700000 rw-p 00000000 00:00 0 +7f4462800000-7f4462900000 rw-p 00000000 00:00 0 +7f4462a00000-7f4462b00000 rw-p 00000000 00:00 0 +7f4462c00000-7f4462d00000 rw-p 00000000 00:00 0 +7f4462e00000-7f4463000000 rw-p 00000000 00:00 0 +7f4463000000-7f4463100000 rw-p 00000000 00:00 0 +7f4463200000-7f4463300000 rw-p 00000000 00:00 0 +7f4463400000-7f4463500000 rw-p 00000000 00:00 0 +7f4463600000-7f4463700000 rw-p 00000000 00:00 0 +7f4463800000-7f4463900000 rw-p 00000000 00:00 0 +7f4463a00000-7f4463b00000 rw-p 00000000 00:00 0 +7f4463c00000-7f4463d00000 rw-p 00000000 00:00 0 +7f4463e00000-7f4463f00000 rw-p 00000000 00:00 0 +7f4464000000-7f4464021000 rw-p 00000000 00:00 0 +7f4464021000-7f4468000000 ---p 00000000 00:00 0 +7f4468000000-7f4468100000 rw-p 00000000 00:00 0 +7f4468200000-7f4468300000 rw-p 00000000 00:00 0 +7f4468400000-7f4468500000 rw-p 00000000 00:00 0 +7f4468600000-7f4468700000 rw-p 00000000 00:00 0 +7f4468800000-7f4468900000 rw-p 00000000 00:00 0 +7f4468a00000-7f4468b00000 rw-p 00000000 00:00 0 +7f4468c00000-7f4468d00000 rw-p 00000000 00:00 0 +7f4468e00000-7f4468f00000 rw-p 00000000 00:00 0 +7f4469000000-7f4469100000 rw-p 00000000 00:00 0 +7f4469200000-7f4469300000 rw-p 00000000 00:00 0 +7f4469400000-7f4469500000 rw-p 00000000 00:00 0 +7f4469600000-7f4469700000 rw-p 00000000 00:00 0 +7f4469800000-7f4469900000 rw-p 00000000 00:00 0 +7f4469a00000-7f4469b00000 rw-p 00000000 00:00 0 +7f4469c00000-7f4469d00000 rw-p 00000000 00:00 0 +7f4469e00000-7f4469f00000 rw-p 00000000 00:00 0 +7f446a000000-7f446a100000 rw-p 00000000 00:00 0 +7f446a200000-7f446a300000 rw-p 00000000 00:00 0 +7f446a400000-7f446a500000 rw-p 00000000 00:00 0 +7f446a600000-7f446a700000 rw-p 00000000 00:00 0 +7f446a800000-7f446a900000 rw-p 00000000 00:00 0 +7f446aa00000-7f446ab00000 rw-p 00000000 00:00 0 +7f446ac00000-7f446ad00000 rw-p 00000000 00:00 0 +7f446ae00000-7f446af00000 rw-p 00000000 00:00 0 +7f446b000000-7f446b100000 rw-p 00000000 00:00 0 +7f446b200000-7f446b300000 rw-p 00000000 00:00 0 +7f446b400000-7f446b500000 rw-p 00000000 00:00 0 +7f446b600000-7f446b700000 rw-p 00000000 00:00 0 +7f446b800000-7f446b900000 rw-p 00000000 00:00 0 +7f446ba00000-7f446bb00000 rw-p 00000000 00:00 0 +7f446bc00000-7f446bd00000 rw-p 00000000 00:00 0 +7f446be00000-7f446bf00000 rw-p 00000000 00:00 0 +7f446c000000-7f446c021000 rw-p 00000000 00:00 0 +7f446c021000-7f4470000000 ---p 00000000 00:00 0 +7f4470000000-7f4470021000 rw-p 00000000 00:00 0 +7f4470021000-7f4474000000 ---p 00000000 00:00 0 +7f4474000000-7f4474155000 rw-p 00000000 00:00 0 +7f4474155000-7f4478000000 ---p 00000000 00:00 0 +7f4478000000-7f4479c7a000 rw-p 00000000 00:00 0 +7f4479c7a000-7f447c000000 ---p 00000000 00:00 0 +7f447c000000-7f447c2f7000 rw-p 00000000 00:00 0 +7f447c2f7000-7f4480000000 ---p 00000000 00:00 0 +7f4480000000-7f44800de000 rw-p 00000000 00:00 0 +7f44800de000-7f4484000000 ---p 00000000 00:00 0 +7f4484000000-7f4484021000 rw-p 00000000 00:00 0 +7f4484021000-7f4488000000 ---p 00000000 00:00 0 +7f4488100000-7f4488200000 rw-p 00000000 00:00 0 +7f4488300000-7f4488400000 rw-p 00000000 00:00 0 +7f4488500000-7f4488600000 rw-p 00000000 00:00 0 +7f4488700000-7f4488800000 rw-p 00000000 00:00 0 +7f4488900000-7f4488a00000 rw-p 00000000 00:00 0 +7f4488b00000-7f4488c00000 rw-p 00000000 00:00 0 +7f4488d00000-7f4488e00000 rw-p 00000000 00:00 0 +7f4488f00000-7f4489000000 rw-p 00000000 00:00 0 +7f4489100000-7f4489200000 rw-p 00000000 00:00 0 +7f4489300000-7f4489400000 rw-p 00000000 00:00 0 +7f4489500000-7f4489600000 rw-p 00000000 00:00 0 +7f4489700000-7f4489800000 rw-p 00000000 00:00 0 +7f4489900000-7f4489a00000 rw-p 00000000 00:00 0 +7f4489ad6000-7f4490000000 r--p 00000000 08:04 3820473 /usr/lib/locale/locale-archive +7f4490000000-7f4490021000 rw-p 00000000 00:00 0 +7f4490021000-7f4494000000 ---p 00000000 00:00 0 +7f4494000000-7f4494021000 rw-p 00000000 00:00 0 +7f4494021000-7f4498000000 ---p 00000000 00:00 0 +7f4498000000-7f4498021000 rw-p 00000000 00:00 0 +7f4498021000-7f449c000000 ---p 00000000 00:00 0 +7f449c100000-7f449c200000 rw-p 00000000 00:00 0 +7f449c300000-7f449c400000 rw-p 00000000 00:00 0 +7f449c500000-7f449c600000 rw-p 00000000 00:00 0 +7f449c660000-7f44ac000000 rw-p 00000000 00:00 0 +7f44ac000000-7f44ac021000 rw-p 00000000 00:00 0 +7f44ac021000-7f44b0000000 ---p 00000000 00:00 0 +7f44b0000000-7f44b0021000 rw-p 00000000 00:00 0 +7f44b0021000-7f44b4000000 ---p 00000000 00:00 0 +7f44b4000000-7f44b4021000 rw-p 00000000 00:00 0 +7f44b4021000-7f44b8000000 ---p 00000000 00:00 0 +7f44b8000000-7f44b8100000 rw-s 00000000 00:04 1281123 /dev/zero (deleted) +7f44b8100000-7f44b8200000 rw-p 00000000 00:00 0 +7f44b82ff000-7f44b8302000 ---p 00000000 00:00 0 +7f44b8302000-7f44b8500000 rw-p 00000000 00:00 0 +7f44b8502000-7f44b8523000 r--s 00000000 08:04 3811338 /usr/share/mime/mime.cache +7f44b8523000-7f44b858f000 r--s 0101a000 08:03 82448015 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/graaljs.jar +7f44b858f000-7f44b8600000 r--s 00bc1000 08:03 82448016 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/icu4j.jar +7f44b8600000-7f44b8700000 rw-p 00000000 00:00 0 +7f44b870e000-7f44b870f000 rw-p 00000000 00:00 0 +7f44b870f000-7f44b8710000 r--p 00000000 00:00 0 +7f44b8710000-7f44b8711000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8711000-7f44b8712000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8712000-7f44b8713000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8713000-7f44b8714000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8714000-7f44b8715000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8715000-7f44b8716000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8716000-7f44b8717000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8717000-7f44b8718000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8718000-7f44b8800000 r--s 01c58000 08:03 85329268 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/python/graalpython.jar +7f44b8800000-7f44b8900000 rw-p 00000000 00:00 0 +7f44b8900000-7f44b8901000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8901000-7f44b8902000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8902000-7f44b896b000 r--s 00bdc000 08:03 85328286 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/llvm/sulong.jar +7f44b896b000-7f44b89d6000 r--s 00fc8000 08:03 85328376 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci/graal.jar +7f44b89d6000-7f44b89ed000 r-xp 00000000 08:03 85328739 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnet.so +7f44b89ed000-7f44b8bec000 ---p 00017000 08:03 85328739 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnet.so +7f44b8bec000-7f44b8bed000 r--p 00016000 08:03 85328739 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnet.so +7f44b8bed000-7f44b8bee000 rw-p 00017000 08:03 85328739 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnet.so +7f44b8bee000-7f44b8bff000 r-xp 00000000 08:03 85328746 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnio.so +7f44b8bff000-7f44b8dfe000 ---p 00011000 08:03 85328746 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnio.so +7f44b8dfe000-7f44b8dff000 r--p 00010000 08:03 85328746 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnio.so +7f44b8dff000-7f44b8e00000 rw-p 00011000 08:03 85328746 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnio.so +7f44b8e00000-7f44b8f00000 rw-p 00000000 00:00 0 +7f44b8f00000-7f44b8f01000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8f01000-7f44b8f02000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8f02000-7f44b8f03000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8f03000-7f44b8f04000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8f04000-7f44b8f05000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8f05000-7f44b8f06000 rw-s 00000000 00:05 31275 /dev/nvidiactl +7f44b8f06000-7f44b8f0d000 r--s 00000000 08:04 3805103 /usr/lib64/gconv/gconv-modules.cache +7f44b8f0d000-7f44b8f0e000 r--s 00010000 08:03 85328726 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/ext/zipfs.jar +7f44b8f0e000-7f44b8f12000 r--s 00059000 08:03 85328471 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/profiler/truffle-profiler.jar +7f44b8f12000-7f44b8f19000 r--s 000f0000 08:03 85328468 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/lsp/lsp.jar +7f44b8f19000-7f44b8f23000 r--s 000d4000 08:03 85328461 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/chromeinspector/chromeinspector.jar +7f44b8f23000-7f44b8f4b000 r--s 004f1000 08:03 85328454 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/truffle/truffle-api.jar +7f44b8f4b000-7f44b8f7c000 rw-p 00000000 00:00 0 +7f44b8f7c000-7f44b8f91000 r-xp 00000000 08:04 3543191 /usr/lib64/libz.so.1.2.7 +7f44b8f91000-7f44b9190000 ---p 00015000 08:04 3543191 /usr/lib64/libz.so.1.2.7 +7f44b9190000-7f44b9191000 r--p 00014000 08:04 3543191 /usr/lib64/libz.so.1.2.7 +7f44b9191000-7f44b9192000 rw-p 00015000 08:04 3543191 /usr/lib64/libz.so.1.2.7 +7f44b9192000-7f44bacef000 r-xp 00000000 08:03 85328354 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjvmcicompiler.so +7f44bacef000-7f44baeef000 rw-p 01b5d000 08:03 85328354 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjvmcicompiler.so +7f44baeef000-7f44baef3000 r-xp 01d5d000 08:03 85328354 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjvmcicompiler.so +7f44baef3000-7f44bb0f2000 ---p 01d61000 08:03 85328354 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjvmcicompiler.so +7f44bb0f2000-7f44bb0f5000 rw-p 01d60000 08:03 85328354 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjvmcicompiler.so +7f44bb0f5000-7f44bb0f6000 ---p 00000000 00:00 0 +7f44bb0f6000-7f44bb1f6000 rw-p 00000000 00:00 0 +7f44bb1f6000-7f44bb1f9000 ---p 00000000 00:00 0 +7f44bb1f9000-7f44bb2f7000 rw-p 00000000 00:00 0 +7f44bb2f7000-7f44bb2fb000 ---p 00000000 00:00 0 +7f44bb2fb000-7f44bb4f8000 rw-p 00000000 00:00 0 +7f44bb4f8000-7f44bb4fc000 ---p 00000000 00:00 0 +7f44bb4fc000-7f44bb6f9000 rw-p 00000000 00:00 0 +7f44bb6f9000-7f44bb6fd000 ---p 00000000 00:00 0 +7f44bb6fd000-7f44bb8fa000 rw-p 00000000 00:00 0 +7f44bb8fa000-7f44bb8fe000 ---p 00000000 00:00 0 +7f44bb8fe000-7f44bbafb000 rw-p 00000000 00:00 0 +7f44bbafb000-7f44bbafe000 ---p 00000000 00:00 0 +7f44bbafe000-7f44bbbfc000 rw-p 00000000 00:00 0 +7f44bbbfc000-7f44bbbff000 ---p 00000000 00:00 0 +7f44bbbff000-7f44bbcfd000 rw-p 00000000 00:00 0 +7f44bbcfd000-7f44bbd00000 ---p 00000000 00:00 0 +7f44bbd00000-7f44bbdfe000 rw-p 00000000 00:00 0 +7f44bbdfe000-7f44bbdff000 ---p 00000000 00:00 0 +7f44bbdff000-7f44bc000000 rw-p 00000000 00:00 0 +7f44bc000000-7f44bc021000 rw-p 00000000 00:00 0 +7f44bc021000-7f44c0000000 ---p 00000000 00:00 0 +7f44c0000000-7f44c0021000 rw-p 00000000 00:00 0 +7f44c0021000-7f44c4000000 ---p 00000000 00:00 0 +7f44c4000000-7f44c4021000 rw-p 00000000 00:00 0 +7f44c4021000-7f44c8000000 ---p 00000000 00:00 0 +7f44c8000000-7f44c8021000 rw-p 00000000 00:00 0 +7f44c8021000-7f44cc000000 ---p 00000000 00:00 0 +7f44cc000000-7f44cc021000 rw-p 00000000 00:00 0 +7f44cc021000-7f44d0000000 ---p 00000000 00:00 0 +7f44d0000000-7f44d0003000 r--s 00026000 08:03 85328458 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/agentscript/agentscript.jar +7f44d0003000-7f44d0006000 r--s 00027000 08:03 85328464 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/coverage/truffle-coverage.jar +7f44d0006000-7f44d0008000 r--s 00007000 08:03 82448019 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/asm-analysis-7.1.jar +7f44d0008000-7f44d000a000 r--s 00010000 08:03 82448020 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/asm-commons-7.1.jar +7f44d000a000-7f44d000c000 r--s 0001b000 08:03 82448017 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/asm-7.1.jar +7f44d000c000-7f44d000e000 r--s 0000b000 08:03 82448018 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/asm-tree-7.1.jar +7f44d000e000-7f44d0012000 r--s 0007d000 08:03 82445437 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/trufflenode.jar +7f44d0012000-7f44d0023000 r--s 00165000 08:03 85590076 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/grcuda/grcuda.jar +7f44d0023000-7f44d1bc4000 rw-p 00000000 00:00 0 +7f44d1bc4000-7f44d1d93000 r--s 03c60000 08:03 85328781 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/rt.jar +7f44d1d93000-7f44d2664000 rw-p 00000000 00:00 0 +7f44d2664000-7f44d36d4000 rw-p 00000000 00:00 0 +7f44d36d4000-7f44d4065000 ---p 00000000 00:00 0 +7f44d4065000-7f44d413b000 rw-p 00000000 00:00 0 +7f44d413b000-7f44d4acb000 ---p 00000000 00:00 0 +7f44d4acb000-7f44d4b2a000 rw-p 00000000 00:00 0 +7f44d4b2a000-7f44d4fff000 ---p 00000000 00:00 0 +7f44d4fff000-7f44d5000000 rw-p 00000000 00:00 0 +7f44d5000000-7f44d66d0000 rwxp 00000000 00:00 0 +7f44d66d0000-7f44e4000000 ---p 00000000 00:00 0 +7f44e4000000-7f44e60cd000 rw-p 00000000 00:00 0 +7f44e60cd000-7f44e8000000 ---p 00000000 00:00 0 +7f44e8000000-7f44e8001000 r--s 0000a000 08:03 85328467 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/lsp/lsp-api.jar +7f44e8001000-7f44e8010000 r--s 0022a000 08:03 85328343 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/regex/tregex.jar +7f44e8010000-7f44e8031000 rw-p 00000000 00:00 0 +7f44e8031000-7f44e8032000 ---p 00000000 00:00 0 +7f44e8032000-7f44e8132000 rw-p 00000000 00:00 0 +7f44e8132000-7f44e8133000 ---p 00000000 00:00 0 +7f44e8133000-7f44e8233000 rw-p 00000000 00:00 0 +7f44e8233000-7f44e8234000 ---p 00000000 00:00 0 +7f44e8234000-7f44e8334000 rw-p 00000000 00:00 0 +7f44e8334000-7f44e8335000 ---p 00000000 00:00 0 +7f44e8335000-7f44e8435000 rw-p 00000000 00:00 0 +7f44e8435000-7f44e8436000 ---p 00000000 00:00 0 +7f44e8436000-7f44e8536000 rw-p 00000000 00:00 0 +7f44e8536000-7f44e8537000 ---p 00000000 00:00 0 +7f44e8537000-7f44e8637000 rw-p 00000000 00:00 0 +7f44e8637000-7f44e8638000 ---p 00000000 00:00 0 +7f44e8638000-7f44e8738000 rw-p 00000000 00:00 0 +7f44e8738000-7f44e8739000 ---p 00000000 00:00 0 +7f44e8739000-7f44e8895000 rw-p 00000000 00:00 0 +7f44e8895000-7f44e8bf9000 ---p 00000000 00:00 0 +7f44e8bf9000-7f44e8c14000 r-xp 00000000 08:03 85328749 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libzip.so +7f44e8c14000-7f44e8e14000 ---p 0001b000 08:03 85328749 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libzip.so +7f44e8e14000-7f44e8e15000 r--p 0001b000 08:03 85328749 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libzip.so +7f44e8e15000-7f44e8e16000 rw-p 0001c000 08:03 85328749 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libzip.so +7f44e8e16000-7f44e8e22000 r-xp 00000000 08:04 3552420 /usr/lib64/libnss_ldap.so.2 +7f44e8e22000-7f44e9021000 ---p 0000c000 08:04 3552420 /usr/lib64/libnss_ldap.so.2 +7f44e9021000-7f44e9022000 r--p 0000b000 08:04 3552420 /usr/lib64/libnss_ldap.so.2 +7f44e9022000-7f44e9023000 rw-p 0000c000 08:04 3552420 /usr/lib64/libnss_ldap.so.2 +7f44e9023000-7f44e902b000 r-xp 00000000 08:04 3551687 /usr/lib64/libnss_sss.so.2 +7f44e902b000-7f44e922a000 ---p 00008000 08:04 3551687 /usr/lib64/libnss_sss.so.2 +7f44e922a000-7f44e922b000 r--p 00007000 08:04 3551687 /usr/lib64/libnss_sss.so.2 +7f44e922b000-7f44e922c000 rw-p 00008000 08:04 3551687 /usr/lib64/libnss_sss.so.2 +7f44e922c000-7f44e9238000 r-xp 00000000 08:04 3542623 /usr/lib64/libnss_files-2.17.so +7f44e9238000-7f44e9437000 ---p 0000c000 08:04 3542623 /usr/lib64/libnss_files-2.17.so +7f44e9437000-7f44e9438000 r--p 0000b000 08:04 3542623 /usr/lib64/libnss_files-2.17.so +7f44e9438000-7f44e9439000 rw-p 0000c000 08:04 3542623 /usr/lib64/libnss_files-2.17.so +7f44e9439000-7f44e943f000 rw-p 00000000 00:00 0 +7f44e943f000-7f44e9467000 r-xp 00000000 08:03 85328775 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjava.so +7f44e9467000-7f44e9666000 ---p 00028000 08:03 85328775 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjava.so +7f44e9666000-7f44e9667000 r--p 00027000 08:03 85328775 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjava.so +7f44e9667000-7f44e9669000 rw-p 00028000 08:03 85328775 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjava.so +7f44e9669000-7f44e9678000 r-xp 00000000 08:03 85328763 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libverify.so +7f44e9678000-7f44e9877000 ---p 0000f000 08:03 85328763 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libverify.so +7f44e9877000-7f44e9879000 r--p 0000e000 08:03 85328763 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libverify.so +7f44e9879000-7f44e987a000 rw-p 00010000 08:03 85328763 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libverify.so +7f44e987a000-7f44e9881000 r-xp 00000000 08:04 3542720 /usr/lib64/librt-2.17.so +7f44e9881000-7f44e9a80000 ---p 00007000 08:04 3542720 /usr/lib64/librt-2.17.so +7f44e9a80000-7f44e9a81000 r--p 00006000 08:04 3542720 /usr/lib64/librt-2.17.so +7f44e9a81000-7f44e9a82000 rw-p 00007000 08:04 3542720 /usr/lib64/librt-2.17.so +7f44e9a82000-7f44e9b83000 r-xp 00000000 08:04 3542599 /usr/lib64/libm-2.17.so +7f44e9b83000-7f44e9d82000 ---p 00101000 08:04 3542599 /usr/lib64/libm-2.17.so +7f44e9d82000-7f44e9d83000 r--p 00100000 08:04 3542599 /usr/lib64/libm-2.17.so +7f44e9d83000-7f44e9d84000 rw-p 00101000 08:04 3542599 /usr/lib64/libm-2.17.so +7f44e9d84000-7f44eaae7000 r-xp 00000000 08:03 85328771 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/server/libjvm.so +7f44eaae7000-7f44eace6000 ---p 00d63000 08:03 85328771 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/server/libjvm.so +7f44eace6000-7f44eadaf000 rw-p 00d62000 08:03 85328771 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/server/libjvm.so +7f44eadaf000-7f44eade1000 rw-p 00000000 00:00 0 +7f44eade1000-7f44eafa3000 r-xp 00000000 08:04 3539525 /usr/lib64/libc-2.17.so +7f44eafa3000-7f44eb1a3000 ---p 001c2000 08:04 3539525 /usr/lib64/libc-2.17.so +7f44eb1a3000-7f44eb1a7000 r--p 001c2000 08:04 3539525 /usr/lib64/libc-2.17.so +7f44eb1a7000-7f44eb1a9000 rw-p 001c6000 08:04 3539525 /usr/lib64/libc-2.17.so +7f44eb1a9000-7f44eb1ae000 rw-p 00000000 00:00 0 +7f44eb1ae000-7f44eb1b0000 r-xp 00000000 08:04 3542593 /usr/lib64/libdl-2.17.so +7f44eb1b0000-7f44eb3b0000 ---p 00002000 08:04 3542593 /usr/lib64/libdl-2.17.so +7f44eb3b0000-7f44eb3b1000 r--p 00002000 08:04 3542593 /usr/lib64/libdl-2.17.so +7f44eb3b1000-7f44eb3b2000 rw-p 00003000 08:04 3542593 /usr/lib64/libdl-2.17.so +7f44eb3b2000-7f44eb3c8000 r-xp 00000000 08:03 85328806 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/amd64/jli/libjli.so +7f44eb3c8000-7f44eb5c7000 ---p 00016000 08:03 85328806 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/amd64/jli/libjli.so +7f44eb5c7000-7f44eb5c8000 r--p 00015000 08:03 85328806 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/amd64/jli/libjli.so +7f44eb5c8000-7f44eb5c9000 rw-p 00016000 08:03 85328806 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/amd64/jli/libjli.so +7f44eb5c9000-7f44eb5e0000 r-xp 00000000 08:04 3539551 /usr/lib64/libpthread-2.17.so +7f44eb5e0000-7f44eb7df000 ---p 00017000 08:04 3539551 /usr/lib64/libpthread-2.17.so +7f44eb7df000-7f44eb7e0000 r--p 00016000 08:04 3539551 /usr/lib64/libpthread-2.17.so +7f44eb7e0000-7f44eb7e1000 rw-p 00017000 08:04 3539551 /usr/lib64/libpthread-2.17.so +7f44eb7e1000-7f44eb7e5000 rw-p 00000000 00:00 0 +7f44eb7e5000-7f44eb807000 r-xp 00000000 08:04 3539518 /usr/lib64/ld-2.17.so +7f44eb807000-7f44eb808000 r--s 00013000 08:03 82448021 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/asm-util-7.1.jar +7f44eb808000-7f44eb80a000 r--s 00012000 08:03 85328287 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/llvm/sulong-api.jar +7f44eb80a000-7f44eb814000 r--s 000d5000 08:03 85328340 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/nfi/truffle-nfi.jar +7f44eb814000-7f44eb815000 r--s 00000000 08:03 85328378 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci/graal-truffle-jfr-impl.jar +7f44eb815000-7f44eb8da000 rw-p 00000000 00:00 0 +7f44eb8da000-7f44eb8de000 ---p 00000000 00:00 0 +7f44eb8de000-7f44eb9df000 rw-p 00000000 00:00 0 +7f44eb9df000-7f44eb9e0000 r--s 00005000 08:03 85328377 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci/graal-management.jar +7f44eb9e0000-7f44eb9e5000 r--s 0008a000 08:03 85328797 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci/jvmci-hotspot.jar +7f44eb9e5000-7f44eb9e9000 r--s 0004e000 08:03 85328799 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci/jvmci-api.jar +7f44eb9e9000-7f44eb9ea000 r--s 00002000 08:03 85328455 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/truffle/locator.jar +7f44eb9ea000-7f44eb9eb000 r--s 00015000 08:03 85329265 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar +7f44eb9eb000-7f44eb9f0000 r--s 0005e000 08:03 82445046 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar +7f44eb9f0000-7f44eb9f8000 r--s 0007c000 08:03 85328357 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/boot/graal-sdk.jar +7f44eb9f8000-7f44eb9fa000 r--s 0000d000 08:03 85328356 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/boot/graaljs-scriptengine.jar +7f44eb9fa000-7f44eb9fb000 r--s 00005000 08:03 85328733 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci-services.jar +7f44eb9fb000-7f44eba03000 rw-s 00000000 08:04 4587582 /tmp/hsperfdata_alberto.parravicini/18546 +7f44eba03000-7f44eba04000 rw-p 00000000 00:00 0 +7f44eba04000-7f44eba05000 r--p 00000000 00:00 0 +7f44eba05000-7f44eba06000 rw-p 00000000 00:00 0 +7f44eba06000-7f44eba07000 r--p 00021000 08:04 3539518 /usr/lib64/ld-2.17.so +7f44eba07000-7f44eba08000 rw-p 00022000 08:04 3539518 /usr/lib64/ld-2.17.so +7f44eba08000-7f44eba09000 rw-p 00000000 00:00 0 +7ffd13234000-7ffd13256000 rw-p 00000000 00:00 0 [stack] +7ffd13267000-7ffd13269000 r-xp 00000000 00:00 0 [vdso] +ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] + +VM Arguments: +java_command: com.oracle.graal.python.shell.GraalPythonMain --polyglot --experimental-options --python.CoreHome=/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/python/lib-graalpython --python.StdLibHome=/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/python/lib-python/3 --python.SysPrefix=/home/users/alberto.parravicini/Documents/graalpython_venv --python.SysBasePrefix=/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/python --python.Executable=/home/users/alberto.parravicini/Documents/graalpython_venv/bin/graalpython --python.CAPI=/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/python/lib-graalpython --WithThread --WithJavaStacktrace --ExposeInternalSources pipeline_1.py +java_class_path (initial): /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar +Launcher Type: SUN_STANDARD + +Environment Variables: +JAVA_HOME=/home/users/alberto.parravicini/Documents/openjdk1.8.0_242-jvmci-20.0-b02 +PATH=/home/users/alberto.parravicini/Documents/graalpython_venv/bin:/home/users/alberto.parravicini/Documents/openjdk1.8.0_242-jvmci-20.0-b02/bin:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/bin:/home/users/alberto.parravicini/Documents/mx:/sbin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/home/users/alberto.parravicini/.local/bin:/home/users/alberto.parravicini/bin:/home/users/alberto.parravicini/.local/bin:/home/users/alberto.parravicini/bin:/home/users/alberto.parravicini/.local/bin:/home/users/alberto.parravicini/bin:/usr/local/cuda/bin +SHELL=/bin/bash +DISPLAY=:10.0 + +Signal Handlers: +SIGSEGV: [libjvm.so+0xb32a50], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGBUS: [libjvm.so+0xb32a50], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGFPE: [libjvm.so+0x96d500], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGPIPE: SIG_IGN, sa_mask[0]=00000000000010000000000000000000, sa_flags=SA_RESTART +SIGXFSZ: [libjvm.so+0x96d500], sa_mask[0]=00000000000000000000000010000000, sa_flags=SA_RESTART, flags was changed from 0x10000004, consider using jsig library +SIGILL: [libjvm.so+0x96d500], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGUSR1: SIG_DFL, sa_mask[0]=00000000000000000000000000000000, sa_flags=none +SIGUSR2: [libjvm.so+0x96d3d0], sa_mask[0]=00000000000000000000000000000000, sa_flags=SA_RESTART|SA_SIGINFO +SIGHUP: [libjvm.so+0x96d9f0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGINT: [libjvm.so+0x96d9f0], sa_mask[0]=01000000000000000000000000000000, sa_flags=SA_RESTART +SIGTERM: [libjvm.so+0x96d9f0], sa_mask[0]=00000000000000100000000000000000, sa_flags=SA_RESTART +SIGQUIT: [libjvm.so+0x96d9f0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO + + +--------------- S Y S T E M --------------- + +OS:CentOS Linux release 7.6.1810 (Core) + +uname:Linux 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 +libc:glibc 2.17 NPTL 2.17 +rlimit: STACK 8192k, CORE 0k, NPROC 4096, NOFILE 4096, AS infinity +load average:0.77 1.24 1.17 + +/proc/meminfo: +MemTotal: 32717756 kB +MemFree: 14446816 kB +MemAvailable: 28020604 kB +Buffers: 520744 kB +Cached: 12988316 kB +SwapCached: 0 kB +Active: 9380864 kB +Inactive: 7889240 kB +Active(anon): 3768312 kB +Inactive(anon): 65220 kB +Active(file): 5612552 kB +Inactive(file): 7824020 kB +Unevictable: 7908 kB +Mlocked: 7908 kB +SwapTotal: 16450556 kB +SwapFree: 16450556 kB +Dirty: 5948 kB +Writeback: 0 kB +AnonPages: 3767532 kB +Mapped: 275844 kB +Shmem: 66184 kB +Slab: 602544 kB +SReclaimable: 543452 kB +SUnreclaim: 59092 kB +KernelStack: 9776 kB +PageTables: 38192 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 32809432 kB +Committed_AS: 7081000 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 386244 kB +VmallocChunk: 34358947836 kB +HardwareCorrupted: 0 kB +AnonHugePages: 2588672 kB +CmaTotal: 0 kB +CmaFree: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +DirectMap4k: 3390696 kB +DirectMap2M: 22761472 kB +DirectMap1G: 7340032 kB + +container (cgroup) information: +container_type: cgroupv1 +cpu_cpuset_cpus: 0-7 +cpu_memory_nodes: 0 +active_processor_count: 8 +cpu_quota: -1 +cpu_period: 100000 +cpu_shares: -1 +memory_limit_in_bytes: -1 +memory_and_swap_limit_in_bytes: -1 +memory_soft_limit_in_bytes: -1 +memory_usage_in_bytes: 17693765632 +memory_max_usage_in_bytes: 0 + + +CPU:total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 94 stepping 3, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, rtm, 3dnowpref, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2, adx + +/proc/cpuinfo: +processor : 0 +vendor_id : GenuineIntel +cpu family : 6 +model : 94 +model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz +stepping : 3 +microcode : 0xc6 +cpu MHz : 3753.820 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 0 +cpu cores : 4 +apicid : 0 +initial apicid : 0 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d +bogomips : 6816.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 1 +vendor_id : GenuineIntel +cpu family : 6 +model : 94 +model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz +stepping : 3 +microcode : 0xc6 +cpu MHz : 3775.402 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 1 +cpu cores : 4 +apicid : 2 +initial apicid : 2 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d +bogomips : 6816.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 2 +vendor_id : GenuineIntel +cpu family : 6 +model : 94 +model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz +stepping : 3 +microcode : 0xc6 +cpu MHz : 3701.733 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 2 +cpu cores : 4 +apicid : 4 +initial apicid : 4 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d +bogomips : 6816.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 3 +vendor_id : GenuineIntel +cpu family : 6 +model : 94 +model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz +stepping : 3 +microcode : 0xc6 +cpu MHz : 3728.918 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 3 +cpu cores : 4 +apicid : 6 +initial apicid : 6 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d +bogomips : 6816.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 4 +vendor_id : GenuineIntel +cpu family : 6 +model : 94 +model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz +stepping : 3 +microcode : 0xc6 +cpu MHz : 3700.073 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 0 +cpu cores : 4 +apicid : 1 +initial apicid : 1 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d +bogomips : 6816.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 5 +vendor_id : GenuineIntel +cpu family : 6 +model : 94 +model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz +stepping : 3 +microcode : 0xc6 +cpu MHz : 3700.903 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 1 +cpu cores : 4 +apicid : 3 +initial apicid : 3 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d +bogomips : 6816.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 6 +vendor_id : GenuineIntel +cpu family : 6 +model : 94 +model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz +stepping : 3 +microcode : 0xc6 +cpu MHz : 3705.261 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 2 +cpu cores : 4 +apicid : 5 +initial apicid : 5 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d +bogomips : 6816.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 7 +vendor_id : GenuineIntel +cpu family : 6 +model : 94 +model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz +stepping : 3 +microcode : 0xc6 +cpu MHz : 3791.174 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 3 +cpu cores : 4 +apicid : 7 +initial apicid : 7 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d +bogomips : 6816.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + + + +Memory: 4k page, physical 32717756k(14446816k free), swap 16450556k(16450556k free) + +vm_info: OpenJDK 64-Bit Server VM GraalVM CE 20.0.0 (25.242-b06-jvmci-20.0-b02) for linux-amd64 JRE (8u242), built on Jan 20 2020 20:45:17 by "buildslave" with gcc 7.3.0 + +time: Mon Apr 20 17:25:19 2020 +timezone: CEST +elapsed time: 4 seconds (0d 0h 0m 4s) + diff --git a/projects/resources/python/examples/pipeline_1.py b/projects/resources/python/examples/pipeline_1.py index 05534e48..731e6bd2 100644 --- a/projects/resources/python/examples/pipeline_1.py +++ b/projects/resources/python/examples/pipeline_1.py @@ -1,3 +1,4 @@ +# coding=utf-8 import polyglot import time import math @@ -82,9 +83,11 @@ # A. B. Compute the squares of each vector; - # First, build the kernel; + # First, build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") square_kernel = build_kernel(SQUARE_KERNEL, "square", "pointer, sint32") + diff_kernel = build_kernel(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32") + reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32") # Call the kernel. The 2 computations are independent, and can be done in parallel; start = time.time() @@ -96,7 +99,6 @@ # C. Compute the difference of the 2 vectors. This must be done after the 2 previous computations; start = time.time() - diff_kernel = build_kernel(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32") diff_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(x, y, z, N) end = time.time() time_cumulative += end - start @@ -104,7 +106,6 @@ # D. Compute the sum of the result; start = time.time() - reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32") reduce_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(z, res, N) end = time.time() time_cumulative += end - start @@ -112,8 +113,5 @@ print(f"overheads, time: {end - start_tot - time_cumulative:.4f} sec") print(f"total time: {end - start_tot:.4f} sec") - sync = polyglot.eval(language="grcuda", string="cudaDeviceSynchronize") - sync() - result = res[0] print(f"result={result:.4f}") From 1c3df6f6e8aa96d1f0b2428e1ecb2dc18326ea6d Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 22 Apr 2020 10:40:19 +0200 Subject: [PATCH 022/236] added log files to gitignore --- .gitignore | 1 + .../grcuda/test/gpu/ExecutionDAGTest.java | 2 +- .../python/examples/hs_err_pid18546.log | 1356 ----------------- 3 files changed, 2 insertions(+), 1357 deletions(-) delete mode 100644 projects/resources/python/examples/hs_err_pid18546.log diff --git a/.gitignore b/.gitignore index 5b674629..e44f521c 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ mx.grcuda/eclipse-launches /projects/com.nvidia.grcuda/src/com/nvidia/grcuda/parser/antlr/GrCUDAParser.java /projects/com.nvidia.grcuda/src/com/nvidia/grcuda/parser/antlr/GrCUDAVisitor.java /venv +**.log diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index ac833378..c1810fc6 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -57,7 +57,7 @@ public CUDAStream createStream() { @Override public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { - + } } diff --git a/projects/resources/python/examples/hs_err_pid18546.log b/projects/resources/python/examples/hs_err_pid18546.log deleted file mode 100644 index 993ed79b..00000000 --- a/projects/resources/python/examples/hs_err_pid18546.log +++ /dev/null @@ -1,1356 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGSEGV (0xb) at pc=0x00007f44eaf3ca40, pid=18546, tid=0x00007f442a654700 -# -# JRE version: OpenJDK Runtime Environment (8.0_242-b06) (build 1.8.0_242-b06) -# Java VM: OpenJDK 64-Bit Server VM GraalVM CE 20.0.0 (25.242-b06-jvmci-20.0-b02 mixed mode linux-amd64 compressed oops) -# Problematic frame: -# C [libc.so.6+0x15ba40] __memmove_ssse3_back+0x27f0 -# -# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again -# -# If you would like to submit a bug report, please visit: -# http://bugreport.java.com/bugreport/crash.jsp -# The crash happened outside the Java Virtual Machine in native code. -# See problematic frame for where to report the bug. -# - ---------------- T H R E A D --------------- - -Current thread (0x00007f44e5ffe000): JavaThread "Polyglot-grcuda-1" [_thread_in_native, id=18594, stack(0x00007f442a554000,0x00007f442a655000)] - -siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x00007f44000003e8 - -Registers: -RAX=0x00007f44e5a0a040, RBX=0x0000000000000008, RCX=0x0000000000000000, RDX=0x00007f44eaf3ca40 -RSP=0x00007f442a6526a8, RBP=0x0000000000000001, RSI=0x00007f44000003e8, RDI=0x00007f44e5a0a040 -R8 =0x00007f442a65273c, R9 =0x0000000000000000, R10=0x0000000000000002, R11=0x00007f44eaf6e580 -R12=0x00007f44e5a0a040, R13=0x00007f44e5500e70, R14=0x00007f44e5501e40, R15=0x0000000000000080 -RIP=0x00007f44eaf3ca40, EFLAGS=0x0000000000010287, CSGSFS=0x0000000000000033, ERR=0x0000000000000004 - TRAPNO=0x000000000000000e - -Top of Stack: (sp=0x00007f442a6526a8) -0x00007f442a6526a8: 00007f4432560437 00007f44e5501e40 -0x00007f442a6526b8: 00007f44e5501e40 0000000000000001 -0x00007f442a6526c8: 0000000000000001 0000000000000008 -0x00007f442a6526d8: 00007f4432560636 0000000000000000 -0x00007f442a6526e8: 0000000000000000 00007f44e5a0a040 -0x00007f442a6526f8: 00007f442a65273c 00007f44e5501e40 -0x00007f442a652708: 00007f44e4e19390 0000000000000001 -0x00007f442a652718: 00007f443247afbf 0000000000000000 -0x00007f442a652728: 0000000000000000 00007f44e58ce920 -0x00007f442a652738: 0000000000000000 00007f44e4e19390 -0x00007f442a652748: 00007f44e4e19390 0000000000000000 -0x00007f442a652758: 00007f44e5501e40 0000000000000008 -0x00007f442a652768: 0000000000000001 0000000000000001 -0x00007f442a652778: 0000000000000080 0000000000000001 -0x00007f442a652788: 00007f443247b3db 00007f4400000001 -0x00007f442a652798: 00007f4400000001 00007f4400000000 -0x00007f442a6527a8: 00007f44e58ce920 00007f44e5500e70 -0x00007f442a6527b8: 0000000000000000 0000000000000000 -0x00007f442a6527c8: 00007f442a6527e0 00007f442a652838 -0x00007f442a6527d8: 00007f44d5007d80 000000071f7b9318 -0x00007f442a6527e8: 00000005cd4bf9f0 00007f440c001390 -0x00007f442a6527f8: 00007f442a6527f8 00007f44e4e19390 -0x00007f442a652808: 00007f442a652860 00007f44e4e19390 -0x00007f442a652818: 0000000000000000 00007f44e58ce920 -0x00007f442a652828: 0000000000000000 00007f442a652848 -0x00007f442a652838: 00007f442a6528a8 00007f44d5007d80 -0x00007f442a652848: 000000071f7b9318 00000005cd4bf9f0 -0x00007f442a652858: 000000071f4311f0 000000071f7b93c8 -0x00007f442a652868: 00007f442a652868 00007f446096e7e7 -0x00007f442a652878: 00007f44d1e64480 0000000000000000 -0x00007f442a652888: 00007f44e5501e40 0000000000000008 -0x00007f442a652898: 0000000000000001 00007f4408001b80 - -Instructions: (pc=0x00007f44eaf3ca40) -0x00007f44eaf3ca20: 18 f3 0f 7f 47 18 f2 0f f0 46 08 f2 0f f0 0e f3 -0x00007f44eaf3ca30: 0f 7f 47 08 f3 0f 7f 0f c3 0f 1f 80 00 00 00 00 -0x00007f44eaf3ca40: 48 8b 16 48 89 17 c3 66 0f 1f 84 00 00 00 00 00 -0x00007f44eaf3ca50: f2 0f f0 46 77 f3 0f 7f 47 77 f2 0f f0 46 67 f3 - -Register to memory mapping: - -RAX=0x00007f44e5a0a040 is an unknown value -RBX=0x0000000000000008 is an unknown value -RCX=0x0000000000000000 is an unknown value -RDX=0x00007f44eaf3ca40: in /lib64/libc.so.6 at 0x00007f44eade1000 -RSP=0x00007f442a6526a8 is pointing into the stack for thread: 0x00007f44e5ffe000 -RBP=0x0000000000000001 is an unknown value -RSI=0x00007f44000003e8 is an unknown value -RDI=0x00007f44e5a0a040 is an unknown value -R8 =0x00007f442a65273c is pointing into the stack for thread: 0x00007f44e5ffe000 -R9 =0x0000000000000000 is an unknown value -R10=0x0000000000000002 is an unknown value -R11=0x00007f44eaf6e580: in /lib64/libc.so.6 at 0x00007f44eade1000 -R12=0x00007f44e5a0a040 is an unknown value -R13=0x00007f44e5500e70 is an unknown value -R14=0x00007f44e5501e40 is an unknown value -R15=0x0000000000000080 is an unknown value - - -Stack: [0x00007f442a554000,0x00007f442a655000], sp=0x00007f442a6526a8, free space=1017k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libc.so.6+0x15ba40] __memmove_ssse3_back+0x27f0 - -Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) -j com.oracle.truffle.nfi.impl.NFIContext.executePrimitive(JJJ[BI[I[Ljava/lang/Object;)J+0 -j com.oracle.truffle.nfi.impl.NFIContext.executePrimitive(JJ[BI[I[Ljava/lang/Object;)J+14 -j com.oracle.truffle.nfi.impl.LibFFISignature.execute(Lcom/oracle/truffle/nfi/impl/NFIContext;JLcom/oracle/truffle/nfi/impl/NativeArgumentBuffer$Array;)Ljava/lang/Object;+110 -j com.oracle.truffle.nfi.impl.FunctionExecuteNode$SlowPathExecuteNode.slowPathExecute(Lcom/oracle/truffle/nfi/impl/NFIContext;Lcom/oracle/truffle/nfi/impl/LibFFISignature;JLcom/oracle/truffle/nfi/impl/NativeArgumentBuffer$Array;)Ljava/lang/Object;+5 -j com.oracle.truffle.nfi.impl.FunctionExecuteNode$SlowPathExecuteNode.execute(Lcom/oracle/truffle/api/frame/VirtualFrame;)Ljava/lang/Object;+74 -J 4039 JVMCI-native org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot([Ljava/lang/Object;)Ljava/lang/Object; (48 bytes) @ 0x00007f44d6369c7d [0x00007f44d6369b40+0x13d] -j org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary([Ljava/lang/Object;)Ljava/lang/Object;+15 -J 4435 C1 org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(Lcom/oracle/truffle/api/nodes/Node;[Ljava/lang/Object;)Ljava/lang/Object; (59 bytes) @ 0x00007f44d65227dc [0x00007f44d6521a00+0xddc] -j org.graalvm.compiler.truffle.runtime.OptimizedIndirectCallNode$1.call(Lcom/oracle/truffle/api/CallTarget;[Ljava/lang/Object;)Ljava/lang/Object;+11 -j com.oracle.truffle.nfi.impl.FunctionExecuteNode.genericExecute(Lcom/oracle/truffle/nfi/impl/NativePointer;Lcom/oracle/truffle/nfi/impl/LibFFISignature;[Ljava/lang/Object;Lcom/oracle/truffle/nfi/impl/NativeArgumentLibrary;Lcom/oracle/truffle/nfi/impl/NFILanguageImpl;)Ljava/lang/Object;+125 -j com.oracle.truffle.nfi.impl.FunctionExecuteNodeGen$Uncached.execute(Lcom/oracle/truffle/nfi/impl/NativePointer;Lcom/oracle/truffle/nfi/impl/LibFFISignature;[Ljava/lang/Object;)Ljava/lang/Object;+22 -j com.oracle.truffle.nfi.impl.NativePointer.call(Ljava/lang/Object;[Ljava/lang/Object;Lcom/oracle/truffle/nfi/impl/FunctionExecuteNode;)Ljava/lang/Object;+29 -j com.oracle.truffle.nfi.impl.NativePointerGen$NativeSymbolLibraryExports$Uncached.call(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+37 -j com.oracle.truffle.nfi.NFISymbol.execute([Ljava/lang/Object;Lcom/oracle/truffle/nfi/spi/NativeSymbolLibrary;Lcom/oracle/truffle/api/profiles/BranchProfile;)Ljava/lang/Object;+17 -j com.oracle.truffle.nfi.NFISymbolGen$InteropLibraryExports$Uncached.execute(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+47 -j com.oracle.truffle.api.interop.InteropLibraryGen$UncachedDispatch.execute(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+12 -j com.nvidia.grcuda.gpu.CUDARuntime.cuLaunchKernel(Lcom/nvidia/grcuda/gpu/Kernel;Lcom/nvidia/grcuda/gpu/KernelConfig;Lcom/nvidia/grcuda/gpu/KernelArguments;)V+152 -j com.nvidia.grcuda.gpu.KernelExecution.executeInner()V+22 -j com.nvidia.grcuda.gpu.GrCUDAComputationalElement.execute()V+5 -j com.nvidia.grcuda.gpu.GrCUDAExecutionContext$ComputationThread.run()V+38 -j java.util.concurrent.Executors$RunnableAdapter.call()Ljava/lang/Object;+4 -j java.util.concurrent.FutureTask.run()V+42 -j java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+95 -j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+5 -j java.lang.Thread.run()V+11 -j com.oracle.truffle.polyglot.PolyglotThread.run()V+28 -v ~StubRoutines::call_stub - ---------------- P R O C E S S --------------- - -Java Threads: ( => current thread ) -=>0x00007f44e5ffe000 JavaThread "Polyglot-grcuda-1" [_thread_in_native, id=18594, stack(0x00007f442a554000,0x00007f442a655000)] - 0x00007f44e54f0800 JavaThread "Polyglot-grcuda-0" [_thread_blocked, id=18593, stack(0x00007f44300cc000,0x00007f44301cd000)] - 0x00007f44e4dbc000 JavaThread "nfi-gc" daemon [_thread_blocked, id=18572, stack(0x00007f444000c000,0x00007f444010d000)] - 0x00007f44e4d43000 JavaThread "pool-2-thread-1" daemon [_thread_blocked, id=18569, stack(0x00007f44433fe000,0x00007f44434ff000)] - 0x00007f44e4b91000 JavaThread "pool-1-thread-1" daemon [_thread_blocked, id=18568, stack(0x00007f44436ff000,0x00007f4443800000)] - 0x00007f44e4542800 JavaThread "TruffleCompilerThread-15" daemon [_thread_blocked, id=18567, stack(0x00007f445d4ff000,0x00007f445d600000)] - 0x00007f447c077000 JavaThread "HotSpotGraalManagement Bean Registration" daemon [_thread_blocked, id=18566, stack(0x00007f44b82ff000,0x00007f44b8400000)] - 0x00007f44e40d2800 JavaThread "Service Thread" daemon [_thread_blocked, id=18564, stack(0x00007f44bb1f6000,0x00007f44bb2f7000)] - 0x00007f44e40cd800 JavaThread "C1 CompilerThread3" daemon [_thread_in_native, id=18563, stack(0x00007f44bb2f8000,0x00007f44bb4f8000)] - 0x00007f44e40cb000 JavaThread "JVMCI-native CompilerThread2" daemon [_thread_in_vm, id=18562, stack(0x00007f44bb4f9000,0x00007f44bb6f9000)] - 0x00007f44e40c9800 JavaThread "JVMCI-native CompilerThread1" daemon [_thread_in_vm, id=18561, stack(0x00007f44bb6fa000,0x00007f44bb8fa000)] - 0x00007f44e40c6800 JavaThread "JVMCI-native CompilerThread0" daemon [_thread_in_native, id=18560, stack(0x00007f44bb8fb000,0x00007f44bbafb000)] - 0x00007f44e40c4800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=18559, stack(0x00007f44bbafb000,0x00007f44bbbfc000)] - 0x00007f44e4091800 JavaThread "Finalizer" daemon [_thread_blocked, id=18558, stack(0x00007f44bbbfc000,0x00007f44bbcfd000)] - 0x00007f44e408d000 JavaThread "Reference Handler" daemon [_thread_blocked, id=18557, stack(0x00007f44bbcfd000,0x00007f44bbdfe000)] - 0x00007f44e400b800 JavaThread "main" [_thread_blocked, id=18547, stack(0x00007f44eb8db000,0x00007f44eb9db000)] - -Other Threads: - 0x00007f44e4085000 VMThread [stack: 0x00007f44bbdff000,0x00007f44bbeff000] [id=18556] - 0x00007f44e40d7000 WatcherThread [stack: 0x00007f44bb0f6000,0x00007f44bb1f6000] [id=18565] - -VM state:not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event]) -[0x00007f44e40073a0] CodeCache_lock - owner thread: 0x00007f44e40c9800 -[0x00007f44e4008a20] Compile_lock - owner thread: 0x00007f44e40c9800 -[0x00007f44e4008b20] MethodCompileQueue_lock - owner thread: 0x00007f44e40c9800 - -heap address: 0x00000005ccc00000, size: 7988 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 -Narrow klass base: 0x0000000000000000, Narrow klass shift: 3 -Compressed class space size: 1073741824 Address: 0x00000007c0000000 - -Heap: - PSYoungGen total 149504K, used 117939K [0x0000000719980000, 0x0000000725480000, 0x00000007c0000000) - eden space 128512K, 75% used [0x0000000719980000,0x000000071f830780,0x0000000721700000) - from space 20992K, 99% used [0x0000000721700000,0x0000000722b7c5a0,0x0000000722b80000) - to space 20992K, 0% used [0x0000000724000000,0x0000000724000000,0x0000000725480000) - ParOldGen total 438272K, used 20442K [0x00000005ccc00000, 0x00000005e7800000, 0x0000000719980000) - object space 438272K, 4% used [0x00000005ccc00000,0x00000005cdff6a60,0x00000005e7800000) - Metaspace used 45063K, capacity 45678K, committed 46336K, reserved 1089536K - class space used 6126K, capacity 6346K, committed 6400K, reserved 1048576K - -Card table byte_map: [0x00007f44d4065000,0x00007f44d5000000] byte_map_base: 0x00007f44d11ff000 - -Marking Bits: (ParMarkBitMap*) 0x00007f44eadc40c0 - Begin Bits: [0x00007f449c660000, 0x00007f44a4330000) - End Bits: [0x00007f44a4330000, 0x00007f44ac000000) - -Polling page: 0x00007f44eba04000 - -CodeCache: size=245760Kb used=23292Kb max_used=23293Kb free=222467Kb - bounds [0x00007f44d5000000, 0x00007f44d66d0000, 0x00007f44e4000000] - total_blobs=4695 nmethods=4153 adapters=455 - compilation: enabled - -Compilation events (10 events): -Event: 4.148 Thread 0x00007f44e40cb000 4875 4 sun.misc.URLClassPath$JarLoader$2::getCodeSigners (8 bytes) -Event: 4.148 Thread 0x00007f44e40c6800 4876 4 sun.misc.URLClassPath$JarLoader$2::getCodeSourceURL (8 bytes) -Event: 4.149 Thread 0x00007f44e40c6800 nmethod 4876 0x00007f44d66c34d0 code [0x00007f44d66c3620, 0x00007f44d66c3680] -Event: 4.149 Thread 0x00007f44e40cd800 4877 3 java.lang.invoke.MethodType::changeReturnType (20 bytes) -Event: 4.150 Thread 0x00007f44e40cd800 nmethod 4877 0x00007f44d66c3010 code [0x00007f44d66c3180, 0x00007f44d66c3388] -Event: 4.150 Thread 0x00007f44e40cd800 4879 3 com.oracle.graal.python.runtime.PythonOptions::getAttributeAccessInlineCacheMaxDepth (16 bytes) -Event: 4.150 Thread 0x00007f44e40c9800 4882 4 java.lang.ThreadLocal$ThreadLocalMap::set (136 bytes) -Event: 4.150 Thread 0x00007f44e40c6800 4883 ! 4 com.oracle.graal.python.parser.antlr.Python3Parser::expr (256 bytes) -Event: 4.150 Thread 0x00007f44e40cd800 nmethod 4879 0x00007f44d66c4d10 code [0x00007f44d66c4f00, 0x00007f44d66c5a98] -Event: 4.150 Thread 0x00007f44e40cd800 4885 3 jdk.internal.org.objectweb.asm.MethodWriter::visitMaxs (1159 bytes) - -GC Heap History (10 events): -Event: 0.637 GC heap before -{Heap before GC invocations=1 (full 0): - PSYoungGen total 149504K, used 82250K [0x0000000719980000, 0x0000000724000000, 0x00000007c0000000) - eden space 128512K, 64% used [0x0000000719980000,0x000000071e9d28e8,0x0000000721700000) - from space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) - to space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) - ParOldGen total 341504K, used 0K [0x00000005ccc00000, 0x00000005e1980000, 0x0000000719980000) - object space 341504K, 0% used [0x00000005ccc00000,0x00000005ccc00000,0x00000005e1980000) - Metaspace used 20716K, capacity 21052K, committed 21296K, reserved 1067008K - class space used 2817K, capacity 2943K, committed 2944K, reserved 1048576K -Event: 0.642 GC heap after -Heap after GC invocations=1 (full 0): - PSYoungGen total 149504K, used 5505K [0x0000000719980000, 0x0000000724000000, 0x00000007c0000000) - eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) - from space 20992K, 26% used [0x0000000721700000,0x0000000721c60560,0x0000000722b80000) - to space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) - ParOldGen total 341504K, used 16K [0x00000005ccc00000, 0x00000005e1980000, 0x0000000719980000) - object space 341504K, 0% used [0x00000005ccc00000,0x00000005ccc04000,0x00000005e1980000) - Metaspace used 20716K, capacity 21052K, committed 21296K, reserved 1067008K - class space used 2817K, capacity 2943K, committed 2944K, reserved 1048576K -} -Event: 0.642 GC heap before -{Heap before GC invocations=2 (full 1): - PSYoungGen total 149504K, used 5505K [0x0000000719980000, 0x0000000724000000, 0x00000007c0000000) - eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) - from space 20992K, 26% used [0x0000000721700000,0x0000000721c60560,0x0000000722b80000) - to space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) - ParOldGen total 341504K, used 16K [0x00000005ccc00000, 0x00000005e1980000, 0x0000000719980000) - object space 341504K, 0% used [0x00000005ccc00000,0x00000005ccc04000,0x00000005e1980000) - Metaspace used 20716K, capacity 21052K, committed 21296K, reserved 1067008K - class space used 2817K, capacity 2943K, committed 2944K, reserved 1048576K -Event: 0.659 GC heap after -Heap after GC invocations=2 (full 1): - PSYoungGen total 149504K, used 0K [0x0000000719980000, 0x0000000724000000, 0x00000007c0000000) - eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) - from space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) - to space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) - ParOldGen total 233984K, used 5312K [0x00000005ccc00000, 0x00000005db080000, 0x0000000719980000) - object space 233984K, 2% used [0x00000005ccc00000,0x00000005cd1302c0,0x00000005db080000) - Metaspace used 20716K, capacity 21052K, committed 21296K, reserved 1067008K - class space used 2817K, capacity 2943K, committed 2944K, reserved 1048576K -} -Event: 1.358 GC heap before -{Heap before GC invocations=3 (full 1): - PSYoungGen total 149504K, used 90731K [0x0000000719980000, 0x0000000724000000, 0x00000007c0000000) - eden space 128512K, 70% used [0x0000000719980000,0x000000071f21ae20,0x0000000721700000) - from space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) - to space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) - ParOldGen total 233984K, used 5312K [0x00000005ccc00000, 0x00000005db080000, 0x0000000719980000) - object space 233984K, 2% used [0x00000005ccc00000,0x00000005cd1302c0,0x00000005db080000) - Metaspace used 34703K, capacity 35152K, committed 35456K, reserved 1079296K - class space used 5321K, capacity 5495K, committed 5504K, reserved 1048576K -Event: 1.363 GC heap after -Heap after GC invocations=3 (full 1): - PSYoungGen total 149504K, used 7134K [0x0000000719980000, 0x0000000725b80000, 0x00000007c0000000) - eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) - from space 20992K, 33% used [0x0000000722b80000,0x0000000723277928,0x0000000724000000) - to space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) - ParOldGen total 233984K, used 5320K [0x00000005ccc00000, 0x00000005db080000, 0x0000000719980000) - object space 233984K, 2% used [0x00000005ccc00000,0x00000005cd1322c0,0x00000005db080000) - Metaspace used 34703K, capacity 35152K, committed 35456K, reserved 1079296K - class space used 5321K, capacity 5495K, committed 5504K, reserved 1048576K -} -Event: 1.363 GC heap before -{Heap before GC invocations=4 (full 2): - PSYoungGen total 149504K, used 7134K [0x0000000719980000, 0x0000000725b80000, 0x00000007c0000000) - eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) - from space 20992K, 33% used [0x0000000722b80000,0x0000000723277928,0x0000000724000000) - to space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) - ParOldGen total 233984K, used 5320K [0x00000005ccc00000, 0x00000005db080000, 0x0000000719980000) - object space 233984K, 2% used [0x00000005ccc00000,0x00000005cd1322c0,0x00000005db080000) - Metaspace used 34703K, capacity 35152K, committed 35456K, reserved 1079296K - class space used 5321K, capacity 5495K, committed 5504K, reserved 1048576K -Event: 1.417 GC heap after -Heap after GC invocations=4 (full 2): - PSYoungGen total 149504K, used 0K [0x0000000719980000, 0x0000000725b80000, 0x00000007c0000000) - eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) - from space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) - to space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) - ParOldGen total 438272K, used 11738K [0x00000005ccc00000, 0x00000005e7800000, 0x0000000719980000) - object space 438272K, 2% used [0x00000005ccc00000,0x00000005cd776a50,0x00000005e7800000) - Metaspace used 34703K, capacity 35152K, committed 35456K, reserved 1079296K - class space used 5321K, capacity 5495K, committed 5504K, reserved 1048576K -} -Event: 2.662 GC heap before -{Heap before GC invocations=5 (full 2): - PSYoungGen total 149504K, used 128512K [0x0000000719980000, 0x0000000725b80000, 0x00000007c0000000) - eden space 128512K, 100% used [0x0000000719980000,0x0000000721700000,0x0000000721700000) - from space 20992K, 0% used [0x0000000722b80000,0x0000000722b80000,0x0000000724000000) - to space 20992K, 0% used [0x0000000721700000,0x0000000721700000,0x0000000722b80000) - ParOldGen total 438272K, used 11738K [0x00000005ccc00000, 0x00000005e7800000, 0x0000000719980000) - object space 438272K, 2% used [0x00000005ccc00000,0x00000005cd776a50,0x00000005e7800000) - Metaspace used 40453K, capacity 41036K, committed 41472K, reserved 1085440K - class space used 5639K, capacity 5827K, committed 5888K, reserved 1048576K -Event: 2.679 GC heap after -Heap after GC invocations=5 (full 2): - PSYoungGen total 149504K, used 20977K [0x0000000719980000, 0x0000000725480000, 0x00000007c0000000) - eden space 128512K, 0% used [0x0000000719980000,0x0000000719980000,0x0000000721700000) - from space 20992K, 99% used [0x0000000721700000,0x0000000722b7c5a0,0x0000000722b80000) - to space 20992K, 0% used [0x0000000724000000,0x0000000724000000,0x0000000725480000) - ParOldGen total 438272K, used 20442K [0x00000005ccc00000, 0x00000005e7800000, 0x0000000719980000) - object space 438272K, 4% used [0x00000005ccc00000,0x00000005cdff6a60,0x00000005e7800000) - Metaspace used 40453K, capacity 41036K, committed 41472K, reserved 1085440K - class space used 5639K, capacity 5827K, committed 5888K, reserved 1048576K -} - -Class unloading (0 events): -No events - -Deoptimization events (10 events): -Event: 3.581 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d59d9a74 method=com.oracle.truffle.polyglot.PolyglotContextImpl.getLanguageContextImpl(Ljava/lang/Class;)Lcom/oracle/truffle/polyglot/PolyglotLanguageContext; @ 4 -Event: 3.867 Thread 0x00007f44e400b800 Uncommon trap: reason=intrinsic_or_type_checked_inlining action=reinterpret pc=0x00007f44d667b490 method=com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNodeGen$ReadAttributeFromObjectNotTypeNodeGen.execute(Ljava/lang/Object;Ljava/lang/Obj -Event: 3.876 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5bf8bf1 method=org.antlr.v4.runtime.atn.ParserATNSimulator.computeReachSet(Lorg/antlr/v4/runtime/atn/ATNConfigSet;IZ)Lorg/antlr/v4/runtime/atn/ATNConfigSet; @ 207 -Event: 4.142 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5f35c11 method=com.oracle.truffle.api.library.LibraryFactory.create(Ljava/lang/Object;)Lcom/oracle/truffle/api/library/Library; @ 93 -Event: 4.149 Thread 0x00007f44e54f0800 Uncommon trap: reason=intrinsic_or_type_checked_inlining action=reinterpret pc=0x00007f44d54a135f method=java.util.WeakHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @ 0 -Event: 4.149 Thread 0x00007f44e54f0800 Uncommon trap: reason=intrinsic_or_type_checked_inlining action=reinterpret pc=0x00007f44d552ceb8 method=java.util.WeakHashMap.hash(Ljava/lang/Object;)I @ 0 -Event: 4.149 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5bf5ad6 method=org.graalvm.compiler.truffle.runtime.OptimizedAssumption.isValid()Z @ 4 -Event: 4.149 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5f5144e method=org.graalvm.compiler.truffle.runtime.OptimizedAssumption.isValid()Z @ 4 -Event: 4.149 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5f89c2d method=org.graalvm.compiler.truffle.runtime.OptimizedAssumption.isValid()Z @ 4 -Event: 4.150 Thread 0x00007f44e400b800 Uncommon trap: reason=null_assert_or_unreached0 action=reinterpret pc=0x00007f44d5d0c249 method=org.graalvm.compiler.truffle.runtime.OptimizedAssumption.isValid()Z @ 4 - -Classes redefined (0 events): -No events - -Internal exceptions (10 events): -Event: 3.329 Thread 0x00007f44e400b800 Exception (0x000000071db9fa58) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] -Event: 3.372 Thread 0x00007f44e400b800 Exception (0x000000071e29e930) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] -Event: 3.373 Thread 0x00007f44e400b800 Exception (0x000000071e2a2d00) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] -Event: 3.409 Thread 0x00007f44e400b800 Exception (0x000000071e4f6040) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] -Event: 3.455 Thread 0x00007f44e400b800 Implicit null exception at 0x00007f44d510c1bc to 0x00007f44d504932c -Event: 3.455 Thread 0x00007f44e400b800 Exception (0x000000071e7af2e0) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] -Event: 3.468 Thread 0x00007f44e400b800 Exception (0x000000071e852e78) thrown at [/b/b/e/main/graal-jvmci-8/src/share/vm/prims/jni.cpp, line 714] -Event: 3.520 Thread 0x00007f44e400b800 Implicit null exception at 0x00007f44d57ba972 to 0x00007f44d504932c -Event: 3.520 Thread 0x00007f44e400b800 Implicit null exception at 0x00007f44d569953a to 0x00007f44d504932c -Event: 3.579 Thread 0x00007f44e400b800 Implicit null exception at 0x00007f44d580e552 to 0x00007f44d504932c - -Events (10 events): -Event: 4.149 Thread 0x00007f44e400b800 Uncommon trap: trap_request=0xffffffed fr.pc=0x00007f44d5f89c2d relative=0x00000000000002ed -Event: 4.149 Thread 0x00007f44e400b800 DEOPT PACKING pc=0x00007f44d5f89c2d sp=0x00007f44eb9d67d0 -Event: 4.149 Thread 0x00007f44e400b800 DEOPT UNPACKING pc=0x00007f44d5049599 sp=0x00007f44eb9d62c8 mode 3 -Event: 4.149 Thread 0x00007f44e400b800 Uncommon trap: trap_request=0xffffffed fr.pc=0x00007f44d5d0c249 relative=0x0000000000000289 -Event: 4.150 Thread 0x00007f44e400b800 DEOPT PACKING pc=0x00007f44d5d0c249 sp=0x00007f44eb9d8250 -Event: 4.150 Thread 0x00007f44e400b800 DEOPT UNPACKING pc=0x00007f44d5049599 sp=0x00007f44eb9d7d48 mode 3 -Event: 4.150 Executing VM operation: RevokeBias -Event: 4.151 Executing VM operation: RevokeBias done -Event: 4.153 loading class com/nvidia/grcuda/gpu/ExecutionDAG$DAGEdge -Event: 4.153 loading class com/nvidia/grcuda/gpu/ExecutionDAG$DAGEdge done - - -Dynamic libraries: -00400000-00401000 r-xp 00000000 08:03 75369845 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/bin/java -00600000-00601000 r--p 00000000 08:03 75369845 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/bin/java -00601000-00602000 rw-p 00001000 08:03 75369845 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/bin/java -013f6000-01417000 rw-p 00000000 00:00 0 [heap] -200000000-202780000 ---p 00000000 00:00 0 -202780000-202880000 rw-s 202780000 00:05 31285 /dev/nvidia-uvm -202880000-400000000 ---p 00000000 00:00 0 -5ccc00000-5e7800000 rw-p 00000000 00:00 0 -5e7800000-719980000 ---p 00000000 00:00 0 -719980000-725480000 rw-p 00000000 00:00 0 -725480000-7c0000000 ---p 00000000 00:00 0 -7c0000000-7c0640000 rw-p 00000000 00:00 0 -7c0640000-800000000 ---p 00000000 00:00 0 -800000000-800100000 rw-s 00000000 00:05 31275 /dev/nvidiactl -800100000-800300000 rw-s 00000000 00:05 31275 /dev/nvidiactl -800300000-802b00000 rw-s 00000000 00:05 31275 /dev/nvidiactl -802b00000-802c00000 rw-s 00000000 00:05 31275 /dev/nvidiactl -802c00000-802d00000 rw-s 00000000 00:04 1281121 /dev/zero (deleted) -802d00000-802e00000 rw-s 00000000 00:05 31275 /dev/nvidiactl -802e00000-802f00000 rw-s 00000000 00:04 1281122 /dev/zero (deleted) -802f00000-803000000 rw-s 00000000 00:05 31275 /dev/nvidiactl -803000000-803120000 ---p 00000000 00:00 0 -803120000-803220000 rw-s 00000000 00:05 31275 /dev/nvidiactl -803220000-803300000 rw-s 00000000 00:05 31275 /dev/nvidiactl -803300000-1100000000 ---p 00000000 00:00 0 -7f4408000000-7f4408021000 rw-p 00000000 00:00 0 -7f4408021000-7f440c000000 ---p 00000000 00:00 0 -7f440c000000-7f440c058000 rw-p 00000000 00:00 0 -7f440c058000-7f4410000000 ---p 00000000 00:00 0 -7f4410000000-7f4410001000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f4410001000-7f4410002000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f4410002000-7f4410003000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f4410003000-7f4410004000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f4410004000-7f4410005000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f4410005000-7f4410006000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f4410006000-7f4410007000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f4410007000-7f4410008000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f4410008000-7f4410009000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f4410009000-7f441000a000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f441000a000-7f441000b000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f441000b000-7f441000c000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f441000c000-7f441000d000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f441000d000-7f441000e000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f441000e000-7f441000f000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f441000f000-7f4410010000 rw-s 00000000 00:05 29264 /dev/nvidia0 -7f4410010000-7f4420000000 ---p 00000000 00:00 0 -7f4420000000-7f4420021000 rw-p 00000000 00:00 0 -7f4420021000-7f4424000000 ---p 00000000 00:00 0 -7f4424000000-7f4424021000 rw-p 00000000 00:00 0 -7f4424021000-7f4428000000 ---p 00000000 00:00 0 -7f442a554000-7f442a557000 ---p 00000000 00:00 0 -7f442a557000-7f442a655000 rw-p 00000000 00:00 0 -7f442a655000-7f442a73e000 r-xp 00000000 08:04 3543193 /usr/lib64/libstdc++.so.6.0.19 -7f442a73e000-7f442a93d000 ---p 000e9000 08:04 3543193 /usr/lib64/libstdc++.so.6.0.19 -7f442a93d000-7f442a945000 r--p 000e8000 08:04 3543193 /usr/lib64/libstdc++.so.6.0.19 -7f442a945000-7f442a947000 rw-p 000f0000 08:04 3543193 /usr/lib64/libstdc++.so.6.0.19 -7f442a947000-7f442a95c000 rw-p 00000000 00:00 0 -7f442a95c000-7f442adfe000 r-xp 00000000 08:04 4075163 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc-builtins.so.10.2.89 -7f442adfe000-7f442affd000 ---p 004a2000 08:04 4075163 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc-builtins.so.10.2.89 -7f442affd000-7f442affe000 rw-p 004a1000 08:04 4075163 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc-builtins.so.10.2.89 -7f442affe000-7f442afff000 ---p 00000000 00:00 0 -7f442afff000-7f442b7ff000 rw-p 00000000 00:00 0 -7f442b7ff000-7f442b800000 ---p 00000000 00:00 0 -7f442b800000-7f442c000000 rw-p 00000000 00:00 0 -7f442c000000-7f442c022000 rw-p 00000000 00:00 0 -7f442c022000-7f4430000000 ---p 00000000 00:00 0 -7f44300cc000-7f44300cf000 ---p 00000000 00:00 0 -7f44300cf000-7f44301cd000 rw-p 00000000 00:00 0 -7f44301cd000-7f44301ce000 ---p 00000000 00:00 0 -7f44301ce000-7f4430ace000 rw-p 00000000 00:00 0 -7f4430ace000-7f4430bce000 ---p 00000000 00:00 0 -7f4430bce000-7f4431dd6000 r-xp 00000000 08:04 4075165 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc.so.10.2.89 -7f4431dd6000-7f4431fd5000 ---p 01208000 08:04 4075165 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc.so.10.2.89 -7f4431fd5000-7f443225d000 r--p 01207000 08:04 4075165 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc.so.10.2.89 -7f443225d000-7f44322d3000 rw-p 0148f000 08:04 4075165 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libnvrtc.so.10.2.89 -7f44322d3000-7f443237b000 rw-p 00000000 00:00 0 -7f443237b000-7f4433251000 r-xp 00000000 08:04 3539602 /usr/lib64/libcuda.so.440.64.00 -7f4433251000-7f4433450000 ---p 00ed6000 08:04 3539602 /usr/lib64/libcuda.so.440.64.00 -7f4433450000-7f443356b000 rw-p 00ed5000 08:04 3539602 /usr/lib64/libcuda.so.440.64.00 -7f443356b000-7f4433581000 rw-p 00000000 00:00 0 -7f4433581000-7f44335fa000 r-xp 00000000 08:04 4063737 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudart.so.10.2.89 -7f44335fa000-7f44337f9000 ---p 00079000 08:04 4063737 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudart.so.10.2.89 -7f44337f9000-7f44337fd000 rw-p 00078000 08:04 4063737 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudart.so.10.2.89 -7f44337fd000-7f44337ff000 rw-p 00000000 00:00 0 -7f44337ff000-7f4433800000 ---p 00000000 00:00 0 -7f4433800000-7f4434000000 rw-p 00000000 00:00 0 -7f4434000000-7f4434021000 rw-p 00000000 00:00 0 -7f4434021000-7f4438000000 ---p 00000000 00:00 0 -7f4438000000-7f4438021000 rw-p 00000000 00:00 0 -7f4438021000-7f443c000000 ---p 00000000 00:00 0 -7f443c000000-7f443c021000 rw-p 00000000 00:00 0 -7f443c021000-7f4440000000 ---p 00000000 00:00 0 -7f444000c000-7f444000f000 ---p 00000000 00:00 0 -7f444000f000-7f444010d000 rw-p 00000000 00:00 0 -7f444010d000-7f444011a000 r-xp 00000000 08:03 85328353 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libtrufflenfi.so -7f444011a000-7f444031a000 ---p 0000d000 08:03 85328353 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libtrufflenfi.so -7f444031a000-7f444031b000 rw-p 0000d000 08:03 85328353 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libtrufflenfi.so -7f444031b000-7f444031c000 ---p 00000000 00:00 0 -7f444031c000-7f4440b1c000 rw-p 00000000 00:00 0 -7f4440b1c000-7f4440b1e000 r-xp 00000000 08:04 3542881 /usr/lib64/libutil-2.17.so -7f4440b1e000-7f4440d1d000 ---p 00002000 08:04 3542881 /usr/lib64/libutil-2.17.so -7f4440d1d000-7f4440d1e000 r--p 00001000 08:04 3542881 /usr/lib64/libutil-2.17.so -7f4440d1e000-7f4440d1f000 rw-p 00002000 08:04 3542881 /usr/lib64/libutil-2.17.so -7f4440d1f000-7f4440d58000 r-xp 00000000 08:04 4983239 /usr/lib64/gvfs/libgvfscommon.so -7f4440d58000-7f4440f57000 ---p 00039000 08:04 4983239 /usr/lib64/gvfs/libgvfscommon.so -7f4440f57000-7f4440f5d000 r--p 00038000 08:04 4983239 /usr/lib64/gvfs/libgvfscommon.so -7f4440f5d000-7f4440f5e000 rw-p 0003e000 08:04 4983239 /usr/lib64/gvfs/libgvfscommon.so -7f4440f5e000-7f4440f90000 r-xp 00000000 08:04 3671868 /usr/lib64/gio/modules/libgvfsdbus.so -7f4440f90000-7f444118f000 ---p 00032000 08:04 3671868 /usr/lib64/gio/modules/libgvfsdbus.so -7f444118f000-7f4441190000 r--p 00031000 08:04 3671868 /usr/lib64/gio/modules/libgvfsdbus.so -7f4441190000-7f4441192000 rw-p 00032000 08:04 3671868 /usr/lib64/gio/modules/libgvfsdbus.so -7f4441192000-7f44411ad000 r-xp 00000000 08:04 3548627 /usr/lib64/libmagic.so.1.0.0 -7f44411ad000-7f44413ad000 ---p 0001b000 08:04 3548627 /usr/lib64/libmagic.so.1.0.0 -7f44413ad000-7f44413ae000 r--p 0001b000 08:04 3548627 /usr/lib64/libmagic.so.1.0.0 -7f44413ae000-7f44413af000 rw-p 0001c000 08:04 3548627 /usr/lib64/libmagic.so.1.0.0 -7f44413af000-7f44413b3000 r-xp 00000000 08:04 3543238 /usr/lib64/libuuid.so.1.3.0 -7f44413b3000-7f44415b2000 ---p 00004000 08:04 3543238 /usr/lib64/libuuid.so.1.3.0 -7f44415b2000-7f44415b3000 r--p 00003000 08:04 3543238 /usr/lib64/libuuid.so.1.3.0 -7f44415b3000-7f44415b4000 rw-p 00004000 08:04 3543238 /usr/lib64/libuuid.so.1.3.0 -7f44415b4000-7f44415f0000 r-xp 00000000 08:04 3542556 /usr/lib64/libblkid.so.1.1.0 -7f44415f0000-7f44417ef000 ---p 0003c000 08:04 3542556 /usr/lib64/libblkid.so.1.1.0 -7f44417ef000-7f44417f2000 r--p 0003b000 08:04 3542556 /usr/lib64/libblkid.so.1.1.0 -7f44417f2000-7f44417f3000 rw-p 0003e000 08:04 3542556 /usr/lib64/libblkid.so.1.1.0 -7f44417f3000-7f44417f4000 rw-p 00000000 00:00 0 -7f44417f4000-7f4441809000 r-xp 00000000 08:04 3538963 /usr/lib64/libgcc_s-4.8.5-20150702.so.1 -7f4441809000-7f4441a08000 ---p 00015000 08:04 3538963 /usr/lib64/libgcc_s-4.8.5-20150702.so.1 -7f4441a08000-7f4441a09000 r--p 00014000 08:04 3538963 /usr/lib64/libgcc_s-4.8.5-20150702.so.1 -7f4441a09000-7f4441a0a000 rw-p 00015000 08:04 3538963 /usr/lib64/libgcc_s-4.8.5-20150702.so.1 -7f4441a0a000-7f4441a4a000 r-xp 00000000 08:04 3545255 /usr/lib64/libmount.so.1.1.0 -7f4441a4a000-7f4441c4a000 ---p 00040000 08:04 3545255 /usr/lib64/libmount.so.1.1.0 -7f4441c4a000-7f4441c4b000 r--p 00040000 08:04 3545255 /usr/lib64/libmount.so.1.1.0 -7f4441c4b000-7f4441c4c000 rw-p 00041000 08:04 3545255 /usr/lib64/libmount.so.1.1.0 -7f4441c4c000-7f4441c4d000 rw-p 00000000 00:00 0 -7f4441c4d000-7f4441c63000 r-xp 00000000 08:04 3542716 /usr/lib64/libresolv-2.17.so -7f4441c63000-7f4441e62000 ---p 00016000 08:04 3542716 /usr/lib64/libresolv-2.17.so -7f4441e62000-7f4441e63000 r--p 00015000 08:04 3542716 /usr/lib64/libresolv-2.17.so -7f4441e63000-7f4441e64000 rw-p 00016000 08:04 3542716 /usr/lib64/libresolv-2.17.so -7f4441e64000-7f4441e66000 rw-p 00000000 00:00 0 -7f4441e66000-7f4441e8a000 r-xp 00000000 08:04 3543032 /usr/lib64/libselinux.so.1 -7f4441e8a000-7f4442089000 ---p 00024000 08:04 3543032 /usr/lib64/libselinux.so.1 -7f4442089000-7f444208a000 r--p 00023000 08:04 3543032 /usr/lib64/libselinux.so.1 -7f444208a000-7f444208b000 rw-p 00024000 08:04 3543032 /usr/lib64/libselinux.so.1 -7f444208b000-7f444208d000 rw-p 00000000 00:00 0 -7f444208d000-7f44420ed000 r-xp 00000000 08:04 3549973 /usr/lib64/libpcre.so.1.2.0 -7f44420ed000-7f44422ed000 ---p 00060000 08:04 3549973 /usr/lib64/libpcre.so.1.2.0 -7f44422ed000-7f44422ee000 r--p 00060000 08:04 3549973 /usr/lib64/libpcre.so.1.2.0 -7f44422ee000-7f44422ef000 rw-p 00061000 08:04 3549973 /usr/lib64/libpcre.so.1.2.0 -7f44422ef000-7f4442403000 r-xp 00000000 08:04 3545370 /usr/lib64/libglib-2.0.so.0.5600.1 -7f4442403000-7f4442602000 ---p 00114000 08:04 3545370 /usr/lib64/libglib-2.0.so.0.5600.1 -7f4442602000-7f4442603000 r--p 00113000 08:04 3545370 /usr/lib64/libglib-2.0.so.0.5600.1 -7f4442603000-7f4442604000 rw-p 00114000 08:04 3545370 /usr/lib64/libglib-2.0.so.0.5600.1 -7f4442604000-7f4442605000 rw-p 00000000 00:00 0 -7f4442605000-7f4442608000 r-xp 00000000 08:04 3545381 /usr/lib64/libgmodule-2.0.so.0.5600.1 -7f4442608000-7f4442807000 ---p 00003000 08:04 3545381 /usr/lib64/libgmodule-2.0.so.0.5600.1 -7f4442807000-7f4442808000 r--p 00002000 08:04 3545381 /usr/lib64/libgmodule-2.0.so.0.5600.1 -7f4442808000-7f4442809000 rw-p 00003000 08:04 3545381 /usr/lib64/libgmodule-2.0.so.0.5600.1 -7f4442809000-7f4442810000 r-xp 00000000 08:04 3539844 /usr/lib64/libffi.so.6.0.1 -7f4442810000-7f4442a0f000 ---p 00007000 08:04 3539844 /usr/lib64/libffi.so.6.0.1 -7f4442a0f000-7f4442a10000 r--p 00006000 08:04 3539844 /usr/lib64/libffi.so.6.0.1 -7f4442a10000-7f4442a11000 rw-p 00007000 08:04 3539844 /usr/lib64/libffi.so.6.0.1 -7f4442a11000-7f4442a60000 r-xp 00000000 08:04 3545780 /usr/lib64/libgobject-2.0.so.0.5600.1 -7f4442a60000-7f4442c5f000 ---p 0004f000 08:04 3545780 /usr/lib64/libgobject-2.0.so.0.5600.1 -7f4442c5f000-7f4442c60000 r--p 0004e000 08:04 3545780 /usr/lib64/libgobject-2.0.so.0.5600.1 -7f4442c60000-7f4442c61000 rw-p 0004f000 08:04 3545780 /usr/lib64/libgobject-2.0.so.0.5600.1 -7f4442c61000-7f4442df6000 r-xp 00000000 08:04 3540149 /usr/lib64/libgio-2.0.so.0.5600.1 -7f4442df6000-7f4442ff6000 ---p 00195000 08:04 3540149 /usr/lib64/libgio-2.0.so.0.5600.1 -7f4442ff6000-7f4442ffb000 r--p 00195000 08:04 3540149 /usr/lib64/libgio-2.0.so.0.5600.1 -7f4442ffb000-7f4442ffe000 rw-p 0019a000 08:04 3540149 /usr/lib64/libgio-2.0.so.0.5600.1 -7f4442ffe000-7f4443100000 rw-p 00000000 00:00 0 -7f4443200000-7f4443300000 rw-p 00000000 00:00 0 -7f44433fe000-7f4443401000 ---p 00000000 00:00 0 -7f4443401000-7f44436ff000 rw-p 00000000 00:00 0 -7f44436ff000-7f4443702000 ---p 00000000 00:00 0 -7f4443702000-7f4443900000 rw-p 00000000 00:00 0 -7f4443a00000-7f4443b00000 rw-p 00000000 00:00 0 -7f4443c00000-7f4443d00000 rw-p 00000000 00:00 0 -7f4443e00000-7f4444000000 rw-p 00000000 00:00 0 -7f4444000000-7f4444200000 rw-p 00000000 00:00 0 -7f4444200000-7f4444300000 rw-p 00000000 00:00 0 -7f4444400000-7f4444500000 rw-p 00000000 00:00 0 -7f4444600000-7f4444800000 rw-p 00000000 00:00 0 -7f4444800000-7f4444900000 rw-p 00000000 00:00 0 -7f4444a00000-7f4444c00000 rw-p 00000000 00:00 0 -7f4444c00000-7f4444d00000 rw-p 00000000 00:00 0 -7f4444e00000-7f4445000000 rw-p 00000000 00:00 0 -7f4445000000-7f4445200000 rw-p 00000000 00:00 0 -7f4445200000-7f4445400000 rw-p 00000000 00:00 0 -7f4445400000-7f4445600000 rw-p 00000000 00:00 0 -7f4445600000-7f4445700000 rw-p 00000000 00:00 0 -7f4445800000-7f4445900000 rw-p 00000000 00:00 0 -7f4445a00000-7f4445b00000 rw-p 00000000 00:00 0 -7f4445c00000-7f4445d00000 rw-p 00000000 00:00 0 -7f4445e00000-7f4445f00000 rw-p 00000000 00:00 0 -7f4446000000-7f4446100000 rw-p 00000000 00:00 0 -7f4446200000-7f4446300000 rw-p 00000000 00:00 0 -7f4446400000-7f4446500000 rw-p 00000000 00:00 0 -7f4446600000-7f4446700000 rw-p 00000000 00:00 0 -7f4446800000-7f4446900000 rw-p 00000000 00:00 0 -7f4446a00000-7f4446b00000 rw-p 00000000 00:00 0 -7f4446c00000-7f4446d00000 rw-p 00000000 00:00 0 -7f4446e00000-7f4446f00000 rw-p 00000000 00:00 0 -7f4447000000-7f4447100000 rw-p 00000000 00:00 0 -7f4447200000-7f4447300000 rw-p 00000000 00:00 0 -7f4447400000-7f4447500000 rw-p 00000000 00:00 0 -7f4447600000-7f4447700000 rw-p 00000000 00:00 0 -7f4447800000-7f4447900000 rw-p 00000000 00:00 0 -7f4447a00000-7f4447b00000 rw-p 00000000 00:00 0 -7f4447c00000-7f4447d00000 rw-p 00000000 00:00 0 -7f4447e00000-7f4447f00000 rw-p 00000000 00:00 0 -7f4448000000-7f4448100000 rw-p 00000000 00:00 0 -7f4448200000-7f4448300000 rw-p 00000000 00:00 0 -7f4448400000-7f4448500000 rw-p 00000000 00:00 0 -7f4448600000-7f4448700000 rw-p 00000000 00:00 0 -7f4448800000-7f4448900000 rw-p 00000000 00:00 0 -7f4448a00000-7f4448b00000 rw-p 00000000 00:00 0 -7f4448c00000-7f4448d00000 rw-p 00000000 00:00 0 -7f4448e00000-7f4448f00000 rw-p 00000000 00:00 0 -7f4449000000-7f4449100000 rw-p 00000000 00:00 0 -7f4449200000-7f4449300000 rw-p 00000000 00:00 0 -7f4449400000-7f4449500000 rw-p 00000000 00:00 0 -7f4449600000-7f4449700000 rw-p 00000000 00:00 0 -7f4449800000-7f4449a00000 rw-p 00000000 00:00 0 -7f4449a00000-7f4449b00000 rw-p 00000000 00:00 0 -7f4449c00000-7f4449d00000 rw-p 00000000 00:00 0 -7f4449e00000-7f4449f00000 rw-p 00000000 00:00 0 -7f444a000000-7f444a100000 rw-p 00000000 00:00 0 -7f444a200000-7f444a300000 rw-p 00000000 00:00 0 -7f444a400000-7f444a500000 rw-p 00000000 00:00 0 -7f444a600000-7f444a700000 rw-p 00000000 00:00 0 -7f444a800000-7f444a900000 rw-p 00000000 00:00 0 -7f444aa00000-7f444ab00000 rw-p 00000000 00:00 0 -7f444ac00000-7f444ad00000 rw-p 00000000 00:00 0 -7f444ae00000-7f444af00000 rw-p 00000000 00:00 0 -7f444b000000-7f444b100000 rw-p 00000000 00:00 0 -7f444b200000-7f444b300000 rw-p 00000000 00:00 0 -7f444b400000-7f444b500000 rw-p 00000000 00:00 0 -7f444b600000-7f444b700000 rw-p 00000000 00:00 0 -7f444b800000-7f444b900000 rw-p 00000000 00:00 0 -7f444ba00000-7f444bb00000 rw-p 00000000 00:00 0 -7f444bc00000-7f444bd00000 rw-p 00000000 00:00 0 -7f444be00000-7f444bf00000 rw-p 00000000 00:00 0 -7f444c000000-7f444c100000 rw-p 00000000 00:00 0 -7f444c200000-7f444c300000 rw-p 00000000 00:00 0 -7f444c400000-7f444c500000 rw-p 00000000 00:00 0 -7f444c600000-7f444c700000 rw-p 00000000 00:00 0 -7f444c800000-7f444c900000 rw-p 00000000 00:00 0 -7f444ca00000-7f444cb00000 rw-p 00000000 00:00 0 -7f444cc00000-7f444cd00000 rw-p 00000000 00:00 0 -7f444ce00000-7f444cf00000 rw-p 00000000 00:00 0 -7f444d000000-7f444d100000 rw-p 00000000 00:00 0 -7f444d200000-7f444d300000 rw-p 00000000 00:00 0 -7f444d400000-7f444d500000 rw-p 00000000 00:00 0 -7f444d600000-7f444d700000 rw-p 00000000 00:00 0 -7f444d800000-7f444d900000 rw-p 00000000 00:00 0 -7f444da00000-7f444db00000 rw-p 00000000 00:00 0 -7f444dc00000-7f444dd00000 rw-p 00000000 00:00 0 -7f444de00000-7f444df00000 rw-p 00000000 00:00 0 -7f444e000000-7f444e100000 rw-p 00000000 00:00 0 -7f444e200000-7f444e300000 rw-p 00000000 00:00 0 -7f444e400000-7f444e500000 rw-p 00000000 00:00 0 -7f444e600000-7f444e700000 rw-p 00000000 00:00 0 -7f444e800000-7f444e900000 rw-p 00000000 00:00 0 -7f444ea00000-7f444eb00000 rw-p 00000000 00:00 0 -7f444ec00000-7f444ed00000 rw-p 00000000 00:00 0 -7f444ee00000-7f444ef00000 rw-p 00000000 00:00 0 -7f444f000000-7f444f200000 rw-p 00000000 00:00 0 -7f444f200000-7f444f300000 rw-p 00000000 00:00 0 -7f444f400000-7f444f500000 rw-p 00000000 00:00 0 -7f444f600000-7f444f700000 rw-p 00000000 00:00 0 -7f444f800000-7f444f900000 rw-p 00000000 00:00 0 -7f444fa00000-7f444fb00000 rw-p 00000000 00:00 0 -7f444fc00000-7f444fd00000 rw-p 00000000 00:00 0 -7f444fe00000-7f444ff00000 rw-p 00000000 00:00 0 -7f4450000000-7f4450100000 rw-p 00000000 00:00 0 -7f4450200000-7f4450300000 rw-p 00000000 00:00 0 -7f4450400000-7f4450500000 rw-p 00000000 00:00 0 -7f4450600000-7f4450700000 rw-p 00000000 00:00 0 -7f4450800000-7f4450900000 rw-p 00000000 00:00 0 -7f4450a00000-7f4450b00000 rw-p 00000000 00:00 0 -7f4450c00000-7f4450d00000 rw-p 00000000 00:00 0 -7f4450e00000-7f4450f00000 rw-p 00000000 00:00 0 -7f4451000000-7f4451100000 rw-p 00000000 00:00 0 -7f4451200000-7f4451300000 rw-p 00000000 00:00 0 -7f4451400000-7f4451500000 rw-p 00000000 00:00 0 -7f4451600000-7f4451700000 rw-p 00000000 00:00 0 -7f4451800000-7f4451900000 rw-p 00000000 00:00 0 -7f4451a00000-7f4451b00000 rw-p 00000000 00:00 0 -7f4451c00000-7f4451d00000 rw-p 00000000 00:00 0 -7f4451e00000-7f4452000000 rw-p 00000000 00:00 0 -7f4452000000-7f4452100000 rw-p 00000000 00:00 0 -7f4452200000-7f4452300000 rw-p 00000000 00:00 0 -7f4452400000-7f4452500000 rw-p 00000000 00:00 0 -7f4452600000-7f4452700000 rw-p 00000000 00:00 0 -7f4452800000-7f4452900000 rw-p 00000000 00:00 0 -7f4452a00000-7f4452b00000 rw-p 00000000 00:00 0 -7f4452c00000-7f4452d00000 rw-p 00000000 00:00 0 -7f4452e00000-7f4452f00000 rw-p 00000000 00:00 0 -7f4453000000-7f4453100000 rw-p 00000000 00:00 0 -7f4453200000-7f4453300000 rw-p 00000000 00:00 0 -7f4453400000-7f4453500000 rw-p 00000000 00:00 0 -7f4453600000-7f4453700000 rw-p 00000000 00:00 0 -7f4453800000-7f4453900000 rw-p 00000000 00:00 0 -7f4453a00000-7f4453b00000 rw-p 00000000 00:00 0 -7f4453c00000-7f4453d00000 rw-p 00000000 00:00 0 -7f4453e00000-7f4453f00000 rw-p 00000000 00:00 0 -7f4454000000-7f4454100000 rw-p 00000000 00:00 0 -7f4454200000-7f4454300000 rw-p 00000000 00:00 0 -7f4454400000-7f4454500000 rw-p 00000000 00:00 0 -7f4454600000-7f4454700000 rw-p 00000000 00:00 0 -7f4454800000-7f4454900000 rw-p 00000000 00:00 0 -7f4454a00000-7f4454b00000 rw-p 00000000 00:00 0 -7f4454c00000-7f4454d00000 rw-p 00000000 00:00 0 -7f4454e00000-7f4454f00000 rw-p 00000000 00:00 0 -7f4455000000-7f4455100000 rw-p 00000000 00:00 0 -7f4455200000-7f4455300000 rw-p 00000000 00:00 0 -7f4455400000-7f4455500000 rw-p 00000000 00:00 0 -7f4455600000-7f4455700000 rw-p 00000000 00:00 0 -7f4455800000-7f4455900000 rw-p 00000000 00:00 0 -7f4455a00000-7f4455b00000 rw-p 00000000 00:00 0 -7f4455c00000-7f4455d00000 rw-p 00000000 00:00 0 -7f4455e00000-7f4455f00000 rw-p 00000000 00:00 0 -7f4456000000-7f4456100000 rw-p 00000000 00:00 0 -7f4456200000-7f4456300000 rw-p 00000000 00:00 0 -7f4456400000-7f4456500000 rw-p 00000000 00:00 0 -7f4456600000-7f4456700000 rw-p 00000000 00:00 0 -7f4456800000-7f4456900000 rw-p 00000000 00:00 0 -7f4456a00000-7f4456b00000 rw-p 00000000 00:00 0 -7f4456c00000-7f4456d00000 rw-p 00000000 00:00 0 -7f4456e00000-7f4456f00000 rw-p 00000000 00:00 0 -7f4457000000-7f4457100000 rw-p 00000000 00:00 0 -7f4457200000-7f4457300000 rw-p 00000000 00:00 0 -7f4457400000-7f4457500000 rw-p 00000000 00:00 0 -7f4457600000-7f4457700000 rw-p 00000000 00:00 0 -7f4457800000-7f4457900000 rw-p 00000000 00:00 0 -7f4457a00000-7f4457b00000 rw-p 00000000 00:00 0 -7f4457c00000-7f4457e00000 rw-p 00000000 00:00 0 -7f4457e00000-7f4457f00000 rw-p 00000000 00:00 0 -7f4458000000-7f4458021000 rw-p 00000000 00:00 0 -7f4458021000-7f445c000000 ---p 00000000 00:00 0 -7f445c100000-7f445c200000 rw-p 00000000 00:00 0 -7f445c300000-7f445c400000 rw-p 00000000 00:00 0 -7f445c500000-7f445c600000 rw-p 00000000 00:00 0 -7f445c700000-7f445c800000 rw-p 00000000 00:00 0 -7f445c900000-7f445ca00000 rw-p 00000000 00:00 0 -7f445cb00000-7f445cc00000 rw-p 00000000 00:00 0 -7f445cd00000-7f445ce00000 rw-p 00000000 00:00 0 -7f445cf00000-7f445d000000 rw-p 00000000 00:00 0 -7f445d100000-7f445d200000 rw-p 00000000 00:00 0 -7f445d300000-7f445d400000 rw-p 00000000 00:00 0 -7f445d4ff000-7f445d502000 ---p 00000000 00:00 0 -7f445d502000-7f445d700000 rw-p 00000000 00:00 0 -7f445d800000-7f445d900000 rw-p 00000000 00:00 0 -7f445da00000-7f445db00000 rw-p 00000000 00:00 0 -7f445dc00000-7f445dd00000 rw-p 00000000 00:00 0 -7f445de00000-7f445df00000 rw-p 00000000 00:00 0 -7f445e000000-7f445e100000 rw-p 00000000 00:00 0 -7f445e200000-7f445e300000 rw-p 00000000 00:00 0 -7f445e400000-7f445e500000 rw-p 00000000 00:00 0 -7f445e600000-7f445e700000 rw-p 00000000 00:00 0 -7f445e800000-7f445e900000 rw-p 00000000 00:00 0 -7f445ea00000-7f445eb00000 rw-p 00000000 00:00 0 -7f445ec00000-7f445ed00000 rw-p 00000000 00:00 0 -7f445ee00000-7f445ef00000 rw-p 00000000 00:00 0 -7f445f000000-7f445f100000 rw-p 00000000 00:00 0 -7f445f200000-7f445f300000 rw-p 00000000 00:00 0 -7f445f400000-7f445f500000 rw-p 00000000 00:00 0 -7f445f600000-7f445f700000 rw-p 00000000 00:00 0 -7f445f800000-7f445f900000 rw-p 00000000 00:00 0 -7f445fa00000-7f445fb00000 rw-p 00000000 00:00 0 -7f445fc00000-7f445fd00000 rw-p 00000000 00:00 0 -7f445fe00000-7f445ff00000 rw-p 00000000 00:00 0 -7f4460000000-7f4460100000 rw-p 00000000 00:00 0 -7f4460200000-7f4460300000 rw-p 00000000 00:00 0 -7f4460400000-7f4460500000 rw-p 00000000 00:00 0 -7f4460600000-7f4460700000 rw-p 00000000 00:00 0 -7f4460800000-7f4460a00000 rw-p 00000000 00:00 0 -7f4460a00000-7f4460b00000 rw-p 00000000 00:00 0 -7f4460c00000-7f4460d00000 rw-p 00000000 00:00 0 -7f4460e00000-7f4460f00000 rw-p 00000000 00:00 0 -7f4461000000-7f4461100000 rw-p 00000000 00:00 0 -7f4461200000-7f4461300000 rw-p 00000000 00:00 0 -7f4461400000-7f4461500000 rw-p 00000000 00:00 0 -7f4461600000-7f4461700000 rw-p 00000000 00:00 0 -7f4461800000-7f4461900000 rw-p 00000000 00:00 0 -7f4461a00000-7f4461b00000 rw-p 00000000 00:00 0 -7f4461c00000-7f4461d00000 rw-p 00000000 00:00 0 -7f4461e00000-7f4461f00000 rw-p 00000000 00:00 0 -7f4462000000-7f4462100000 rw-p 00000000 00:00 0 -7f4462200000-7f4462300000 rw-p 00000000 00:00 0 -7f4462400000-7f4462500000 rw-p 00000000 00:00 0 -7f4462600000-7f4462700000 rw-p 00000000 00:00 0 -7f4462800000-7f4462900000 rw-p 00000000 00:00 0 -7f4462a00000-7f4462b00000 rw-p 00000000 00:00 0 -7f4462c00000-7f4462d00000 rw-p 00000000 00:00 0 -7f4462e00000-7f4463000000 rw-p 00000000 00:00 0 -7f4463000000-7f4463100000 rw-p 00000000 00:00 0 -7f4463200000-7f4463300000 rw-p 00000000 00:00 0 -7f4463400000-7f4463500000 rw-p 00000000 00:00 0 -7f4463600000-7f4463700000 rw-p 00000000 00:00 0 -7f4463800000-7f4463900000 rw-p 00000000 00:00 0 -7f4463a00000-7f4463b00000 rw-p 00000000 00:00 0 -7f4463c00000-7f4463d00000 rw-p 00000000 00:00 0 -7f4463e00000-7f4463f00000 rw-p 00000000 00:00 0 -7f4464000000-7f4464021000 rw-p 00000000 00:00 0 -7f4464021000-7f4468000000 ---p 00000000 00:00 0 -7f4468000000-7f4468100000 rw-p 00000000 00:00 0 -7f4468200000-7f4468300000 rw-p 00000000 00:00 0 -7f4468400000-7f4468500000 rw-p 00000000 00:00 0 -7f4468600000-7f4468700000 rw-p 00000000 00:00 0 -7f4468800000-7f4468900000 rw-p 00000000 00:00 0 -7f4468a00000-7f4468b00000 rw-p 00000000 00:00 0 -7f4468c00000-7f4468d00000 rw-p 00000000 00:00 0 -7f4468e00000-7f4468f00000 rw-p 00000000 00:00 0 -7f4469000000-7f4469100000 rw-p 00000000 00:00 0 -7f4469200000-7f4469300000 rw-p 00000000 00:00 0 -7f4469400000-7f4469500000 rw-p 00000000 00:00 0 -7f4469600000-7f4469700000 rw-p 00000000 00:00 0 -7f4469800000-7f4469900000 rw-p 00000000 00:00 0 -7f4469a00000-7f4469b00000 rw-p 00000000 00:00 0 -7f4469c00000-7f4469d00000 rw-p 00000000 00:00 0 -7f4469e00000-7f4469f00000 rw-p 00000000 00:00 0 -7f446a000000-7f446a100000 rw-p 00000000 00:00 0 -7f446a200000-7f446a300000 rw-p 00000000 00:00 0 -7f446a400000-7f446a500000 rw-p 00000000 00:00 0 -7f446a600000-7f446a700000 rw-p 00000000 00:00 0 -7f446a800000-7f446a900000 rw-p 00000000 00:00 0 -7f446aa00000-7f446ab00000 rw-p 00000000 00:00 0 -7f446ac00000-7f446ad00000 rw-p 00000000 00:00 0 -7f446ae00000-7f446af00000 rw-p 00000000 00:00 0 -7f446b000000-7f446b100000 rw-p 00000000 00:00 0 -7f446b200000-7f446b300000 rw-p 00000000 00:00 0 -7f446b400000-7f446b500000 rw-p 00000000 00:00 0 -7f446b600000-7f446b700000 rw-p 00000000 00:00 0 -7f446b800000-7f446b900000 rw-p 00000000 00:00 0 -7f446ba00000-7f446bb00000 rw-p 00000000 00:00 0 -7f446bc00000-7f446bd00000 rw-p 00000000 00:00 0 -7f446be00000-7f446bf00000 rw-p 00000000 00:00 0 -7f446c000000-7f446c021000 rw-p 00000000 00:00 0 -7f446c021000-7f4470000000 ---p 00000000 00:00 0 -7f4470000000-7f4470021000 rw-p 00000000 00:00 0 -7f4470021000-7f4474000000 ---p 00000000 00:00 0 -7f4474000000-7f4474155000 rw-p 00000000 00:00 0 -7f4474155000-7f4478000000 ---p 00000000 00:00 0 -7f4478000000-7f4479c7a000 rw-p 00000000 00:00 0 -7f4479c7a000-7f447c000000 ---p 00000000 00:00 0 -7f447c000000-7f447c2f7000 rw-p 00000000 00:00 0 -7f447c2f7000-7f4480000000 ---p 00000000 00:00 0 -7f4480000000-7f44800de000 rw-p 00000000 00:00 0 -7f44800de000-7f4484000000 ---p 00000000 00:00 0 -7f4484000000-7f4484021000 rw-p 00000000 00:00 0 -7f4484021000-7f4488000000 ---p 00000000 00:00 0 -7f4488100000-7f4488200000 rw-p 00000000 00:00 0 -7f4488300000-7f4488400000 rw-p 00000000 00:00 0 -7f4488500000-7f4488600000 rw-p 00000000 00:00 0 -7f4488700000-7f4488800000 rw-p 00000000 00:00 0 -7f4488900000-7f4488a00000 rw-p 00000000 00:00 0 -7f4488b00000-7f4488c00000 rw-p 00000000 00:00 0 -7f4488d00000-7f4488e00000 rw-p 00000000 00:00 0 -7f4488f00000-7f4489000000 rw-p 00000000 00:00 0 -7f4489100000-7f4489200000 rw-p 00000000 00:00 0 -7f4489300000-7f4489400000 rw-p 00000000 00:00 0 -7f4489500000-7f4489600000 rw-p 00000000 00:00 0 -7f4489700000-7f4489800000 rw-p 00000000 00:00 0 -7f4489900000-7f4489a00000 rw-p 00000000 00:00 0 -7f4489ad6000-7f4490000000 r--p 00000000 08:04 3820473 /usr/lib/locale/locale-archive -7f4490000000-7f4490021000 rw-p 00000000 00:00 0 -7f4490021000-7f4494000000 ---p 00000000 00:00 0 -7f4494000000-7f4494021000 rw-p 00000000 00:00 0 -7f4494021000-7f4498000000 ---p 00000000 00:00 0 -7f4498000000-7f4498021000 rw-p 00000000 00:00 0 -7f4498021000-7f449c000000 ---p 00000000 00:00 0 -7f449c100000-7f449c200000 rw-p 00000000 00:00 0 -7f449c300000-7f449c400000 rw-p 00000000 00:00 0 -7f449c500000-7f449c600000 rw-p 00000000 00:00 0 -7f449c660000-7f44ac000000 rw-p 00000000 00:00 0 -7f44ac000000-7f44ac021000 rw-p 00000000 00:00 0 -7f44ac021000-7f44b0000000 ---p 00000000 00:00 0 -7f44b0000000-7f44b0021000 rw-p 00000000 00:00 0 -7f44b0021000-7f44b4000000 ---p 00000000 00:00 0 -7f44b4000000-7f44b4021000 rw-p 00000000 00:00 0 -7f44b4021000-7f44b8000000 ---p 00000000 00:00 0 -7f44b8000000-7f44b8100000 rw-s 00000000 00:04 1281123 /dev/zero (deleted) -7f44b8100000-7f44b8200000 rw-p 00000000 00:00 0 -7f44b82ff000-7f44b8302000 ---p 00000000 00:00 0 -7f44b8302000-7f44b8500000 rw-p 00000000 00:00 0 -7f44b8502000-7f44b8523000 r--s 00000000 08:04 3811338 /usr/share/mime/mime.cache -7f44b8523000-7f44b858f000 r--s 0101a000 08:03 82448015 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/graaljs.jar -7f44b858f000-7f44b8600000 r--s 00bc1000 08:03 82448016 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/icu4j.jar -7f44b8600000-7f44b8700000 rw-p 00000000 00:00 0 -7f44b870e000-7f44b870f000 rw-p 00000000 00:00 0 -7f44b870f000-7f44b8710000 r--p 00000000 00:00 0 -7f44b8710000-7f44b8711000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8711000-7f44b8712000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8712000-7f44b8713000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8713000-7f44b8714000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8714000-7f44b8715000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8715000-7f44b8716000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8716000-7f44b8717000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8717000-7f44b8718000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8718000-7f44b8800000 r--s 01c58000 08:03 85329268 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/python/graalpython.jar -7f44b8800000-7f44b8900000 rw-p 00000000 00:00 0 -7f44b8900000-7f44b8901000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8901000-7f44b8902000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8902000-7f44b896b000 r--s 00bdc000 08:03 85328286 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/llvm/sulong.jar -7f44b896b000-7f44b89d6000 r--s 00fc8000 08:03 85328376 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci/graal.jar -7f44b89d6000-7f44b89ed000 r-xp 00000000 08:03 85328739 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnet.so -7f44b89ed000-7f44b8bec000 ---p 00017000 08:03 85328739 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnet.so -7f44b8bec000-7f44b8bed000 r--p 00016000 08:03 85328739 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnet.so -7f44b8bed000-7f44b8bee000 rw-p 00017000 08:03 85328739 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnet.so -7f44b8bee000-7f44b8bff000 r-xp 00000000 08:03 85328746 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnio.so -7f44b8bff000-7f44b8dfe000 ---p 00011000 08:03 85328746 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnio.so -7f44b8dfe000-7f44b8dff000 r--p 00010000 08:03 85328746 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnio.so -7f44b8dff000-7f44b8e00000 rw-p 00011000 08:03 85328746 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libnio.so -7f44b8e00000-7f44b8f00000 rw-p 00000000 00:00 0 -7f44b8f00000-7f44b8f01000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8f01000-7f44b8f02000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8f02000-7f44b8f03000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8f03000-7f44b8f04000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8f04000-7f44b8f05000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8f05000-7f44b8f06000 rw-s 00000000 00:05 31275 /dev/nvidiactl -7f44b8f06000-7f44b8f0d000 r--s 00000000 08:04 3805103 /usr/lib64/gconv/gconv-modules.cache -7f44b8f0d000-7f44b8f0e000 r--s 00010000 08:03 85328726 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/ext/zipfs.jar -7f44b8f0e000-7f44b8f12000 r--s 00059000 08:03 85328471 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/profiler/truffle-profiler.jar -7f44b8f12000-7f44b8f19000 r--s 000f0000 08:03 85328468 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/lsp/lsp.jar -7f44b8f19000-7f44b8f23000 r--s 000d4000 08:03 85328461 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/chromeinspector/chromeinspector.jar -7f44b8f23000-7f44b8f4b000 r--s 004f1000 08:03 85328454 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/truffle/truffle-api.jar -7f44b8f4b000-7f44b8f7c000 rw-p 00000000 00:00 0 -7f44b8f7c000-7f44b8f91000 r-xp 00000000 08:04 3543191 /usr/lib64/libz.so.1.2.7 -7f44b8f91000-7f44b9190000 ---p 00015000 08:04 3543191 /usr/lib64/libz.so.1.2.7 -7f44b9190000-7f44b9191000 r--p 00014000 08:04 3543191 /usr/lib64/libz.so.1.2.7 -7f44b9191000-7f44b9192000 rw-p 00015000 08:04 3543191 /usr/lib64/libz.so.1.2.7 -7f44b9192000-7f44bacef000 r-xp 00000000 08:03 85328354 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjvmcicompiler.so -7f44bacef000-7f44baeef000 rw-p 01b5d000 08:03 85328354 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjvmcicompiler.so -7f44baeef000-7f44baef3000 r-xp 01d5d000 08:03 85328354 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjvmcicompiler.so -7f44baef3000-7f44bb0f2000 ---p 01d61000 08:03 85328354 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjvmcicompiler.so -7f44bb0f2000-7f44bb0f5000 rw-p 01d60000 08:03 85328354 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjvmcicompiler.so -7f44bb0f5000-7f44bb0f6000 ---p 00000000 00:00 0 -7f44bb0f6000-7f44bb1f6000 rw-p 00000000 00:00 0 -7f44bb1f6000-7f44bb1f9000 ---p 00000000 00:00 0 -7f44bb1f9000-7f44bb2f7000 rw-p 00000000 00:00 0 -7f44bb2f7000-7f44bb2fb000 ---p 00000000 00:00 0 -7f44bb2fb000-7f44bb4f8000 rw-p 00000000 00:00 0 -7f44bb4f8000-7f44bb4fc000 ---p 00000000 00:00 0 -7f44bb4fc000-7f44bb6f9000 rw-p 00000000 00:00 0 -7f44bb6f9000-7f44bb6fd000 ---p 00000000 00:00 0 -7f44bb6fd000-7f44bb8fa000 rw-p 00000000 00:00 0 -7f44bb8fa000-7f44bb8fe000 ---p 00000000 00:00 0 -7f44bb8fe000-7f44bbafb000 rw-p 00000000 00:00 0 -7f44bbafb000-7f44bbafe000 ---p 00000000 00:00 0 -7f44bbafe000-7f44bbbfc000 rw-p 00000000 00:00 0 -7f44bbbfc000-7f44bbbff000 ---p 00000000 00:00 0 -7f44bbbff000-7f44bbcfd000 rw-p 00000000 00:00 0 -7f44bbcfd000-7f44bbd00000 ---p 00000000 00:00 0 -7f44bbd00000-7f44bbdfe000 rw-p 00000000 00:00 0 -7f44bbdfe000-7f44bbdff000 ---p 00000000 00:00 0 -7f44bbdff000-7f44bc000000 rw-p 00000000 00:00 0 -7f44bc000000-7f44bc021000 rw-p 00000000 00:00 0 -7f44bc021000-7f44c0000000 ---p 00000000 00:00 0 -7f44c0000000-7f44c0021000 rw-p 00000000 00:00 0 -7f44c0021000-7f44c4000000 ---p 00000000 00:00 0 -7f44c4000000-7f44c4021000 rw-p 00000000 00:00 0 -7f44c4021000-7f44c8000000 ---p 00000000 00:00 0 -7f44c8000000-7f44c8021000 rw-p 00000000 00:00 0 -7f44c8021000-7f44cc000000 ---p 00000000 00:00 0 -7f44cc000000-7f44cc021000 rw-p 00000000 00:00 0 -7f44cc021000-7f44d0000000 ---p 00000000 00:00 0 -7f44d0000000-7f44d0003000 r--s 00026000 08:03 85328458 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/agentscript/agentscript.jar -7f44d0003000-7f44d0006000 r--s 00027000 08:03 85328464 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/coverage/truffle-coverage.jar -7f44d0006000-7f44d0008000 r--s 00007000 08:03 82448019 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/asm-analysis-7.1.jar -7f44d0008000-7f44d000a000 r--s 00010000 08:03 82448020 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/asm-commons-7.1.jar -7f44d000a000-7f44d000c000 r--s 0001b000 08:03 82448017 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/asm-7.1.jar -7f44d000c000-7f44d000e000 r--s 0000b000 08:03 82448018 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/asm-tree-7.1.jar -7f44d000e000-7f44d0012000 r--s 0007d000 08:03 82445437 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/trufflenode.jar -7f44d0012000-7f44d0023000 r--s 00165000 08:03 85590076 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/grcuda/grcuda.jar -7f44d0023000-7f44d1bc4000 rw-p 00000000 00:00 0 -7f44d1bc4000-7f44d1d93000 r--s 03c60000 08:03 85328781 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/rt.jar -7f44d1d93000-7f44d2664000 rw-p 00000000 00:00 0 -7f44d2664000-7f44d36d4000 rw-p 00000000 00:00 0 -7f44d36d4000-7f44d4065000 ---p 00000000 00:00 0 -7f44d4065000-7f44d413b000 rw-p 00000000 00:00 0 -7f44d413b000-7f44d4acb000 ---p 00000000 00:00 0 -7f44d4acb000-7f44d4b2a000 rw-p 00000000 00:00 0 -7f44d4b2a000-7f44d4fff000 ---p 00000000 00:00 0 -7f44d4fff000-7f44d5000000 rw-p 00000000 00:00 0 -7f44d5000000-7f44d66d0000 rwxp 00000000 00:00 0 -7f44d66d0000-7f44e4000000 ---p 00000000 00:00 0 -7f44e4000000-7f44e60cd000 rw-p 00000000 00:00 0 -7f44e60cd000-7f44e8000000 ---p 00000000 00:00 0 -7f44e8000000-7f44e8001000 r--s 0000a000 08:03 85328467 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/tools/lsp/lsp-api.jar -7f44e8001000-7f44e8010000 r--s 0022a000 08:03 85328343 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/regex/tregex.jar -7f44e8010000-7f44e8031000 rw-p 00000000 00:00 0 -7f44e8031000-7f44e8032000 ---p 00000000 00:00 0 -7f44e8032000-7f44e8132000 rw-p 00000000 00:00 0 -7f44e8132000-7f44e8133000 ---p 00000000 00:00 0 -7f44e8133000-7f44e8233000 rw-p 00000000 00:00 0 -7f44e8233000-7f44e8234000 ---p 00000000 00:00 0 -7f44e8234000-7f44e8334000 rw-p 00000000 00:00 0 -7f44e8334000-7f44e8335000 ---p 00000000 00:00 0 -7f44e8335000-7f44e8435000 rw-p 00000000 00:00 0 -7f44e8435000-7f44e8436000 ---p 00000000 00:00 0 -7f44e8436000-7f44e8536000 rw-p 00000000 00:00 0 -7f44e8536000-7f44e8537000 ---p 00000000 00:00 0 -7f44e8537000-7f44e8637000 rw-p 00000000 00:00 0 -7f44e8637000-7f44e8638000 ---p 00000000 00:00 0 -7f44e8638000-7f44e8738000 rw-p 00000000 00:00 0 -7f44e8738000-7f44e8739000 ---p 00000000 00:00 0 -7f44e8739000-7f44e8895000 rw-p 00000000 00:00 0 -7f44e8895000-7f44e8bf9000 ---p 00000000 00:00 0 -7f44e8bf9000-7f44e8c14000 r-xp 00000000 08:03 85328749 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libzip.so -7f44e8c14000-7f44e8e14000 ---p 0001b000 08:03 85328749 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libzip.so -7f44e8e14000-7f44e8e15000 r--p 0001b000 08:03 85328749 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libzip.so -7f44e8e15000-7f44e8e16000 rw-p 0001c000 08:03 85328749 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libzip.so -7f44e8e16000-7f44e8e22000 r-xp 00000000 08:04 3552420 /usr/lib64/libnss_ldap.so.2 -7f44e8e22000-7f44e9021000 ---p 0000c000 08:04 3552420 /usr/lib64/libnss_ldap.so.2 -7f44e9021000-7f44e9022000 r--p 0000b000 08:04 3552420 /usr/lib64/libnss_ldap.so.2 -7f44e9022000-7f44e9023000 rw-p 0000c000 08:04 3552420 /usr/lib64/libnss_ldap.so.2 -7f44e9023000-7f44e902b000 r-xp 00000000 08:04 3551687 /usr/lib64/libnss_sss.so.2 -7f44e902b000-7f44e922a000 ---p 00008000 08:04 3551687 /usr/lib64/libnss_sss.so.2 -7f44e922a000-7f44e922b000 r--p 00007000 08:04 3551687 /usr/lib64/libnss_sss.so.2 -7f44e922b000-7f44e922c000 rw-p 00008000 08:04 3551687 /usr/lib64/libnss_sss.so.2 -7f44e922c000-7f44e9238000 r-xp 00000000 08:04 3542623 /usr/lib64/libnss_files-2.17.so -7f44e9238000-7f44e9437000 ---p 0000c000 08:04 3542623 /usr/lib64/libnss_files-2.17.so -7f44e9437000-7f44e9438000 r--p 0000b000 08:04 3542623 /usr/lib64/libnss_files-2.17.so -7f44e9438000-7f44e9439000 rw-p 0000c000 08:04 3542623 /usr/lib64/libnss_files-2.17.so -7f44e9439000-7f44e943f000 rw-p 00000000 00:00 0 -7f44e943f000-7f44e9467000 r-xp 00000000 08:03 85328775 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjava.so -7f44e9467000-7f44e9666000 ---p 00028000 08:03 85328775 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjava.so -7f44e9666000-7f44e9667000 r--p 00027000 08:03 85328775 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjava.so -7f44e9667000-7f44e9669000 rw-p 00028000 08:03 85328775 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libjava.so -7f44e9669000-7f44e9678000 r-xp 00000000 08:03 85328763 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libverify.so -7f44e9678000-7f44e9877000 ---p 0000f000 08:03 85328763 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libverify.so -7f44e9877000-7f44e9879000 r--p 0000e000 08:03 85328763 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libverify.so -7f44e9879000-7f44e987a000 rw-p 00010000 08:03 85328763 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/libverify.so -7f44e987a000-7f44e9881000 r-xp 00000000 08:04 3542720 /usr/lib64/librt-2.17.so -7f44e9881000-7f44e9a80000 ---p 00007000 08:04 3542720 /usr/lib64/librt-2.17.so -7f44e9a80000-7f44e9a81000 r--p 00006000 08:04 3542720 /usr/lib64/librt-2.17.so -7f44e9a81000-7f44e9a82000 rw-p 00007000 08:04 3542720 /usr/lib64/librt-2.17.so -7f44e9a82000-7f44e9b83000 r-xp 00000000 08:04 3542599 /usr/lib64/libm-2.17.so -7f44e9b83000-7f44e9d82000 ---p 00101000 08:04 3542599 /usr/lib64/libm-2.17.so -7f44e9d82000-7f44e9d83000 r--p 00100000 08:04 3542599 /usr/lib64/libm-2.17.so -7f44e9d83000-7f44e9d84000 rw-p 00101000 08:04 3542599 /usr/lib64/libm-2.17.so -7f44e9d84000-7f44eaae7000 r-xp 00000000 08:03 85328771 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/server/libjvm.so -7f44eaae7000-7f44eace6000 ---p 00d63000 08:03 85328771 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/server/libjvm.so -7f44eace6000-7f44eadaf000 rw-p 00d62000 08:03 85328771 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/amd64/server/libjvm.so -7f44eadaf000-7f44eade1000 rw-p 00000000 00:00 0 -7f44eade1000-7f44eafa3000 r-xp 00000000 08:04 3539525 /usr/lib64/libc-2.17.so -7f44eafa3000-7f44eb1a3000 ---p 001c2000 08:04 3539525 /usr/lib64/libc-2.17.so -7f44eb1a3000-7f44eb1a7000 r--p 001c2000 08:04 3539525 /usr/lib64/libc-2.17.so -7f44eb1a7000-7f44eb1a9000 rw-p 001c6000 08:04 3539525 /usr/lib64/libc-2.17.so -7f44eb1a9000-7f44eb1ae000 rw-p 00000000 00:00 0 -7f44eb1ae000-7f44eb1b0000 r-xp 00000000 08:04 3542593 /usr/lib64/libdl-2.17.so -7f44eb1b0000-7f44eb3b0000 ---p 00002000 08:04 3542593 /usr/lib64/libdl-2.17.so -7f44eb3b0000-7f44eb3b1000 r--p 00002000 08:04 3542593 /usr/lib64/libdl-2.17.so -7f44eb3b1000-7f44eb3b2000 rw-p 00003000 08:04 3542593 /usr/lib64/libdl-2.17.so -7f44eb3b2000-7f44eb3c8000 r-xp 00000000 08:03 85328806 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/amd64/jli/libjli.so -7f44eb3c8000-7f44eb5c7000 ---p 00016000 08:03 85328806 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/amd64/jli/libjli.so -7f44eb5c7000-7f44eb5c8000 r--p 00015000 08:03 85328806 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/amd64/jli/libjli.so -7f44eb5c8000-7f44eb5c9000 rw-p 00016000 08:03 85328806 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/amd64/jli/libjli.so -7f44eb5c9000-7f44eb5e0000 r-xp 00000000 08:04 3539551 /usr/lib64/libpthread-2.17.so -7f44eb5e0000-7f44eb7df000 ---p 00017000 08:04 3539551 /usr/lib64/libpthread-2.17.so -7f44eb7df000-7f44eb7e0000 r--p 00016000 08:04 3539551 /usr/lib64/libpthread-2.17.so -7f44eb7e0000-7f44eb7e1000 rw-p 00017000 08:04 3539551 /usr/lib64/libpthread-2.17.so -7f44eb7e1000-7f44eb7e5000 rw-p 00000000 00:00 0 -7f44eb7e5000-7f44eb807000 r-xp 00000000 08:04 3539518 /usr/lib64/ld-2.17.so -7f44eb807000-7f44eb808000 r--s 00013000 08:03 82448021 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/js/asm-util-7.1.jar -7f44eb808000-7f44eb80a000 r--s 00012000 08:03 85328287 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/llvm/sulong-api.jar -7f44eb80a000-7f44eb814000 r--s 000d5000 08:03 85328340 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/nfi/truffle-nfi.jar -7f44eb814000-7f44eb815000 r--s 00000000 08:03 85328378 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci/graal-truffle-jfr-impl.jar -7f44eb815000-7f44eb8da000 rw-p 00000000 00:00 0 -7f44eb8da000-7f44eb8de000 ---p 00000000 00:00 0 -7f44eb8de000-7f44eb9df000 rw-p 00000000 00:00 0 -7f44eb9df000-7f44eb9e0000 r--s 00005000 08:03 85328377 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci/graal-management.jar -7f44eb9e0000-7f44eb9e5000 r--s 0008a000 08:03 85328797 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci/jvmci-hotspot.jar -7f44eb9e5000-7f44eb9e9000 r--s 0004e000 08:03 85328799 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci/jvmci-api.jar -7f44eb9e9000-7f44eb9ea000 r--s 00002000 08:03 85328455 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/truffle/locator.jar -7f44eb9ea000-7f44eb9eb000 r--s 00015000 08:03 85329265 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -7f44eb9eb000-7f44eb9f0000 r--s 0005e000 08:03 82445046 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar -7f44eb9f0000-7f44eb9f8000 r--s 0007c000 08:03 85328357 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/boot/graal-sdk.jar -7f44eb9f8000-7f44eb9fa000 r--s 0000d000 08:03 85328356 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/boot/graaljs-scriptengine.jar -7f44eb9fa000-7f44eb9fb000 r--s 00005000 08:03 85328733 /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/jvmci-services.jar -7f44eb9fb000-7f44eba03000 rw-s 00000000 08:04 4587582 /tmp/hsperfdata_alberto.parravicini/18546 -7f44eba03000-7f44eba04000 rw-p 00000000 00:00 0 -7f44eba04000-7f44eba05000 r--p 00000000 00:00 0 -7f44eba05000-7f44eba06000 rw-p 00000000 00:00 0 -7f44eba06000-7f44eba07000 r--p 00021000 08:04 3539518 /usr/lib64/ld-2.17.so -7f44eba07000-7f44eba08000 rw-p 00022000 08:04 3539518 /usr/lib64/ld-2.17.so -7f44eba08000-7f44eba09000 rw-p 00000000 00:00 0 -7ffd13234000-7ffd13256000 rw-p 00000000 00:00 0 [stack] -7ffd13267000-7ffd13269000 r-xp 00000000 00:00 0 [vdso] -ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] - -VM Arguments: -java_command: com.oracle.graal.python.shell.GraalPythonMain --polyglot --experimental-options --python.CoreHome=/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/python/lib-graalpython --python.StdLibHome=/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/python/lib-python/3 --python.SysPrefix=/home/users/alberto.parravicini/Documents/graalpython_venv --python.SysBasePrefix=/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/python --python.Executable=/home/users/alberto.parravicini/Documents/graalpython_venv/bin/graalpython --python.CAPI=/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/languages/python/lib-graalpython --WithThread --WithJavaStacktrace --ExposeInternalSources pipeline_1.py -java_class_path (initial): /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -Launcher Type: SUN_STANDARD - -Environment Variables: -JAVA_HOME=/home/users/alberto.parravicini/Documents/openjdk1.8.0_242-jvmci-20.0-b02 -PATH=/home/users/alberto.parravicini/Documents/graalpython_venv/bin:/home/users/alberto.parravicini/Documents/openjdk1.8.0_242-jvmci-20.0-b02/bin:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/bin:/home/users/alberto.parravicini/Documents/mx:/sbin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/home/users/alberto.parravicini/.local/bin:/home/users/alberto.parravicini/bin:/home/users/alberto.parravicini/.local/bin:/home/users/alberto.parravicini/bin:/home/users/alberto.parravicini/.local/bin:/home/users/alberto.parravicini/bin:/usr/local/cuda/bin -SHELL=/bin/bash -DISPLAY=:10.0 - -Signal Handlers: -SIGSEGV: [libjvm.so+0xb32a50], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO -SIGBUS: [libjvm.so+0xb32a50], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO -SIGFPE: [libjvm.so+0x96d500], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO -SIGPIPE: SIG_IGN, sa_mask[0]=00000000000010000000000000000000, sa_flags=SA_RESTART -SIGXFSZ: [libjvm.so+0x96d500], sa_mask[0]=00000000000000000000000010000000, sa_flags=SA_RESTART, flags was changed from 0x10000004, consider using jsig library -SIGILL: [libjvm.so+0x96d500], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO -SIGUSR1: SIG_DFL, sa_mask[0]=00000000000000000000000000000000, sa_flags=none -SIGUSR2: [libjvm.so+0x96d3d0], sa_mask[0]=00000000000000000000000000000000, sa_flags=SA_RESTART|SA_SIGINFO -SIGHUP: [libjvm.so+0x96d9f0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO -SIGINT: [libjvm.so+0x96d9f0], sa_mask[0]=01000000000000000000000000000000, sa_flags=SA_RESTART -SIGTERM: [libjvm.so+0x96d9f0], sa_mask[0]=00000000000000100000000000000000, sa_flags=SA_RESTART -SIGQUIT: [libjvm.so+0x96d9f0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO - - ---------------- S Y S T E M --------------- - -OS:CentOS Linux release 7.6.1810 (Core) - -uname:Linux 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 -libc:glibc 2.17 NPTL 2.17 -rlimit: STACK 8192k, CORE 0k, NPROC 4096, NOFILE 4096, AS infinity -load average:0.77 1.24 1.17 - -/proc/meminfo: -MemTotal: 32717756 kB -MemFree: 14446816 kB -MemAvailable: 28020604 kB -Buffers: 520744 kB -Cached: 12988316 kB -SwapCached: 0 kB -Active: 9380864 kB -Inactive: 7889240 kB -Active(anon): 3768312 kB -Inactive(anon): 65220 kB -Active(file): 5612552 kB -Inactive(file): 7824020 kB -Unevictable: 7908 kB -Mlocked: 7908 kB -SwapTotal: 16450556 kB -SwapFree: 16450556 kB -Dirty: 5948 kB -Writeback: 0 kB -AnonPages: 3767532 kB -Mapped: 275844 kB -Shmem: 66184 kB -Slab: 602544 kB -SReclaimable: 543452 kB -SUnreclaim: 59092 kB -KernelStack: 9776 kB -PageTables: 38192 kB -NFS_Unstable: 0 kB -Bounce: 0 kB -WritebackTmp: 0 kB -CommitLimit: 32809432 kB -Committed_AS: 7081000 kB -VmallocTotal: 34359738367 kB -VmallocUsed: 386244 kB -VmallocChunk: 34358947836 kB -HardwareCorrupted: 0 kB -AnonHugePages: 2588672 kB -CmaTotal: 0 kB -CmaFree: 0 kB -HugePages_Total: 0 -HugePages_Free: 0 -HugePages_Rsvd: 0 -HugePages_Surp: 0 -Hugepagesize: 2048 kB -DirectMap4k: 3390696 kB -DirectMap2M: 22761472 kB -DirectMap1G: 7340032 kB - -container (cgroup) information: -container_type: cgroupv1 -cpu_cpuset_cpus: 0-7 -cpu_memory_nodes: 0 -active_processor_count: 8 -cpu_quota: -1 -cpu_period: 100000 -cpu_shares: -1 -memory_limit_in_bytes: -1 -memory_and_swap_limit_in_bytes: -1 -memory_soft_limit_in_bytes: -1 -memory_usage_in_bytes: 17693765632 -memory_max_usage_in_bytes: 0 - - -CPU:total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 94 stepping 3, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, rtm, 3dnowpref, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2, adx - -/proc/cpuinfo: -processor : 0 -vendor_id : GenuineIntel -cpu family : 6 -model : 94 -model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz -stepping : 3 -microcode : 0xc6 -cpu MHz : 3753.820 -cache size : 8192 KB -physical id : 0 -siblings : 8 -core id : 0 -cpu cores : 4 -apicid : 0 -initial apicid : 0 -fpu : yes -fpu_exception : yes -cpuid level : 22 -wp : yes -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d -bogomips : 6816.00 -clflush size : 64 -cache_alignment : 64 -address sizes : 39 bits physical, 48 bits virtual -power management: - -processor : 1 -vendor_id : GenuineIntel -cpu family : 6 -model : 94 -model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz -stepping : 3 -microcode : 0xc6 -cpu MHz : 3775.402 -cache size : 8192 KB -physical id : 0 -siblings : 8 -core id : 1 -cpu cores : 4 -apicid : 2 -initial apicid : 2 -fpu : yes -fpu_exception : yes -cpuid level : 22 -wp : yes -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d -bogomips : 6816.00 -clflush size : 64 -cache_alignment : 64 -address sizes : 39 bits physical, 48 bits virtual -power management: - -processor : 2 -vendor_id : GenuineIntel -cpu family : 6 -model : 94 -model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz -stepping : 3 -microcode : 0xc6 -cpu MHz : 3701.733 -cache size : 8192 KB -physical id : 0 -siblings : 8 -core id : 2 -cpu cores : 4 -apicid : 4 -initial apicid : 4 -fpu : yes -fpu_exception : yes -cpuid level : 22 -wp : yes -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d -bogomips : 6816.00 -clflush size : 64 -cache_alignment : 64 -address sizes : 39 bits physical, 48 bits virtual -power management: - -processor : 3 -vendor_id : GenuineIntel -cpu family : 6 -model : 94 -model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz -stepping : 3 -microcode : 0xc6 -cpu MHz : 3728.918 -cache size : 8192 KB -physical id : 0 -siblings : 8 -core id : 3 -cpu cores : 4 -apicid : 6 -initial apicid : 6 -fpu : yes -fpu_exception : yes -cpuid level : 22 -wp : yes -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d -bogomips : 6816.00 -clflush size : 64 -cache_alignment : 64 -address sizes : 39 bits physical, 48 bits virtual -power management: - -processor : 4 -vendor_id : GenuineIntel -cpu family : 6 -model : 94 -model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz -stepping : 3 -microcode : 0xc6 -cpu MHz : 3700.073 -cache size : 8192 KB -physical id : 0 -siblings : 8 -core id : 0 -cpu cores : 4 -apicid : 1 -initial apicid : 1 -fpu : yes -fpu_exception : yes -cpuid level : 22 -wp : yes -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d -bogomips : 6816.00 -clflush size : 64 -cache_alignment : 64 -address sizes : 39 bits physical, 48 bits virtual -power management: - -processor : 5 -vendor_id : GenuineIntel -cpu family : 6 -model : 94 -model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz -stepping : 3 -microcode : 0xc6 -cpu MHz : 3700.903 -cache size : 8192 KB -physical id : 0 -siblings : 8 -core id : 1 -cpu cores : 4 -apicid : 3 -initial apicid : 3 -fpu : yes -fpu_exception : yes -cpuid level : 22 -wp : yes -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d -bogomips : 6816.00 -clflush size : 64 -cache_alignment : 64 -address sizes : 39 bits physical, 48 bits virtual -power management: - -processor : 6 -vendor_id : GenuineIntel -cpu family : 6 -model : 94 -model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz -stepping : 3 -microcode : 0xc6 -cpu MHz : 3705.261 -cache size : 8192 KB -physical id : 0 -siblings : 8 -core id : 2 -cpu cores : 4 -apicid : 5 -initial apicid : 5 -fpu : yes -fpu_exception : yes -cpuid level : 22 -wp : yes -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d -bogomips : 6816.00 -clflush size : 64 -cache_alignment : 64 -address sizes : 39 bits physical, 48 bits virtual -power management: - -processor : 7 -vendor_id : GenuineIntel -cpu family : 6 -model : 94 -model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz -stepping : 3 -microcode : 0xc6 -cpu MHz : 3791.174 -cache size : 8192 KB -physical id : 0 -siblings : 8 -core id : 3 -cpu cores : 4 -apicid : 7 -initial apicid : 7 -fpu : yes -fpu_exception : yes -cpuid level : 22 -wp : yes -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp spec_ctrl intel_stibp flush_l1d -bogomips : 6816.00 -clflush size : 64 -cache_alignment : 64 -address sizes : 39 bits physical, 48 bits virtual -power management: - - - -Memory: 4k page, physical 32717756k(14446816k free), swap 16450556k(16450556k free) - -vm_info: OpenJDK 64-Bit Server VM GraalVM CE 20.0.0 (25.242-b06-jvmci-20.0-b02) for linux-amd64 JRE (8u242), built on Jan 20 2020 20:45:17 by "buildslave" with gcc 7.3.0 - -time: Mon Apr 20 17:25:19 2020 -timezone: CEST -elapsed time: 4 seconds (0d 0h 0m 4s) - From fe39d649247bebcd0a65c06de959096f22bc493b Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 22 Apr 2020 10:59:29 +0200 Subject: [PATCH 023/236] cleaned stream initialization --- .../src/com/nvidia/grcuda/array/DeviceArray.java | 7 ++----- .../src/com/nvidia/grcuda/gpu/CUDARuntime.java | 16 +++++++++------- .../grcuda/gpu/GrCUDAExecutionContext.java | 8 +------- .../grcuda/gpu/stream/GrCUDAStreamManager.java | 2 +- 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index 41a9ebc1..8662f832 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -28,17 +28,13 @@ */ package com.nvidia.grcuda.array; -import java.util.Arrays; - import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.functions.DeviceArrayCopyFunction; -import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.LittleEndianNativeArrayView; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; -import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Cached.Shared; import com.oracle.truffle.api.interop.ArityException; @@ -53,6 +49,8 @@ import com.oracle.truffle.api.library.ExportMessage; import com.oracle.truffle.api.profiles.ValueProfile; +import java.util.Arrays; + @ExportLibrary(InteropLibrary.class) public final class DeviceArray extends AbstractArray implements TruffleObject { @@ -169,7 +167,6 @@ boolean isArrayElementInsertable(@SuppressWarnings("unused") long index) { @ExportMessage Object readArrayElement(long index, @Shared("elementType") @Cached("createIdentityProfile()") ValueProfile elementTypeProfile) throws InvalidArrayIndexException { -// System.out.println("READ ELEM " + index); grCUDAExecutionContext.getCudaRuntime().cudaDeviceSynchronize(); if ((index < 0) || (index >= numElements)) { CompilerDirectives.transferToInterpreter(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index f86a0f93..5e8ef12b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -67,13 +67,16 @@ public final class CUDARuntime { private final GrCUDAContext context; private final NVRuntimeCompiler nvrtc; - // FIXME: move in a separate stream manager! - private int numStreams = 0; + /** + * Users can manually create streams that are not managed directly by a {@link com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager}. + * We keep track of how many of these streams have been created; + */ + private int numUserAllocatedStreams = 0; public void incrementNumStreams() { - numStreams++; + numUserAllocatedStreams++; } public int getNumStreams() { - return numStreams; + return numUserAllocatedStreams; } /** @@ -288,12 +291,12 @@ public String cudaGetErrorString(int errorCode) { } @TruffleBoundary - public CUDAStream cudaStreamCreate() { + public CUDAStream cudaStreamCreate(int streamId) { try (UnsafeHelper.PointerObject streamPointer = UnsafeHelper.createPointerObject()) { Object callable = CUDARuntimeFunction.CUDA_STREAMCREATE.getSymbol(this); Object result = INTEROP.execute(callable, streamPointer.getAddress()); checkCUDAReturnCode(result, "cudaStreamCreate"); - return new CUDAStream(streamPointer.getValueOfPointer(), numStreams++); + return new CUDAStream(streamPointer.getValueOfPointer(), streamId); } catch (InteropException e) { throw new GrCUDAException(e); } @@ -519,7 +522,6 @@ public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException checkArgumentLength(args, 0); try (UnsafeHelper.PointerObject streamPointer = UnsafeHelper.createPointerObject()) { callSymbol(cudaRuntime, streamPointer.getAddress()); - long streamAllocatedPointer = streamPointer.getValueOfPointer(); CUDAStream stream = new CUDAStream(streamPointer.getValueOfPointer(), cudaRuntime.getNumStreams()); cudaRuntime.incrementNumStreams(); return stream; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index fa09fa2b..8c9829ba 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -39,12 +39,6 @@ public class GrCUDAExecutionContext { */ final private Set kernelSet = new HashSet<>(); - /** - * Set that contains all the CUDA kernels execution so far. - * TODO: this should not be a set, but a DAG that can be used to handle dependencies - */ - final private Set kernelExecSet = new HashSet<>(); - final private ExecutionDAG dag = new ExecutionDAG(); public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { @@ -83,7 +77,7 @@ public void registerExecution(GrCUDAComputationalElement computation) { // Start the computation; executeComputationSync(vertex); -// + // // If the computation can be executed immediately, start it; // if (vertex.isExecutable() && threadManager != null) { // threadManager.submitRunnable(new ComputationThread(vertex)); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 8cb8035a..7fbe6e4f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -65,7 +65,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { * Create a new {@link CUDAStream} and add it to this manager, then return it; */ public CUDAStream createStream() { - CUDAStream newStream = runtime.cudaStreamCreate(); + CUDAStream newStream = runtime.cudaStreamCreate(streams.size()); streams.add(newStream); return newStream; } From 29327ed0e9971a04e56be3988bfbdeeb11293d1a Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 22 Apr 2020 16:36:10 +0200 Subject: [PATCH 024/236] adding grcuda computational elements for read/write of devicearray --- .../nvidia/grcuda/test/MultiDimArrayTest.java | 3 +- .../grcuda/test/gpu/ExecutionDAGTest.java | 74 ++++++++++++++----- .../gpu/stream/GrCUDAStreamManagerTest.java | 7 +- .../nvidia/grcuda/array/AbstractArray.java | 5 +- .../com/nvidia/grcuda/array/DeviceArray.java | 20 ++++- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 8 +- .../nvidia/grcuda/gpu/ConfiguredKernel.java | 1 + .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 1 + .../grcuda/gpu/GrCUDAExecutionContext.java | 16 ++-- .../src/com/nvidia/grcuda/gpu/Kernel.java | 13 ++-- .../com/nvidia/grcuda/gpu/KernelConfig.java | 9 +-- .../DeviceArrayExecutionInitializer.java | 26 +++++++ .../computation/DeviceArrayReadExecution.java | 34 +++++++++ .../DeviceArrayWriteExecution.java | 45 +++++++++++ .../GrCUDAComputationalElement.java | 21 +++++- .../InitializeArgumentSet.java | 2 +- .../{ => computation}/KernelExecution.java | 28 ++++--- .../gpu/stream/GrCUDAStreamManager.java | 12 +-- .../resources/python/examples/pipeline_1.py | 2 +- 19 files changed, 259 insertions(+), 68 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayExecutionInitializer.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/{ => computation}/GrCUDAComputationalElement.java (88%) rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/{ => computation}/InitializeArgumentSet.java (87%) rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/{ => computation}/KernelExecution.java (76%) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/MultiDimArrayTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/MultiDimArrayTest.java index 09d2d515..0e2badb6 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/MultiDimArrayTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/MultiDimArrayTest.java @@ -27,11 +27,12 @@ */ package com.nvidia.grcuda.test; -import static org.junit.Assert.assertEquals; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; import org.junit.Test; +import static org.junit.Assert.assertEquals; + public class MultiDimArrayTest { @Test diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index c1810fc6..9ebb2cf6 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,11 +1,13 @@ package com.nvidia.grcuda.test.gpu; +import com.nvidia.grcuda.NoneValue; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.ExecutionDAG; -import com.nvidia.grcuda.gpu.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; +import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; import org.junit.Test; @@ -31,7 +33,8 @@ public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List B(1) -> D(1,3) -> E(1,4) -> F(4) @@ -234,33 +237,21 @@ public void dependencyPipelineSimpleTest() { Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); Value x = deviceArrayConstructor.execute("float", numElements); Value y = deviceArrayConstructor.execute("float", numElements); -// Value z = deviceArrayConstructor.execute("float", numElements); -// Value res = deviceArrayConstructor.execute("float", 1); - Value buildkernel = context.eval("grcuda", "buildkernel"); Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); -// Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32"); -// Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32"); + assertNotNull(squareKernel); -// assertNotNull(diffKernel); -// assertNotNull(reduceKernel); for (int i = 0; i < numElements; ++i) { x.setArrayElement(i, 2.0); // 1.0 / (i + 1)); y.setArrayElement(i, 4.0); // 2.0 / (i + 1)); -// z.setArrayElement(i, 0.0); } -// res.setArrayElement(0, 0); Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); -// Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); -// Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); // Perform the computation; configuredSquareKernel.execute(x, numElements); configuredSquareKernel.execute(y, numElements); -// configuredDiffKernel.execute(x, y, z, numElements); -// configuredReduceKernel.execute(z, res, numElements); // FIXME: temporary sync point until we add array accesses as DAG nodes! // Value sync = context.eval("grcuda", "cudaDeviceSynchronize"); @@ -268,8 +259,51 @@ public void dependencyPipelineSimpleTest() { // Verify the output; assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); assertEquals(16.0, y.getArrayElement(0).asFloat(), 0.1); -// float resScalar = res.getArrayElement(0).asFloat(); -// assertEquals(-4.93, resScalar, 0.01); + } + } + + @Test + public void dependencyPipelineSimple2Test() { + + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + + // TODO: is there a way to access the inner GrCUDA data structures? + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value res = deviceArrayConstructor.execute("float", 1); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 1.0 / (i + 1)); + y.setArrayElement(i, 2.0 / (i + 1)); + } + res.setArrayElement(0, 0.0); + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32"); + Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32"); + assertNotNull(squareKernel); + assertNotNull(diffKernel); + assertNotNull(reduceKernel); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + configuredSquareKernel.execute(y, numElements); + configuredDiffKernel.execute(x, y, z, numElements); + configuredReduceKernel.execute(z, res, numElements); + + // Verify the output; + float resScalar = res.getArrayElement(0).asFloat(); + assertEquals(-4.93, resScalar, 0.01); } } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 1e5b1a3b..ec795a27 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -3,6 +3,7 @@ import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.test.gpu.ExecutionDAGTest; +import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.junit.Test; import java.util.Arrays; @@ -12,7 +13,7 @@ public class GrCUDAStreamManagerTest { @Test - public void streamSelectionSimpleMockTest() { + public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new ExecutionDAGTest.GrCUDAExecutionContextTest(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), @@ -33,7 +34,7 @@ public void streamSelectionSimpleMockTest() { } @Test - public void streamSelectionMockTest() { + public void streamSelectionMockTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new ExecutionDAGTest.GrCUDAExecutionContextTest(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) @@ -59,7 +60,7 @@ public void streamSelectionMockTest() { } @Test - public void streamSelection2MockTest() { + public void streamSelection2MockTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new ExecutionDAGTest.GrCUDAExecutionContextTest(); // A(1,2) -> B(1) -> D(1,3) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index ea4c16d5..7ff3878e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -1,7 +1,6 @@ package com.nvidia.grcuda.array; import com.nvidia.grcuda.ElementType; -import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.oracle.truffle.api.interop.InteropLibrary; import com.oracle.truffle.api.interop.InvalidArrayIndexException; @@ -54,6 +53,10 @@ protected void registerArray() { } } + public GrCUDAExecutionContext getGrCUDAExecutionContext() { + return grCUDAExecutionContext; + } + // Implementation of InteropLibrary @ExportMessage diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index 8662f832..b7635f18 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -32,6 +32,8 @@ import com.nvidia.grcuda.functions.DeviceArrayCopyFunction; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.LittleEndianNativeArrayView; +import com.nvidia.grcuda.gpu.computation.DeviceArrayReadExecution; +import com.nvidia.grcuda.gpu.computation.DeviceArrayWriteExecution; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; @@ -167,11 +169,19 @@ boolean isArrayElementInsertable(@SuppressWarnings("unused") long index) { @ExportMessage Object readArrayElement(long index, @Shared("elementType") @Cached("createIdentityProfile()") ValueProfile elementTypeProfile) throws InvalidArrayIndexException { - grCUDAExecutionContext.getCudaRuntime().cudaDeviceSynchronize(); if ((index < 0) || (index >= numElements)) { CompilerDirectives.transferToInterpreter(); throw InvalidArrayIndexException.create(index); } + try { + return new DeviceArrayReadExecution(this, index, elementTypeProfile).schedule(); + } catch (UnsupportedTypeException e) { + e.printStackTrace(); + return null; + } + } + + public Object readArrayElementImpl(long index, ValueProfile elementTypeProfile) { switch (elementTypeProfile.profile(elementType)) { case BYTE: case CHAR: @@ -194,14 +204,18 @@ Object readArrayElement(long index, public void writeArrayElement(long index, Object value, @CachedLibrary(limit = "3") InteropLibrary valueLibrary, @Shared("elementType") @Cached("createIdentityProfile()") ValueProfile elementTypeProfile) throws UnsupportedTypeException, InvalidArrayIndexException { - grCUDAExecutionContext.getCudaRuntime().cudaDeviceSynchronize(); if ((index < 0) || (index >= numElements)) { CompilerDirectives.transferToInterpreter(); throw InvalidArrayIndexException.create(index); } + new DeviceArrayWriteExecution(this, index, value, valueLibrary, elementTypeProfile).schedule(); + } + + public void writeArrayElementImpl(long index, Object value, + InteropLibrary valueLibrary, + ValueProfile elementTypeProfile) throws UnsupportedTypeException { try { switch (elementTypeProfile.profile(elementType)) { - case BYTE: case CHAR: nativeView.setByte(index, valueLibrary.asByte(value)); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 5e8ef12b..9d035d05 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -691,6 +691,11 @@ public void cuCtxSynchronize() { @TruffleBoundary public void cuLaunchKernel(Kernel kernel, KernelConfig config, KernelArguments args) { + this.cuLaunchKernel(kernel, config, args, config.getStream()); + } + + @TruffleBoundary + public void cuLaunchKernel(Kernel kernel, KernelConfig config, KernelArguments args, CUDAStream stream) { try { Object callable = CUDADriverFunction.CU_LAUNCHKERNEL.getSymbol(this); Dim3 gridSize = config.getGridSize(); @@ -704,12 +709,11 @@ public void cuLaunchKernel(Kernel kernel, KernelConfig config, KernelArguments a blockSize.getY(), blockSize.getZ(), config.getDynamicSharedMemoryBytes(), - config.getStream().getRawPointer(), + stream.getRawPointer(), args.getPointer(), // pointer to kernel arguments array 0 // extra args ); checkCUReturnCode(result, "cuLaunchKernel"); -// cudaDeviceSynchronize(); } catch (InteropException e) { throw new GrCUDAException(e); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java index 9123fc84..c8c9f218 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java @@ -28,6 +28,7 @@ */ package com.nvidia.grcuda.gpu; +import com.nvidia.grcuda.gpu.computation.KernelExecution; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.ArityException; import com.oracle.truffle.api.interop.InteropLibrary; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index 94d74c72..6a2ab42d 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -1,5 +1,6 @@ package com.nvidia.grcuda.gpu; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.oracle.truffle.api.interop.TruffleObject; import java.util.ArrayList; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index 8c9829ba..4e1964ff 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -3,8 +3,10 @@ import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAThreadManager; import com.nvidia.grcuda.array.AbstractArray; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import com.oracle.truffle.api.TruffleLanguage; +import com.oracle.truffle.api.interop.UnsupportedTypeException; import java.util.HashSet; import java.util.Set; @@ -68,7 +70,7 @@ public void registerKernel(Kernel kernel) { * and add it to the current computational DAG. * The actual execution might be deferred depending on the inferred data dependencies; */ - public void registerExecution(GrCUDAComputationalElement computation) { + public Object registerExecution(GrCUDAComputationalElement computation) throws UnsupportedTypeException { // Add the new computation to the DAG ExecutionDAG.DAGVertex vertex = dag.append(computation); @@ -76,7 +78,7 @@ public void registerExecution(GrCUDAComputationalElement computation) { streamManager.assignStream(vertex); // Start the computation; - executeComputationSync(vertex); + return executeComputationSync(vertex); // // If the computation can be executed immediately, start it; // if (vertex.isExecutable() && threadManager != null) { @@ -114,14 +116,14 @@ public void cleanup() { streamManager.cleanup(); } - private void executeComputationSync(ExecutionDAG.DAGVertex vertex) { + private Object executeComputationSync(ExecutionDAG.DAGVertex vertex) throws UnsupportedTypeException { // Before starting this computation, ensure that all its parents have finished their computation; streamManager.syncParentStreams(vertex); // Perform the computation; System.out.println("Starting execution of " + vertex.getComputation()); vertex.getComputation().setComputationStarted(); - vertex.getComputation().execute(); + return vertex.getComputation().execute(); } private class ComputationThread implements Runnable { @@ -136,7 +138,11 @@ public void run(){ // Perform the computation; System.out.println("Starting execution of " + vertex.getComputation()); vertex.getComputation().setComputationStarted(); - vertex.getComputation().execute(); + try { + vertex.getComputation().execute(); + } catch (UnsupportedTypeException e) { + e.printStackTrace(); + } // Synchronize on the stream associated to this computation; System.out.println("\tsync thread on stream " + vertex.getComputation().getStream()); cudaRuntime.cudaStreamSynchronize(vertex.getComputation().getStream()); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index 8df7ef18..1c53f647 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -28,17 +28,11 @@ */ package com.nvidia.grcuda.gpu; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - +import com.nvidia.grcuda.GrCUDAInternalException; import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.array.DeviceArray.MemberSet; -import com.nvidia.grcuda.GrCUDAInternalException; import com.nvidia.grcuda.array.MultiDimDeviceArray; import com.nvidia.grcuda.gpu.stream.CUDAStream; -import com.nvidia.grcuda.gpu.stream.DefaultStream; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Fallback; @@ -54,6 +48,11 @@ import com.oracle.truffle.api.library.ExportLibrary; import com.oracle.truffle.api.library.ExportMessage; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + @ExportLibrary(InteropLibrary.class) public class Kernel implements TruffleObject { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java index e1dcef36..74849720 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfig.java @@ -28,13 +28,12 @@ */ package com.nvidia.grcuda.gpu; -import java.util.Arrays; -import java.util.Objects; - import com.nvidia.grcuda.gpu.stream.CUDAStream; -import com.nvidia.grcuda.gpu.stream.DefaultStream; import com.oracle.truffle.api.CompilerAsserts; +import java.util.Arrays; +import java.util.Objects; + public final class KernelConfig { private final Dim3 gridSize; private final Dim3 blockSize; @@ -53,7 +52,7 @@ public KernelConfig(Dim3 gridSize, Dim3 blockSize, int sharedMemoryBytes, CUDASt @Override public String toString() { return "KernelConfig(gridSize=" + gridSize + ", blockSize=" + blockSize + - ", sharedMemoryBytes=" + dynamicSharedMemoryBytes + ", stream=" + getStream() + ')'; + ", sharedMemoryBytes=" + dynamicSharedMemoryBytes + (useCustomStream ? ", stream=" + getStream() : "") + ')' ; } public Dim3 getGridSize() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayExecutionInitializer.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayExecutionInitializer.java new file mode 100644 index 00000000..bf63542a --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayExecutionInitializer.java @@ -0,0 +1,26 @@ +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.array.DeviceArray; +import com.oracle.truffle.api.CompilerDirectives; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +/** + * The only argument in {@link DeviceArray} computations is the array itself; + */ +class DeviceArrayExecutionInitializer implements InitializeArgumentSet { + + private final DeviceArray array; + + DeviceArrayExecutionInitializer(DeviceArray array) { + this.array = array; + } + + @Override + @CompilerDirectives.TruffleBoundary + public Set initialize() { + return new HashSet<>(Collections.singleton(this.array)); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java new file mode 100644 index 00000000..d62fd838 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java @@ -0,0 +1,34 @@ +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.array.DeviceArray; +import com.oracle.truffle.api.profiles.ValueProfile; + +public class DeviceArrayReadExecution extends GrCUDAComputationalElement { + + private final DeviceArray array; + private final long index; + private final ValueProfile elementTypeProfile; + + public DeviceArrayReadExecution(DeviceArray array, + long index, + ValueProfile elementTypeProfile) { + super(array.getGrCUDAExecutionContext(), new DeviceArrayExecutionInitializer(array)); + this.array = array; + this.index = index; + this.elementTypeProfile = elementTypeProfile; + } + + @Override + public Object execute() { + Object result = array.readArrayElementImpl(index, elementTypeProfile); + this.setComputationFinished(); + return result; + } + + @Override + public String toString() { + return "DeviceArrayReadExecution(" + + "array=" + array + + ", index=" + index + ")"; + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java new file mode 100644 index 00000000..ba4bacfc --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java @@ -0,0 +1,45 @@ +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.NoneValue; +import com.nvidia.grcuda.array.DeviceArray; +import com.oracle.truffle.api.interop.InteropLibrary; +import com.oracle.truffle.api.interop.UnsupportedTypeException; +import com.oracle.truffle.api.profiles.ValueProfile; + +public class DeviceArrayWriteExecution extends GrCUDAComputationalElement { + + private final DeviceArray array; + private final long index; + private final Object value; + private final InteropLibrary valueLibrary; + private final ValueProfile elementTypeProfile; + + public DeviceArrayWriteExecution(DeviceArray array, + long index, + Object value, + InteropLibrary valueLibrary, + ValueProfile elementTypeProfile) { + super(array.getGrCUDAExecutionContext(), new DeviceArrayExecutionInitializer(array)); + this.array = array; + this.index = index; + this.value = value; + this.valueLibrary = valueLibrary; + this.elementTypeProfile = elementTypeProfile; + } + + @Override + public Object execute() throws UnsupportedTypeException { + array.writeArrayElementImpl(index, value, valueLibrary, elementTypeProfile); + this.setComputationFinished(); + return NoneValue.get(); + } + + @Override + public String toString() { + return "DeviceArrayWriteExecution(" + + "array=" + array + + ", index=" + index + + ", value=" + value + + ")"; + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java similarity index 88% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index a8573513..273759b7 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -1,7 +1,10 @@ -package com.nvidia.grcuda.gpu; +package com.nvidia.grcuda.gpu.computation; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.DefaultStream; +import com.oracle.truffle.api.CompilerDirectives; +import com.oracle.truffle.api.interop.UnsupportedTypeException; import java.util.ArrayList; import java.util.HashSet; @@ -50,6 +53,7 @@ public abstract class GrCUDAComputationalElement { * @param grCUDAExecutionContext execution context in which this computational element will be scheduled * @param initializer the initializer used to build the internal set of arguments considered in the dependency computation */ + @CompilerDirectives.TruffleBoundary public GrCUDAComputationalElement(GrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer) { this.argumentSet = initializer.initialize(); // Initialize by making a copy of the original set; @@ -76,6 +80,7 @@ public Set getArgumentSet() { * @param other kernel for which we want to check dependencies, w.r.t. this kernel * @return the list of arguments that the two kernels have in common */ + @CompilerDirectives.TruffleBoundary public List computeDependencies(GrCUDAComputationalElement other) { Set dependencies = new HashSet<>(); Set newArgumentSet = new HashSet<>(); @@ -109,8 +114,8 @@ public boolean hasPossibleDependencies() { * The scheduling request is separate from the {@link GrCUDAComputationalElement} instantiation * as we need to ensure that the the computational element subclass has been completely instantiated; */ - public void schedule() { - this.grCUDAExecutionContext.registerExecution(this); + public Object schedule() throws UnsupportedTypeException { + return this.grCUDAExecutionContext.registerExecution(this); } /** @@ -119,7 +124,7 @@ public void schedule() { * The execution request will be done by the {@link GrCUDAExecutionContext}, after this computation has been scheduled * using {@link GrCUDAComputationalElement#schedule()} */ - protected abstract void execute(); + public abstract Object execute() throws UnsupportedTypeException; public CUDAStream getStream() { return stream; @@ -152,6 +157,14 @@ public void setComputationStarted() { */ public boolean useManuallySpecifiedStream() { return false; } + /** + * Some computational elements, like kernels, can be executed on different {@link CUDAStream} to provide + * parallel asynchronous execution. Other computations, such as array reads, do not require streams, or cannot be + * executed on streams different from the {@link DefaultStream}; + * @return if this computation can be executed on a customized stream + */ + public boolean canUseStream() { return false; } + /** * The default initializer will simply store all the arguments, * and consider each of them in the dependency computations; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/InitializeArgumentSet.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java similarity index 87% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/InitializeArgumentSet.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java index be49e390..394c1906 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/InitializeArgumentSet.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java @@ -1,4 +1,4 @@ -package com.nvidia.grcuda.gpu; +package com.nvidia.grcuda.gpu.computation; import java.util.Set; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java similarity index 76% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index bb667436..c0b60a15 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -1,10 +1,14 @@ -package com.nvidia.grcuda.gpu; - +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.NoneValue; +import com.nvidia.grcuda.gpu.ConfiguredKernel; +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.Kernel; +import com.nvidia.grcuda.gpu.KernelArguments; +import com.nvidia.grcuda.gpu.KernelConfig; import com.nvidia.grcuda.gpu.stream.CUDAStream; -import com.oracle.truffle.api.Option; import java.util.Arrays; -import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -32,8 +36,9 @@ public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) } @Override - public void execute() { - kernel.getGrCUDAExecutionContext().getCudaRuntime().cuLaunchKernel(kernel, config, args); + public Object execute() { + grCUDAExecutionContext.getCudaRuntime().cuLaunchKernel(kernel, config, args, this.getStream()); + return NoneValue.get(); } public ConfiguredKernel getConfiguredKernel() { @@ -56,26 +61,29 @@ public KernelArguments getArgs() { public void setStream(CUDAStream stream) { // Make sure that the internal reference is consistent; super.setStream(stream); - config.setStream(stream); } /** - * The stream is stored in the internal {@link KernelConfig}; + * Retrieve the stream stored in the {@link KernelConfig} if it has been manually specified by the user, + * otherwise return the one automatically chosen by the {@link com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager}; * @return the stream where this computation will be executed */ @Override public CUDAStream getStream() { - return config.getStream(); + return config.useCustomStream() ? config.getStream() : super.getStream(); } @Override public boolean useManuallySpecifiedStream() { return config.useCustomStream(); } + @Override + public boolean canUseStream() { return true; } + @Override public String toString() { return "KernelExecution(" + configuredKernel.toString() + "; args=[" + Arrays.stream(args.getOriginalArgs()).map(a -> Integer.toString(System.identityHashCode(a))).collect(Collectors.joining(", ")) + - "])"; + "]" + "; stream=" + this.getStream() + ")"; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 7fbe6e4f..7f1f02cb 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -27,8 +27,8 @@ public GrCUDAStreamManager(CUDARuntime runtime) { * @param vertex an input computation for which we want to assign a stream */ public void assignStream(ExecutionDAG.DAGVertex vertex) { - // If it has a manually specified stream, use it; - if (!vertex.getComputation().useManuallySpecifiedStream()) { + // If it has a manually specified stream, use it. If the computation cannot use customized streams, return immediately; + if (!vertex.getComputation().useManuallySpecifiedStream() && vertex.getComputation().canUseStream()) { if (vertex.isStart()) { // Else, if the computation doesn't have parents, provide a new stream to it; // TODO: can we do better? E.g. re-use a stream that is not being used @@ -44,6 +44,7 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { } } + /** * Given a computation, synchronize all its parent streams. The caller thread will be blocked until all the * computations on the parents streams are finished; @@ -51,11 +52,12 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { */ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { vertex.getParentComputations().forEach(c -> { - if (!c.isComputationFinished()) { - System.out.println("\tsync thread on stream " + c.getStream()); + // Synchronize computations that are not yet finished and can use streams; + if (!c.isComputationFinished() && c.canUseStream()) { + System.out.println("\tsync thread on stream " + c.getStream() + " by " + vertex.getComputation()); runtime.cudaStreamSynchronize(c.getStream()); System.out.println("\tfinish sync thread on stream " + c.getStream()); - // Set the parent computations to be finished; + // Set the parent computations as finished; c.setComputationFinished(); } }); diff --git a/projects/resources/python/examples/pipeline_1.py b/projects/resources/python/examples/pipeline_1.py index 731e6bd2..b5e1c74d 100644 --- a/projects/resources/python/examples/pipeline_1.py +++ b/projects/resources/python/examples/pipeline_1.py @@ -53,7 +53,7 @@ # ├─> C: z=x-y ──> D: sum(z) # B: x^2 ──┘ if __name__ == "__main__": - N = 1000 + N = 1000000 NUM_BLOCKS = (N + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK start_tot = time.time() From 7d78e79fc28f04087e2062066b69409a0251a497 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 23 Apr 2020 13:17:37 +0200 Subject: [PATCH 025/236] added & exposed streamattach function --- .gitignore | 1 + .../nvidia/grcuda/test/BuildKernelTest.java | 17 +- .../nvidia/grcuda/test/CreateStreamTest.java | 5 + .../nvidia/grcuda/test/StreamAttachTest.java | 326 ++++++++++++++++++ .../grcuda/test/gpu/ExecutionDAGTest.java | 13 +- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 88 +++++ .../grcuda/gpu/GrCUDAExecutionContext.java | 2 +- .../src/com/nvidia/grcuda/gpu/Kernel.java | 1 + .../nvidia/grcuda/gpu/stream/CUDAStream.java | 2 + .../grcuda/gpu/stream/DefaultStream.java | 3 + 10 files changed, 444 insertions(+), 14 deletions(-) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/StreamAttachTest.java diff --git a/.gitignore b/.gitignore index e44f521c..63ff0ff2 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ mx.grcuda/eclipse-launches /projects/com.nvidia.grcuda/src/com/nvidia/grcuda/parser/antlr/GrCUDAVisitor.java /venv **.log +/scratch diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BuildKernelTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BuildKernelTest.java index 3eff15a5..e4fa246c 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BuildKernelTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BuildKernelTest.java @@ -27,13 +27,15 @@ */ package com.nvidia.grcuda.test; +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Value; +import org.junit.Test; + import java.util.Random; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import org.graalvm.polyglot.Context; -import org.graalvm.polyglot.Value; -import org.junit.Test; public class BuildKernelTest { @@ -152,14 +154,15 @@ public void testBuild2DKernelAndLaunch() { Value matmultKernel = buildkernel.execute(MATMULT_KERNEL_SOURCE, "matmult", MATMULT_KERNEL_SIGNATURE); assertNotNull(matmultKernel); assertTrue(matmultKernel.canExecute()); - assertEquals(0, matmultKernel.getMember("launchCount").asInt()); +// assertEquals(0, matmultKernel.getMember("launchCount").asInt()); assertNotNull(matmultKernel.getMember("ptx").asString()); // generate matrices - final int numARows = 256; - final int numACols = 192; + // FIXME: performance regression in array.reads, currently using smaller data size; + final int numARows = 32; // 256; + final int numACols = 32; // 192; final int numBRows = numACols; - final int numBCols = 128; + final int numBCols = 32; //128; final int blockSize = 32; Value matrixA = context.eval("grcuda", "float[" + (numARows * numACols) + "]"); Value matrixB = context.eval("grcuda", "float[" + (numBRows * numBCols) + "]"); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java index 9cbaa227..6d42e874 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java @@ -112,6 +112,11 @@ public void useTwoStreamsTest() { configuredSquareKernel1.execute(x, numElements); configuredSquareKernel2.execute(y, numElements); + + // Wait for the computations to end; + Value syncStream = context.eval("grcuda", "cudaDeviceSynchronize"); + syncStream.execute(); + for (int i = 0; i < numElements; i++) { assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); assertEquals(16.0, y.getArrayElement(i).asFloat(), 0.01); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/StreamAttachTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/StreamAttachTest.java new file mode 100644 index 00000000..daa3e1fa --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/StreamAttachTest.java @@ -0,0 +1,326 @@ +package com.nvidia.grcuda.test; + +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Value; +import org.junit.Test; + +import java.util.HashSet; +import java.util.Set; +import java.util.stream.IntStream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class StreamAttachTest { + + /** + * Simply check if we can attach an array to a CUDA stream without blowing things up! + */ + @Test + public void attachStreamSimpleTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value stream = createStream.execute(); + + final int numElements = 100; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + + Value streamAttach = context.eval("grcuda", "cudaStreamAttachMemAsync"); + assertNotNull(streamAttach); + assertTrue(streamAttach.canExecute()); + streamAttach.execute(stream, x); + + // Synchronize and destroy the stream; + Value streamSync = context.eval("grcuda", "cudaStreamSynchronize"); + Value streamDestroy = context.eval("grcuda", "cudaStreamDestroy"); + streamSync.execute(stream); + streamDestroy.execute(stream); + } + } + + /** + * Check that we can attach many different streams on different arrays; + */ + @Test + public void attachManyStreamsTest() { + int numStreams = 8; + Set streamSet = new HashSet<>(); + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value streamAttach = context.eval("grcuda", "cudaStreamAttachMemAsync"); + Value streamSync = context.eval("grcuda", "cudaStreamSynchronize"); + Value streamDestroy = context.eval("grcuda", "cudaStreamDestroy"); + final int numElements = 100; + + IntStream.range(0, numStreams).forEach(i -> { + Value x = deviceArrayConstructor.execute("float", numElements); + Value stream = createStream.execute(); + streamAttach.execute(stream, x); + streamSet.add(stream); + }); + // Sync and destroy; + streamSet.forEach(s -> { + streamSync.execute(s); + streamDestroy.execute(s); + }); + } + } + + /** + * Check that we can attach multiple arrays to the same stream; + */ + @Test + public void attachManyArraysToStreamTest() { + int numArrays = 4; + + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value streamAttach = context.eval("grcuda", "cudaStreamAttachMemAsync"); + Value streamSync = context.eval("grcuda", "cudaStreamSynchronize"); + Value streamDestroy = context.eval("grcuda", "cudaStreamDestroy"); + final int numElements = 100; + + Value stream = createStream.execute(); + + IntStream.range(0, numArrays).forEach(i -> { + Value x = deviceArrayConstructor.execute("float", numElements); + streamAttach.execute(stream, x); + }); + // Sync and destroy; + streamSync.execute(stream); + streamDestroy.execute(stream); + } + } + + /** + * Check that we can attach the same array to multiple streams, in sequence; + */ + @Test + public void attachManyStreamsToArrayTest() { + int numStreams = 4; + Set streamSet = new HashSet<>(); + + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value streamAttach = context.eval("grcuda", "cudaStreamAttachMemAsync"); + Value streamSync = context.eval("grcuda", "cudaStreamSynchronize"); + Value streamDestroy = context.eval("grcuda", "cudaStreamDestroy"); + final int numElements = 100; + Value x = deviceArrayConstructor.execute("float", numElements); + + + IntStream.range(0, numStreams).forEach(i -> { + Value stream = createStream.execute(); + streamAttach.execute(stream, x); + streamSync.execute(stream); + streamSet.add(stream); + }); + // Sync and destroy; + streamSet.forEach(streamDestroy::execute); + } + } + + private static final int NUM_THREADS_PER_BLOCK = 32; + + private static final String SQUARE_KERNEL = + "extern \"C\" __global__ void square(float* x, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " x[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + + /** + * Execute a simple kernel on a non-default stream with attached memory; + */ + @Test + public void useAttachedStreamTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value streamAttach = context.eval("grcuda", "cudaStreamAttachMemAsync"); + Value streamSync = context.eval("grcuda", "cudaStreamSynchronize"); + Value streamDestroy = context.eval("grcuda", "cudaStreamDestroy"); + + Value stream = createStream.execute(); + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value x = deviceArrayConstructor.execute("float", numElements); + + // Attach the array to the stream; + streamAttach.execute(stream, x); + streamSync.execute(stream); + + // Build the kernel; + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + // Execute the kernel on the custom stream; + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream); + configuredSquareKernel.execute(x, numElements); + for (int i = 0; i < numElements; i++) { + assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); + } + + streamDestroy.execute(stream); + } + } + + /** + * Execute two simple kernel on non-default streams with attached memory. Array reads synchronize only a single stream, + * which would cause errors if executed on non-attached memory in pre-Pascal GPUs; + */ + @Test + public void useTwoStreamsTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value streamAttach = context.eval("grcuda", "cudaStreamAttachMemAsync"); + Value streamSync = context.eval("grcuda", "cudaStreamSynchronize"); + Value streamDestroy = context.eval("grcuda", "cudaStreamDestroy"); + + Value stream1 = createStream.execute(); + Value stream2 = createStream.execute(); + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + + // Attach the array to the stream; + streamAttach.execute(stream1, x); + streamSync.execute(stream1); + streamAttach.execute(stream2, y); + streamSync.execute(stream2); + + // Build the kernel; + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + y.setArrayElement(i, 4.0); + } + // Execute the kernel on the custom stream; + Value configuredSquareKernel1 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream1); + configuredSquareKernel1.execute(x, numElements); + Value configuredSquareKernel2 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream2); + configuredSquareKernel2.execute(y, numElements); + + for (int i = 0; i < numElements; i++) { + assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); + assertEquals(16.0, y.getArrayElement(i).asFloat(), 0.01); + } + + streamDestroy.execute(stream1); + streamDestroy.execute(stream2); + } + } + + /** + * Execute two simple kernel on non-default streams, and synchronize each stream independently; + */ + @Test + public void syncStreamsTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value stream1 = createStream.execute(); + Value stream2 = createStream.execute(); + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + y.setArrayElement(i, 4.0); + } + // Set the custom streams; + Value configuredSquareKernel1 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream1); + Value configuredSquareKernel2 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream2); + + configuredSquareKernel1.execute(x, numElements); + configuredSquareKernel2.execute(y, numElements); + + Value syncStream = context.eval("grcuda", "cudaStreamSynchronize"); + syncStream.execute(stream1); + syncStream.execute(stream2); + + for (int i = 0; i < numElements; i++) { + assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); + assertEquals(16.0, y.getArrayElement(i).asFloat(), 0.01); + } + } + } + + /** + * Execute a simple kernel on a non-default stream with attached memory, + * then move back the memory to the global stream and execute another kernel; + */ + @Test + public void useDefaultAttachedStreamTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value streamAttach = context.eval("grcuda", "cudaStreamAttachMemAsync"); + Value streamSync = context.eval("grcuda", "cudaStreamSynchronize"); + Value streamDestroy = context.eval("grcuda", "cudaStreamDestroy"); + + Value stream = createStream.execute(); + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value x = deviceArrayConstructor.execute("float", numElements); + + // Attach the array to the stream; + streamAttach.execute(stream, x); + streamSync.execute(stream); + + // Build the kernel; + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + // Execute the kernel on the custom stream; + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream); + configuredSquareKernel.execute(x, numElements); + + for (int i = 0; i < numElements; i++) { + assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); + } + + // Reset the visibility of the array; + streamAttach.execute(stream, x, 0x01); + configuredSquareKernel.execute(x, numElements); + + for (int i = 0; i < numElements; i++) { + assertEquals(16.0, x.getArrayElement(i).asFloat(), 0.01); + } + + // Reset the array to use the default stream, by providing just the array; + streamAttach.execute(x); + Value configuredSquareKernel2 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + configuredSquareKernel2.execute(x, numElements); + + for (int i = 0; i < numElements; i++) { + assertEquals(256, x.getArrayElement(i).asFloat(), 0.01); + } + + streamDestroy.execute(stream); + } + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 9ebb2cf6..fc64a102 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -33,8 +33,10 @@ public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List loadedModules = new HashMap<>(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index 4e1964ff..5e2183d7 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -121,7 +121,7 @@ private Object executeComputationSync(ExecutionDAG.DAGVertex vertex) throws Unsu streamManager.syncParentStreams(vertex); // Perform the computation; - System.out.println("Starting execution of " + vertex.getComputation()); +// System.out.println("Starting execution of " + vertex.getComputation()); vertex.getComputation().setComputationStarted(); return vertex.getComputation().execute(); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index 1c53f647..5f2edc0b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -362,6 +362,7 @@ Object execute(Object[] arguments, configBuilder.stream(extractStream(arguments[2])); } } else if (arguments.length == 4) { + configBuilder.dynamicSharedMemoryBytes(extractNumber(arguments[2], "dynamicSharedMemory", sharedMemoryAccess)); // Stream specified; configBuilder.stream(extractStream(arguments[3])); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java index ba01f603..f6a0bb9c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/CUDAStream.java @@ -21,6 +21,8 @@ public int getStreamNumber() { return streamNumber; } + public boolean isDefaultStream() { return false; } + @Override public String toString() { return "CUDAStream(streamNumber=" + this.streamNumber + "; address=0x" + Long.toHexString(this.getRawPointer()) + ")"; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java index e027fd14..12a86d04 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java @@ -8,6 +8,9 @@ public DefaultStream() { super(0, DEFAULT_STREAM_NUMBER); } + @Override + public boolean isDefaultStream() { return true; } + @Override public String toString() { return "DefaultCUDAStream(streamNumber=" + DEFAULT_STREAM_NUMBER + "; address=0x" + Long.toHexString(this.getRawPointer()) + ")"; From 9f4924ae0dbbf1c216725971336a2235d096733e Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 23 Apr 2020 14:45:19 +0200 Subject: [PATCH 026/236] added automatic array-stream association in stream manager --- .../computation/GrCUDAComputationalElement.java | 8 ++++++++ .../grcuda/gpu/computation/KernelExecution.java | 12 ++++++++++++ .../grcuda/gpu/stream/GrCUDAStreamManager.java | 14 +++++++++++--- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index 273759b7..bff9e479 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -165,6 +165,14 @@ public void setComputationStarted() { */ public boolean canUseStream() { return false; } + /** + * Provide a way to associate input arrays allocated using managed memory to the stream + * on which this kernel is executed. This is required by pre-Pascal GPUs to allow the CPU to access + * managed memory belonging to arrays not used by kernels running on the GPU. + * By default, the implementation is empty, as {@link GrCUDAComputationalElement#canUseStream} is false; + */ + public void associateArraysToStream() {} + /** * The default initializer will simply store all the arguments, * and consider each of them in the dependency computations; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index c0b60a15..1145b2d6 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -1,6 +1,7 @@ package com.nvidia.grcuda.gpu.computation; import com.nvidia.grcuda.NoneValue; +import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.gpu.ConfiguredKernel; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.Kernel; @@ -79,6 +80,17 @@ public CUDAStream getStream() { @Override public boolean canUseStream() { return true; } + @Override + public void associateArraysToStream() { + for (Object o : this.args.getOriginalArgs()) { + // FIXME: this should also be done for other array types; + if (o instanceof DeviceArray) { + // Attach the array to the stream, synchronously; + grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(this.getStream(), (DeviceArray) o); + } + } + } + @Override public String toString() { return "KernelExecution(" + configuredKernel.toString() + "; args=[" + diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 7f1f02cb..c9b4a393 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -29,18 +29,26 @@ public GrCUDAStreamManager(CUDARuntime runtime) { public void assignStream(ExecutionDAG.DAGVertex vertex) { // If it has a manually specified stream, use it. If the computation cannot use customized streams, return immediately; if (!vertex.getComputation().useManuallySpecifiedStream() && vertex.getComputation().canUseStream()) { + CUDAStream stream; if (vertex.isStart()) { // Else, if the computation doesn't have parents, provide a new stream to it; // TODO: can we do better? E.g. re-use a stream that is not being used - vertex.getComputation().setStream(createStream()); + stream = createStream(); } else { // Else, compute the streams used by the parent computations. // If more than one stream is available, keep the first; // TODO: this should be more complex! // If 2 child computations have disjoint set of dependencies, they can use 2 streams and run in parallel! - CUDAStream stream = vertex.getParentComputations().get(0).getStream(); - vertex.getComputation().setStream(stream); + stream = vertex.getParentComputations().get(0).getStream(); } + // Set the stream; + vertex.getComputation().setStream(stream); + // Associate all the arrays in the computation to the selected stream, + // to enable CPU accesses on managed memory arrays currently not being used by the GPU. + // This is required as on pre-Pascal GPUs all unified memory pages are locked by the GPU while code is running on the GPU, + // even if the GPU is not using some of the pages. Enabling memory-stream association allows the CPU to + // access memory not being currently used by a kernel; + vertex.getComputation().associateArraysToStream(); } } From 89ac03f9cf4ec04e1bee7ba5039d55e6ea85db0f Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 23 Apr 2020 17:30:55 +0200 Subject: [PATCH 027/236] added more python pipelines examples --- README.md | 8 + .../resources/python/examples/pipeline_1.py | 14 ++ .../resources/python/examples/pipeline_2.py | 164 ++++++++++++++++++ .../resources/python/examples/pipeline_3.py | 125 +++++++++++++ 4 files changed, 311 insertions(+) create mode 100644 projects/resources/python/examples/pipeline_2.py create mode 100644 projects/resources/python/examples/pipeline_3.py diff --git a/README.md b/README.md index 461fd137..113b770c 100644 --- a/README.md +++ b/README.md @@ -250,6 +250,14 @@ graalpython -m venv ~/graalpython_venv source ~/graalpython_venv/bin/activate ``` +* Recommended: install 'numpy` in Graalpython + +``` +graalpython -m ginstall install setuptools; +graalpython -m ginstall install Cython; +graalpython -m ginstall install numpy; +``` + 7. Install GrCUDA with `./install.sh` 8. Setup your IDE with `mx ideinit` diff --git a/projects/resources/python/examples/pipeline_1.py b/projects/resources/python/examples/pipeline_1.py index b5e1c74d..972c5a16 100644 --- a/projects/resources/python/examples/pipeline_1.py +++ b/projects/resources/python/examples/pipeline_1.py @@ -115,3 +115,17 @@ result = res[0] print(f"result={result:.4f}") + + ############################## + # Validate the result ######## + ############################## + import numpy as np + x_g = 1 / np.linspace(1, N, N) + y_g = 2 / np.linspace(1, N, N) + + x_g = x_g**2 + y_g = y_g**2 + x_g -= y_g + res_g = np.sum(x_g) + + print(f"result in python={res_g:.4f}, difference={np.abs(res_g - result)}") diff --git a/projects/resources/python/examples/pipeline_2.py b/projects/resources/python/examples/pipeline_2.py new file mode 100644 index 00000000..672f877d --- /dev/null +++ b/projects/resources/python/examples/pipeline_2.py @@ -0,0 +1,164 @@ +# coding=utf-8 +import polyglot +import time +import math + +NUM_THREADS_PER_BLOCK = 128 + +SQUARE_KERNEL = """ + extern "C" __global__ void square(float* x, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + x[idx] = x[idx] * x[idx]; + } + } + """ + +DIFF_KERNEL = """ + extern "C" __global__ void diff(float* x, float* y, float* z, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + z[idx] = x[idx] - y[idx]; + } + } + """ + +ADDTWO_KERNEL = """ + extern "C" __global__ void addtwo(float* a, float* b, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + b[idx] = a[idx] + 2.0; + } + } + """ + +REDUCE_KERNEL = """ + extern "C" __global__ void reduce(float *x, float *y, float *res, int n) { + __shared__ float cache[%d]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + cache[threadIdx.x] = x[i] + y[i]; + } + __syncthreads(); + + // Perform tree reduction; + i = %d / 2; + while (i > 0) { + if (threadIdx.x < i) { + cache[threadIdx.x] += cache[threadIdx.x + i]; + } + __syncthreads(); + i /= 2; + } + if (threadIdx.x == 0) { + atomicAdd(res, cache[0]); + } + } + """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + +# Compute a complex graph of interconnected computations using GrCUDA. +# Structure of the computation: +# A: x^2 ──┐ +# ├─> C: z=x-y ───┐ +# B: x^2 ──┘ │ +# ├-> F: sum(z+b) +# │ +# D: a^2 ────> E: b=a+2 ──┘ +if __name__ == "__main__": + N = 1000000 + NUM_BLOCKS = (N + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + start_tot = time.time() + time_cumulative = 0 + + # Allocate 2 vectors; + start = time.time() + x = polyglot.eval(language="grcuda", string=f"float[{N}]") + y = polyglot.eval(language="grcuda", string=f"float[{N}]") + a = polyglot.eval(language="grcuda", string=f"float[{N}]") + + # Allocate support vectors; + z = polyglot.eval(language="grcuda", string=f"float[{N}]") + b = polyglot.eval(language="grcuda", string=f"float[{N}]") + res = polyglot.eval(language="grcuda", string=f"float[1]") + end = time.time() + time_cumulative += end - start + print(f"time to allocate arrays: {end - start:.4f} sec") + + # Fill the 2 vectors; + start = time.time() + for i in range(N): + x[i] = 1 / (i + 1) + y[i] = 2 / (i + 1) + a[i] = 4 / (i + 1) + res[0] = 0 + end = time.time() + time_cumulative += end - start + print(f"time to fill arrays: {end - start:.4f} sec") + + # First, build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + square_kernel = build_kernel(SQUARE_KERNEL, "square", "pointer, sint32") + diff_kernel = build_kernel(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32") + addtwo_kernel = build_kernel(ADDTWO_KERNEL, "addtwo", "pointer, pointer, sint32") + reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, pointer, sint32") + + # A. B. Compute the squares of each vector; + + # Call the kernels. The 2 computations are independent, and can be done in parallel; + start = time.time() + square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(x, N) + square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(y, N) + end = time.time() + time_cumulative += end - start + print(f"square, time: {end - start:.4f} sec") + + # C. Compute the difference of the 2 vectors. This must be done after the 2 previous computations; + start = time.time() + diff_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(x, y, z, N) + end = time.time() + time_cumulative += end - start + print(f"diff, time: {end - start:.4f} sec") + + # D. Compute the other branch of the computation; + start = time.time() + square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(a, N) + end = time.time() + time_cumulative += end - start + print(f"square - other branch, time: {end - start:.4f} sec") + + # E. Continue computing the other branch; + start = time.time() + addtwo_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(a, b, N) + end = time.time() + time_cumulative += end - start + print(f"add two - other branch, time: {end - start:.4f} sec") + + # F. Join the two branches and compute the sum of the result; + start = time.time() + reduce_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(z, b, res, N) + end = time.time() + time_cumulative += end - start + print(f"reduce, time: {end - start:.4f} sec") + print(f"overheads, time: {end - start_tot - time_cumulative:.4f} sec") + print(f"total time: {end - start_tot:.4f} sec") + + result = res[0] + print(f"result={result:.4f}") + + ############################## + # Validate the result ######## + ############################## + import numpy as np + x_g = 1 / np.linspace(1, N, N) + y_g = 2 / np.linspace(1, N, N) + a_g = 4 / np.linspace(1, N, N) + + x_g = x_g**2 + y_g = y_g**2 + a_g = a_g**2 + x_g -= y_g + a_g += 2 + res_g = np.sum(x_g + a_g) + + print(f"result in python={res_g:.4f}, difference={np.abs(res_g - result)}") diff --git a/projects/resources/python/examples/pipeline_3.py b/projects/resources/python/examples/pipeline_3.py new file mode 100644 index 00000000..a648757f --- /dev/null +++ b/projects/resources/python/examples/pipeline_3.py @@ -0,0 +1,125 @@ +# coding=utf-8 +import polyglot +import time +import math + +NUM_THREADS_PER_BLOCK = 128 + +SQUARE_KERNEL = """ + extern "C" __global__ void square(float* x, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + x[idx] = x[idx] * x[idx]; + } + } + """ + +DIFF_KERNEL = """ + extern "C" __global__ void diff(float* x, float* y, float* z, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + z[idx] = x[idx] - y[idx]; + } + } + """ + +REDUCE_KERNEL = """ + extern "C" __global__ void reduce(float *x, float *y, float *res, int n) { + __shared__ float cache[%d]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + cache[threadIdx.x] = x[i] + y[i]; + } + __syncthreads(); + + // Perform tree reduction; + i = %d / 2; + while (i > 0) { + if (threadIdx.x < i) { + cache[threadIdx.x] += cache[threadIdx.x + i]; + } + __syncthreads(); + i /= 2; + } + if (threadIdx.x == 0) { + atomicAdd(res, cache[0]); + } + } + """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + +# Compute a pipeline of GrCUDA kernels using loops to build a dynamic graph. +# Structure of the computation: +# A: x^2 ─ [5 times] ─┐ +# ├─> C: res=sum(x+y) +# B: x^2 ─ [5 times] ─┘ +if __name__ == "__main__": + N = 1000000 + NUM_ITER = 5 + NUM_BLOCKS = (N + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + start_tot = time.time() + time_cumulative = 0 + + # Allocate 2 vectors; + start = time.time() + x = polyglot.eval(language="grcuda", string=f"float[{N}]") + y = polyglot.eval(language="grcuda", string=f"float[{N}]") + + # Allocate a support vector; + res = polyglot.eval(language="grcuda", string=f"float[1]") + end = time.time() + time_cumulative += end - start + print(f"time to allocate arrays: {end - start:.4f} sec") + + # Fill the 2 vectors; + start = time.time() + for i in range(N): + x[i] = 1 / (i + 1) + y[i] = 2 / (i + 1) + res[0] = 0 + end = time.time() + time_cumulative += end - start + print(f"time to fill arrays: {end - start:.4f} sec") + + # A. B. Compute the squares of each vector; + + # First, build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + square_kernel = build_kernel(SQUARE_KERNEL, "square", "pointer, sint32") + reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, pointer, sint32") + + # Call the kernel. The 2 computations are independent, and can be done in parallel; + for i in range(NUM_ITER): + start = time.time() + square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(x, N) + square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(y, N) + end = time.time() + time_cumulative += end - start + print(f"iter {i}) time: {end - start:.4f} sec") + + # C. Compute the sum of the result; + start = time.time() + reduce_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(x, y, res, N) + end = time.time() + time_cumulative += end - start + print(f"reduce, time: {end - start:.4f} sec") + print(f"overheads, time: {end - start_tot - time_cumulative:.4f} sec") + print(f"total time: {end - start_tot:.4f} sec") + + result = res[0] + print(f"result={result:.4f}") + + ############################## + # Validate the result ######## + ############################## + import numpy as np + x_g = 1 / np.linspace(1, N, N) + y_g = 2 / np.linspace(1, N, N) + + for i in range(NUM_ITER): + x_g = x_g**2 + y_g = y_g**2 + res_g = np.sum(x_g + y_g) + + print(f"result in python={res_g:.4f}, difference={np.abs(res_g - result)}") + From 3952d6c3a2d76169ee4246b8117efd772f29da19 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 23 Apr 2020 20:28:24 +0200 Subject: [PATCH 028/236] disable automatically stream attach in post pascal gpus --- .../grcuda/test/gpu/ExecutionDAGTest.java | 3 ++ .../src/com/nvidia/grcuda/GrCUDAContext.java | 13 ++++--- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 14 ++++++++ .../GrCUDAComputationalElement.java | 12 ++++++- .../gpu/computation/KernelExecution.java | 34 ++++++++++--------- 5 files changed, 52 insertions(+), 24 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index fc64a102..f517e17c 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -37,6 +37,9 @@ public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List, Object> boundFunctions = new HashMap<>(); + /** + * True IFF the GPU compute capabilities is < 6.0 (Pascal architecture); + */ + private final boolean prePascalArchitecture; + public CUDARuntime(GrCUDAContext context, Env env) { this.context = context; try { @@ -102,6 +107,11 @@ public CUDARuntime(GrCUDAContext context, Env env) { loadedLibraries.put(CUDA_RUNTIME_LIBRARY_NAME, libcudart); loadedLibraries.put(CUDA_LIBRARY_NAME, libcuda); loadedLibraries.put(NVRTC_LIBRARY_NAME, libnvrtc); + + // Check if the GPU available in the system has Compute Capability >= 6.0 (Pascal architecture) + int computeCapabilityMajor = cudaDeviceGetAttribute(CUDADeviceAttribute.COMPUTE_CAPABILITY_MAJOR, 0); + prePascalArchitecture = computeCapabilityMajor < 6; + } catch (UnsatisfiedLinkError e) { throw new GrCUDAException(e.getMessage()); } @@ -411,6 +421,10 @@ public void registerCUDAFunctions(Namespace rootNamespace) { } } + public boolean isPrePascalArchitecture() { + return prePascalArchitecture; + } + public enum CUDARuntimeFunction implements CUDAFunction.Spec, CallSupport { CUDA_DEVICEGETATTRIBUTE("cudaDeviceGetAttribute", "(pointer, sint32, sint32): sint32") { @Override diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index bff9e479..dda711ff 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -171,7 +171,17 @@ public void setComputationStarted() { * managed memory belonging to arrays not used by kernels running on the GPU. * By default, the implementation is empty, as {@link GrCUDAComputationalElement#canUseStream} is false; */ - public void associateArraysToStream() {} + public void associateArraysToStream() { + if (grCUDAExecutionContext.getCudaRuntime().isPrePascalArchitecture()) { + this.associateArraysToStreamImpl(); + } + } + + /** + * Actual implementation of {@link GrCUDAComputationalElement#associateArraysToStream()}, + * to be modified by concrete computational elements; + */ + protected void associateArraysToStreamImpl() {} /** * The default initializer will simply store all the arguments, diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index 1145b2d6..de0423da 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -81,7 +81,7 @@ public CUDAStream getStream() { public boolean canUseStream() { return true; } @Override - public void associateArraysToStream() { + public void associateArraysToStreamImpl() { for (Object o : this.args.getOriginalArgs()) { // FIXME: this should also be done for other array types; if (o instanceof DeviceArray) { @@ -97,23 +97,25 @@ public String toString() { Arrays.stream(args.getOriginalArgs()).map(a -> Integer.toString(System.identityHashCode(a))).collect(Collectors.joining(", ")) + "]" + "; stream=" + this.getStream() + ")"; } -} -class KernelExecutionInitializer implements InitializeArgumentSet { - private final Kernel kernel; - private final KernelArguments args; + static class KernelExecutionInitializer implements InitializeArgumentSet { + private final Kernel kernel; + private final KernelArguments args; - KernelExecutionInitializer(Kernel kernel, KernelArguments args) { - this.kernel = kernel; - this.args = args; - } + KernelExecutionInitializer(Kernel kernel, KernelArguments args) { + this.kernel = kernel; + this.args = args; + } - @Override - public Set initialize() { - // TODO: what aboout scalars? We cannot treat them in the same way, as they are copied and not referenced - // There should be a semantic to manually specify scalar dependencies? For now we have to skip them; - return IntStream.range(0, args.getOriginalArgs().length).filter(i -> - kernel.getArgsAreArrays().get(i) - ).mapToObj(args::getOriginalArg).collect(Collectors.toSet()); + @Override + public Set initialize() { + // TODO: what aboout scalars? We cannot treat them in the same way, as they are copied and not referenced + // There should be a semantic to manually specify scalar dependencies? For now we have to skip them; + return IntStream.range(0, args.getOriginalArgs().length).filter(i -> + kernel.getArgsAreArrays().get(i) + ).mapToObj(args::getOriginalArg).collect(Collectors.toSet()); + } } } + + From 21d036d04e6b193720f9aa1b95dddf88934d5673 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 24 Apr 2020 12:51:44 +0200 Subject: [PATCH 029/236] moved pre/post pascal array stream mapping to separate interface --- .../grcuda/test/gpu/ExecutionDAGTest.java | 8 ++++++- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 21 +++++++++++-------- .../grcuda/gpu/GrCUDAExecutionContext.java | 11 +++++++--- .../ArrayStreamArchitecturePolicy.java | 12 +++++++++++ .../GrCUDAComputationalElement.java | 6 ++---- .../gpu/computation/KernelExecution.java | 4 ++-- .../PostPascalArrayStreamAssociation.java | 15 +++++++++++++ .../PrePascalArrayStreamAssociation.java | 15 +++++++++++++ 8 files changed, 73 insertions(+), 19 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayStreamArchitecturePolicy.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PostPascalArrayStreamAssociation.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PrePascalArrayStreamAssociation.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index f517e17c..787b4561 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -3,8 +3,10 @@ import com.nvidia.grcuda.NoneValue; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import com.oracle.truffle.api.interop.UnsupportedTypeException; @@ -39,7 +41,7 @@ public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List, Object> boundFunctions = new HashMap<>(); /** - * True IFF the GPU compute capabilities is < 6.0 (Pascal architecture); + * Depending on the available GPU, use a different policy to associate managed memory arrays to streams, + * as specified in {@link ArrayStreamArchitecturePolicy} */ - private final boolean prePascalArchitecture; + private final ArrayStreamArchitecturePolicy arrayStreamArchitecturePolicy; public CUDARuntime(GrCUDAContext context, Env env) { this.context = context; @@ -107,17 +111,16 @@ public CUDARuntime(GrCUDAContext context, Env env) { loadedLibraries.put(CUDA_RUNTIME_LIBRARY_NAME, libcudart); loadedLibraries.put(CUDA_LIBRARY_NAME, libcuda); loadedLibraries.put(NVRTC_LIBRARY_NAME, libnvrtc); - - // Check if the GPU available in the system has Compute Capability >= 6.0 (Pascal architecture) - int computeCapabilityMajor = cudaDeviceGetAttribute(CUDADeviceAttribute.COMPUTE_CAPABILITY_MAJOR, 0); - prePascalArchitecture = computeCapabilityMajor < 6; - } catch (UnsatisfiedLinkError e) { throw new GrCUDAException(e.getMessage()); } nvrtc = new NVRuntimeCompiler(this); context.addDisposable(this::shutdown); + + // Check if the GPU available in the system has Compute Capability >= 6.0 (Pascal architecture) + int computeCapabilityMajor = cudaDeviceGetAttribute(CUDADeviceAttribute.COMPUTE_CAPABILITY_MAJOR, 0); + this.arrayStreamArchitecturePolicy = computeCapabilityMajor < 6 ? new PrePascalArrayStreamAssociation() : new PostPascalArrayStreamAssociation(); } // using this slow/uncached instance since all calls are non-critical @@ -421,8 +424,8 @@ public void registerCUDAFunctions(Namespace rootNamespace) { } } - public boolean isPrePascalArchitecture() { - return prePascalArchitecture; + ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { + return arrayStreamArchitecturePolicy; } public enum CUDARuntimeFunction implements CUDAFunction.Spec, CallSupport { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index 5e2183d7..bf77f09b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -3,6 +3,7 @@ import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAThreadManager; import com.nvidia.grcuda.array.AbstractArray; +import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import com.oracle.truffle.api.TruffleLanguage; @@ -34,14 +35,14 @@ public class GrCUDAExecutionContext { /** * Set that contains all the arrays allocated so far. */ - final private Set arraySet = new HashSet<>(); + private final Set arraySet = new HashSet<>(); /** * Set that contains all the CUDA kernels declared so far. */ - final private Set kernelSet = new HashSet<>(); + private final Set kernelSet = new HashSet<>(); - final private ExecutionDAG dag = new ExecutionDAG(); + private final ExecutionDAG dag = new ExecutionDAG(); public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { this(new CUDARuntime(context, env), new GrCUDAThreadManager(context)); @@ -108,6 +109,10 @@ public Kernel buildKernel(String code, String kernelName, String signature) { return cudaRuntime.buildKernel(this, code, kernelName, signature); } + public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { + return cudaRuntime.getArrayStreamArchitecturePolicy(); + } + /** * Delete internal structures that require manual cleanup operations; */ diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayStreamArchitecturePolicy.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayStreamArchitecturePolicy.java new file mode 100644 index 00000000..d40dd186 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayStreamArchitecturePolicy.java @@ -0,0 +1,12 @@ +package com.nvidia.grcuda.gpu.computation; + +/** + * GPUs with pre-Pascal architecture or older, with compute capability < 6.0, + * require to exclusively associate a managed memory array to a single stream to provide + * asynchronous host access to managed memory while a kernel is running. + * This interface wraps and executes the array association function specified in {@link GrCUDAComputationalElement}. + * The array association function will be done only if the available GPU has compute capability < 6.0; + */ +public interface ArrayStreamArchitecturePolicy { + void execute(Runnable callable); +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index dda711ff..b8632e89 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -171,10 +171,8 @@ public void setComputationStarted() { * managed memory belonging to arrays not used by kernels running on the GPU. * By default, the implementation is empty, as {@link GrCUDAComputationalElement#canUseStream} is false; */ - public void associateArraysToStream() { - if (grCUDAExecutionContext.getCudaRuntime().isPrePascalArchitecture()) { - this.associateArraysToStreamImpl(); - } + public final void associateArraysToStream() { + grCUDAExecutionContext.getArrayStreamArchitecturePolicy().execute(this::associateArraysToStreamImpl); } /** diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index de0423da..9f61f7ea 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -27,8 +27,8 @@ public class KernelExecution extends GrCUDAComputationalElement { public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) { super( - configuredKernel.getKernel().getGrCUDAExecutionContext(), - new KernelExecutionInitializer(configuredKernel.getKernel(), args) + configuredKernel.getKernel().getGrCUDAExecutionContext(), + new KernelExecutionInitializer(configuredKernel.getKernel(), args) ); this.configuredKernel = configuredKernel; this.kernel = configuredKernel.getKernel(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PostPascalArrayStreamAssociation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PostPascalArrayStreamAssociation.java new file mode 100644 index 00000000..a14436f2 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PostPascalArrayStreamAssociation.java @@ -0,0 +1,15 @@ +package com.nvidia.grcuda.gpu.computation; + +/** + * GPUs with Pascal architecture or newer (e.g. Tesla P100), with compute capability >= 6.0, + * do not require to exclusively associate a managed memory array to a single stream to provide + * asynchronous host access to managed memory while a kernel is running. + * As such, no stream association is performed; + */ +public class PostPascalArrayStreamAssociation implements ArrayStreamArchitecturePolicy { + + @Override + public void execute(Runnable callable) { + + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PrePascalArrayStreamAssociation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PrePascalArrayStreamAssociation.java new file mode 100644 index 00000000..fb3c4617 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PrePascalArrayStreamAssociation.java @@ -0,0 +1,15 @@ +package com.nvidia.grcuda.gpu.computation; + +/** + * GPUs with pre-Pascal architecture or older, with compute capability < 6.0, + * require to exclusively associate a managed memory array to a single stream to provide + * asynchronous host access to managed memory while a kernel is running. + * This interface wraps and executes the array association function specified in {@link GrCUDAComputationalElement} + */ +public class PrePascalArrayStreamAssociation implements ArrayStreamArchitecturePolicy { + + @Override + public void execute(Runnable runnable) { + runnable.run(); + } +} From 2f840290cd5c2cf0bcca0203b0cc58c0d7dfbbfe Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 24 Apr 2020 15:03:40 +0200 Subject: [PATCH 030/236] added multidim read/write comp elem --- .../grcuda/array/MultiDimDeviceArrayView.java | 21 +++++++++ .../ArrayExecutionInitializer.java | 29 ++++++++++++ .../DeviceArrayExecutionInitializer.java | 26 ----------- .../computation/DeviceArrayReadExecution.java | 2 +- .../DeviceArrayWriteExecution.java | 2 +- .../MultiDimDeviceArrayViewReadExecution.java | 34 ++++++++++++++ ...MultiDimDeviceArrayViewWriteExecution.java | 45 +++++++++++++++++++ 7 files changed, 131 insertions(+), 28 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java delete mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayExecutionInitializer.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java index d573f23a..83348b54 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java @@ -28,6 +28,8 @@ */ package com.nvidia.grcuda.array; +import com.nvidia.grcuda.gpu.computation.MultiDimDeviceArrayViewReadExecution; +import com.nvidia.grcuda.gpu.computation.MultiDimDeviceArrayViewWriteExecution; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Cached.Shared; @@ -117,6 +119,15 @@ Object readArrayElement(long index, CompilerDirectives.transferToInterpreter(); throw InvalidArrayIndexException.create(index); } + try { + return new MultiDimDeviceArrayViewReadExecution(this, index, elementTypeProfile).schedule(); + } catch (UnsupportedTypeException e) { + e.printStackTrace(); + return null; + } + } + + public Object readArrayElementImpl(long index, ValueProfile elementTypeProfile) { if ((thisDimension + 1) == mdDeviceArray.getNumberDimensions()) { long flatIndex = offset + index * stride; switch (elementTypeProfile.profile(mdDeviceArray.getElementType())) { @@ -150,6 +161,12 @@ void writeArrayElement(long index, Object value, CompilerDirectives.transferToInterpreter(); throw InvalidArrayIndexException.create(index); } + new MultiDimDeviceArrayViewWriteExecution(this, index, value, valueLibrary, elementTypeProfile).schedule(); + } + + public void writeArrayElementImpl(long index, Object value, + InteropLibrary valueLibrary, + ValueProfile elementTypeProfile) throws UnsupportedTypeException { if ((thisDimension + 1) == mdDeviceArray.getNumberDimensions()) { long flatIndex = offset + index * stride; try { @@ -184,4 +201,8 @@ void writeArrayElement(long index, Object value, throw new IllegalStateException("tried to write non-last dimension in MultiDimDeviceArrayView"); } } + + public MultiDimDeviceArray getMdDeviceArray() { + return mdDeviceArray; + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java new file mode 100644 index 00000000..0c18108b --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java @@ -0,0 +1,29 @@ +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.array.AbstractArray; +import com.oracle.truffle.api.CompilerDirectives; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +/** + * The only argument in {@link com.nvidia.grcuda.array.AbstractArray} computations is the array itself. + * Note that in {@link com.nvidia.grcuda.array.MultiDimDeviceArrayView} the array is the parent {@link com.nvidia.grcuda.array.MultiDimDeviceArray}, + * while in {@link com.nvidia.grcuda.array.MultiDimDeviceArray} there is currently no need to explicitly represent computations, + * as they cannot directly the underlying memory; + */ +class ArrayExecutionInitializer implements InitializeArgumentSet { + + private final AbstractArray array; + + ArrayExecutionInitializer(AbstractArray array) { + this.array = array; + } + + @Override + @CompilerDirectives.TruffleBoundary + public Set initialize() { + return new HashSet<>(Collections.singleton(this.array)); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayExecutionInitializer.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayExecutionInitializer.java deleted file mode 100644 index bf63542a..00000000 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayExecutionInitializer.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.nvidia.grcuda.gpu.computation; - -import com.nvidia.grcuda.array.DeviceArray; -import com.oracle.truffle.api.CompilerDirectives; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -/** - * The only argument in {@link DeviceArray} computations is the array itself; - */ -class DeviceArrayExecutionInitializer implements InitializeArgumentSet { - - private final DeviceArray array; - - DeviceArrayExecutionInitializer(DeviceArray array) { - this.array = array; - } - - @Override - @CompilerDirectives.TruffleBoundary - public Set initialize() { - return new HashSet<>(Collections.singleton(this.array)); - } -} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java index d62fd838..9995744f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java @@ -12,7 +12,7 @@ public class DeviceArrayReadExecution extends GrCUDAComputationalElement { public DeviceArrayReadExecution(DeviceArray array, long index, ValueProfile elementTypeProfile) { - super(array.getGrCUDAExecutionContext(), new DeviceArrayExecutionInitializer(array)); + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer(array)); this.array = array; this.index = index; this.elementTypeProfile = elementTypeProfile; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java index ba4bacfc..2c741a7e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java @@ -19,7 +19,7 @@ public DeviceArrayWriteExecution(DeviceArray array, Object value, InteropLibrary valueLibrary, ValueProfile elementTypeProfile) { - super(array.getGrCUDAExecutionContext(), new DeviceArrayExecutionInitializer(array)); + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer(array)); this.array = array; this.index = index; this.value = value; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java new file mode 100644 index 00000000..be19c13b --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java @@ -0,0 +1,34 @@ +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.array.MultiDimDeviceArrayView; +import com.oracle.truffle.api.profiles.ValueProfile; + +public class MultiDimDeviceArrayViewReadExecution extends GrCUDAComputationalElement { + + private final MultiDimDeviceArrayView array; + private final long index; + private final ValueProfile elementTypeProfile; + + public MultiDimDeviceArrayViewReadExecution(MultiDimDeviceArrayView array, + long index, + ValueProfile elementTypeProfile) { + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer(array.getMdDeviceArray())); + this.array = array; + this.index = index; + this.elementTypeProfile = elementTypeProfile; + } + + @Override + public Object execute() { + Object result = array.readArrayElementImpl(index, elementTypeProfile); + this.setComputationFinished(); + return result; + } + + @Override + public String toString() { + return "MultiDimDeviceArrayViewReadExecution(" + + "array=" + array + + ", index=" + index + ")"; + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java new file mode 100644 index 00000000..5fa6116d --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java @@ -0,0 +1,45 @@ +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.NoneValue; +import com.nvidia.grcuda.array.MultiDimDeviceArrayView; +import com.oracle.truffle.api.interop.InteropLibrary; +import com.oracle.truffle.api.interop.UnsupportedTypeException; +import com.oracle.truffle.api.profiles.ValueProfile; + +public class MultiDimDeviceArrayViewWriteExecution extends GrCUDAComputationalElement { + + private final MultiDimDeviceArrayView array; + private final long index; + private final Object value; + private final InteropLibrary valueLibrary; + private final ValueProfile elementTypeProfile; + + public MultiDimDeviceArrayViewWriteExecution(MultiDimDeviceArrayView array, + long index, + Object value, + InteropLibrary valueLibrary, + ValueProfile elementTypeProfile) { + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer(array.getMdDeviceArray())); + this.array = array; + this.index = index; + this.value = value; + this.valueLibrary = valueLibrary; + this.elementTypeProfile = elementTypeProfile; + } + + @Override + public Object execute() throws UnsupportedTypeException { + array.writeArrayElementImpl(index, value, valueLibrary, elementTypeProfile); + this.setComputationFinished(); + return NoneValue.get(); + } + + @Override + public String toString() { + return "MultiDimDeviceArrayViewReadExecution(" + + "array=" + array + + ", index=" + index + + ", value=" + value + + ")"; + } +} From 7dacf2a81b05cef41811b7d0ce2b209fb78a2811 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 24 Apr 2020 16:14:04 +0200 Subject: [PATCH 031/236] optimized array accesses with fast path to skip scheduling if not necessary --- .../nvidia/grcuda/array/AbstractArray.java | 16 ++++++++++++++++ .../com/nvidia/grcuda/array/DeviceArray.java | 15 +++++++++++++-- .../grcuda/array/MultiDimDeviceArray.java | 6 +++--- .../grcuda/array/MultiDimDeviceArrayView.java | 19 +++++++++++++++++-- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 5 +++-- .../grcuda/gpu/GrCUDAExecutionContext.java | 2 +- .../gpu/computation/ArrayAccessExecution.java | 15 +++++++++++++++ .../computation/DeviceArrayReadExecution.java | 7 ++++++- .../DeviceArrayWriteExecution.java | 7 ++++++- .../GrCUDAComputationalElement.java | 19 +++++++++++++++++++ .../gpu/computation/KernelExecution.java | 7 +++---- .../MultiDimDeviceArrayViewReadExecution.java | 7 ++++++- ...MultiDimDeviceArrayViewWriteExecution.java | 7 ++++++- 13 files changed, 114 insertions(+), 18 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 7ff3878e..85191885 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -32,6 +32,14 @@ public abstract class AbstractArray implements TruffleObject { */ private boolean registeredInContext = false; + /** + * Tracks whether the last operation done on the native memory underlying this array is a read/write operation + * handled by the CPU. If so, we can avoid creating {@link com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement} + * for array accesses that are immediately following the last one, as they are performed synchronously and there is no + * reason to explicitly model them in the {@link com.nvidia.grcuda.gpu.ExecutionDAG}; + */ + private boolean isLastComputationArrayAccess = false; + public ElementType getElementType() { return elementType; } @@ -84,6 +92,14 @@ boolean isArrayElementReadable(long index) { @ExportMessage public abstract long getArraySize(); + public boolean isLastComputationArrayAccess() { return isLastComputationArrayAccess; } + + public void setLastComputationArrayAccess(boolean lastComputationArrayAccess) { + isLastComputationArrayAccess = lastComputationArrayAccess; + } + + public abstract long getPointer(); + // TODO: equals must be smarter than checking memory address, as a MultiDimView should be considered as part of its parent // The hash instead should be different. We might also not touch equals, and have another method "isPartOf" } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index b7635f18..089e1e4e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -127,6 +127,7 @@ final long getSizeBytes() { return sizeBytes; } + @Override public long getPointer() { return nativeView.getStartAddress(); } @@ -174,7 +175,12 @@ Object readArrayElement(long index, throw InvalidArrayIndexException.create(index); } try { - return new DeviceArrayReadExecution(this, index, elementTypeProfile).schedule(); + if (this.isLastComputationArrayAccess()) { + // Fast path, skip the DAG scheduling; + return readArrayElementImpl(index, elementTypeProfile); + } else { + return new DeviceArrayReadExecution(this, index, elementTypeProfile).schedule(); + } } catch (UnsupportedTypeException e) { e.printStackTrace(); return null; @@ -208,7 +214,12 @@ public void writeArrayElement(long index, Object value, CompilerDirectives.transferToInterpreter(); throw InvalidArrayIndexException.create(index); } - new DeviceArrayWriteExecution(this, index, value, valueLibrary, elementTypeProfile).schedule(); + if (this.isLastComputationArrayAccess()) { + // Fast path, skip the DAG scheduling; + writeArrayElementImpl(index, value, valueLibrary, elementTypeProfile); + } else { + new DeviceArrayWriteExecution(this, index, value, valueLibrary, elementTypeProfile).schedule(); + } } public void writeArrayElementImpl(long index, Object value, diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java index 48c5de55..50e40afa 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java @@ -28,11 +28,8 @@ */ package com.nvidia.grcuda.array; -import java.util.Arrays; - import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.array.DeviceArray.MemberSet; -import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.LittleEndianNativeArrayView; import com.oracle.truffle.api.CompilerDirectives; @@ -46,6 +43,8 @@ import com.oracle.truffle.api.library.ExportMessage; import com.oracle.truffle.api.profiles.ValueProfile; +import java.util.Arrays; + @ExportLibrary(InteropLibrary.class) public class MultiDimDeviceArray extends AbstractArray implements TruffleObject { @@ -154,6 +153,7 @@ final long getSizeBytes() { return numElements * elementType.getSizeBytes(); } + @Override public final long getPointer() { return nativeView.getStartAddress(); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java index 83348b54..fd422312 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java @@ -73,6 +73,11 @@ public long getStride() { return stride; } + @Override + public final long getPointer() { + return mdDeviceArray.getPointer(); + } + @Override public String toString() { return String.format("MultiDimDeviceArrayView(dim=%d, offset=%d, stride=%d)\n", @@ -120,7 +125,12 @@ Object readArrayElement(long index, throw InvalidArrayIndexException.create(index); } try { - return new MultiDimDeviceArrayViewReadExecution(this, index, elementTypeProfile).schedule(); + if (this.isLastComputationArrayAccess()) { + // Fast path, skip the DAG scheduling; + return readArrayElementImpl(index, elementTypeProfile); + } else { + return new MultiDimDeviceArrayViewReadExecution(this, index, elementTypeProfile).schedule(); + } } catch (UnsupportedTypeException e) { e.printStackTrace(); return null; @@ -161,7 +171,12 @@ void writeArrayElement(long index, Object value, CompilerDirectives.transferToInterpreter(); throw InvalidArrayIndexException.create(index); } - new MultiDimDeviceArrayViewWriteExecution(this, index, value, valueLibrary, elementTypeProfile).schedule(); + if (this.isLastComputationArrayAccess()) { + // Fast path, skip the DAG scheduling; + writeArrayElementImpl(index, value, valueLibrary, elementTypeProfile); + } else { + new MultiDimDeviceArrayViewWriteExecution(this, index, value, valueLibrary, elementTypeProfile).schedule(); + } } public void writeArrayElementImpl(long index, Object value, diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 93cae1e0..bce7ea79 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -33,6 +33,7 @@ import com.nvidia.grcuda.GrCUDAException; import com.nvidia.grcuda.Namespace; import com.nvidia.grcuda.NoneValue; +import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.functions.CUDAFunction; import com.nvidia.grcuda.gpu.UnsafeHelper.Integer32Object; @@ -339,7 +340,7 @@ public void cudaStreamDestroy(CUDAStream stream) { } @TruffleBoundary - public void cudaStreamAttachMemAsync(CUDAStream stream, DeviceArray array) { + public void cudaStreamAttachMemAsync(CUDAStream stream, AbstractArray array) { final int MEM_ATTACH_SINGLE = 0x04; final int MEM_ATTACH_GLOBAL = 0x01; try { @@ -358,7 +359,7 @@ public void cudaStreamAttachMemAsync(CUDAStream stream, DeviceArray array) { * @param array an array that should be assigned exclusively to a stream */ @TruffleBoundary - public void cudaStreamAttachMem(CUDAStream stream, DeviceArray array) { + public void cudaStreamAttachMem(CUDAStream stream, AbstractArray array) { cudaStreamAttachMemAsync(stream, array); cudaStreamSynchronize(stream); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index bf77f09b..3f5a4650 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -126,8 +126,8 @@ private Object executeComputationSync(ExecutionDAG.DAGVertex vertex) throws Unsu streamManager.syncParentStreams(vertex); // Perform the computation; -// System.out.println("Starting execution of " + vertex.getComputation()); vertex.getComputation().setComputationStarted(); + vertex.getComputation().updateIsComputationArrayAccess(); return vertex.getComputation().execute(); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java new file mode 100644 index 00000000..7366e0be --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java @@ -0,0 +1,15 @@ +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; + +/** + * Abstract class that wraps all computational elements representing accesses on managed memory by the CPU; + */ +public abstract class ArrayAccessExecution extends GrCUDAComputationalElement { + public ArrayAccessExecution(GrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer) { + super(grCUDAExecutionContext, initializer); + } + + @Override + public boolean isComputationArrayAccess() { return true; } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java index 9995744f..d5764a59 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java @@ -3,7 +3,7 @@ import com.nvidia.grcuda.array.DeviceArray; import com.oracle.truffle.api.profiles.ValueProfile; -public class DeviceArrayReadExecution extends GrCUDAComputationalElement { +public class DeviceArrayReadExecution extends ArrayAccessExecution { private final DeviceArray array; private final long index; @@ -25,6 +25,11 @@ public Object execute() { return result; } + @Override + public void updateIsComputationArrayAccess() { + this.array.setLastComputationArrayAccess(true); + } + @Override public String toString() { return "DeviceArrayReadExecution(" + diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java index 2c741a7e..f7c4d741 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java @@ -6,7 +6,7 @@ import com.oracle.truffle.api.interop.UnsupportedTypeException; import com.oracle.truffle.api.profiles.ValueProfile; -public class DeviceArrayWriteExecution extends GrCUDAComputationalElement { +public class DeviceArrayWriteExecution extends ArrayAccessExecution { private final DeviceArray array; private final long index; @@ -34,6 +34,11 @@ public Object execute() throws UnsupportedTypeException { return NoneValue.get(); } + @Override + public void updateIsComputationArrayAccess() { + this.array.setLastComputationArrayAccess(true); + } + @Override public String toString() { return "DeviceArrayWriteExecution(" + diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index b8632e89..d5be5745 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -1,5 +1,6 @@ package com.nvidia.grcuda.gpu.computation; +import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.DefaultStream; @@ -181,6 +182,24 @@ public final void associateArraysToStream() { */ protected void associateArraysToStreamImpl() {} + /** + * Specify if this computational element represents an array access (read or write) on an {@link com.nvidia.grcuda.array.AbstractArray} + * performed synchronously by the CPU. By default it returns false; + * @return if this computation is a CPU array access on managed memory + */ + public boolean isComputationArrayAccess() { return false; } + + /** + * Set for all the {@link com.nvidia.grcuda.array.AbstractArray} in the computation if this computation is an array access; + */ + public void updateIsComputationArrayAccess() { + for (Object o : this.argumentSet) { + if (o instanceof AbstractArray) { + ((AbstractArray) o).setLastComputationArrayAccess(isComputationArrayAccess()); + } + } + } + /** * The default initializer will simply store all the arguments, * and consider each of them in the dependency computations; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index 9f61f7ea..86eaca19 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -1,7 +1,7 @@ package com.nvidia.grcuda.gpu.computation; import com.nvidia.grcuda.NoneValue; -import com.nvidia.grcuda.array.DeviceArray; +import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.ConfiguredKernel; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.Kernel; @@ -83,10 +83,9 @@ public CUDAStream getStream() { @Override public void associateArraysToStreamImpl() { for (Object o : this.args.getOriginalArgs()) { - // FIXME: this should also be done for other array types; - if (o instanceof DeviceArray) { + if (o instanceof AbstractArray) { // Attach the array to the stream, synchronously; - grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(this.getStream(), (DeviceArray) o); + grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(this.getStream(), (AbstractArray) o); } } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java index be19c13b..29efd314 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java @@ -3,7 +3,7 @@ import com.nvidia.grcuda.array.MultiDimDeviceArrayView; import com.oracle.truffle.api.profiles.ValueProfile; -public class MultiDimDeviceArrayViewReadExecution extends GrCUDAComputationalElement { +public class MultiDimDeviceArrayViewReadExecution extends ArrayAccessExecution { private final MultiDimDeviceArrayView array; private final long index; @@ -25,6 +25,11 @@ public Object execute() { return result; } + @Override + public void updateIsComputationArrayAccess() { + this.array.setLastComputationArrayAccess(true); + } + @Override public String toString() { return "MultiDimDeviceArrayViewReadExecution(" + diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java index 5fa6116d..75e711ef 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java @@ -6,7 +6,7 @@ import com.oracle.truffle.api.interop.UnsupportedTypeException; import com.oracle.truffle.api.profiles.ValueProfile; -public class MultiDimDeviceArrayViewWriteExecution extends GrCUDAComputationalElement { +public class MultiDimDeviceArrayViewWriteExecution extends ArrayAccessExecution { private final MultiDimDeviceArrayView array; private final long index; @@ -34,6 +34,11 @@ public Object execute() throws UnsupportedTypeException { return NoneValue.get(); } + @Override + public void updateIsComputationArrayAccess() { + this.array.setLastComputationArrayAccess(true); + } + @Override public String toString() { return "MultiDimDeviceArrayViewReadExecution(" + From 4b173ff4720d6e68c1e0d681c445ab0bf2180d5e Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 26 Apr 2020 16:09:16 +0200 Subject: [PATCH 032/236] added python benchmarking --- .../nvidia/grcuda/GrCUDAThreadManager.java | 6 +- .../gpu/stream/GrCUDAStreamManager.java | 4 +- .../resources/python/benchmark/__init__.py | 0 .../python/benchmark/bench/__init__.py | 0 .../python/benchmark/bench/bench_1.py | 160 ++++++++++++++++++ .../resources/python/benchmark/benchmark.py | 82 +++++++++ .../python/benchmark/benchmark_main.py | 81 +++++++++ .../python/benchmark/benchmark_result.py | 137 +++++++++++++++ 8 files changed, 464 insertions(+), 6 deletions(-) create mode 100644 projects/resources/python/benchmark/__init__.py create mode 100644 projects/resources/python/benchmark/bench/__init__.py create mode 100644 projects/resources/python/benchmark/bench/bench_1.py create mode 100644 projects/resources/python/benchmark/benchmark.py create mode 100644 projects/resources/python/benchmark/benchmark_main.py create mode 100644 projects/resources/python/benchmark/benchmark_result.py diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java index 346ce599..987973cc 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java @@ -1,7 +1,5 @@ package com.nvidia.grcuda; -import com.oracle.truffle.api.CompilerDirectives; - import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -54,7 +52,7 @@ public List getResults(Collection> futures) { public void finalizeManager() { if (threadPool == null) return; - System.out.println("closing GrCUDA thread manager..."); +// System.out.println("closing GrCUDA thread manager..."); threadPool.shutdown(); try { if (!threadPool.awaitTermination(60, TimeUnit.SECONDS)) { @@ -70,6 +68,6 @@ public void finalizeManager() { threadPool.shutdownNow(); Thread.currentThread().interrupt(); } - System.out.println("closed GrCUDA thread manager"); +// System.out.println("closed GrCUDA thread manager"); } } \ No newline at end of file diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index c9b4a393..7bc19735 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -62,9 +62,9 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { vertex.getParentComputations().forEach(c -> { // Synchronize computations that are not yet finished and can use streams; if (!c.isComputationFinished() && c.canUseStream()) { - System.out.println("\tsync thread on stream " + c.getStream() + " by " + vertex.getComputation()); +// System.out.println("\tsync thread on stream " + c.getStream() + " by " + vertex.getComputation()); runtime.cudaStreamSynchronize(c.getStream()); - System.out.println("\tfinish sync thread on stream " + c.getStream()); +// System.out.println("\tfinish sync thread on stream " + c.getStream()); // Set the parent computations as finished; c.setComputationFinished(); } diff --git a/projects/resources/python/benchmark/__init__.py b/projects/resources/python/benchmark/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/projects/resources/python/benchmark/bench/__init__.py b/projects/resources/python/benchmark/bench/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py new file mode 100644 index 00000000..afbbb42f --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -0,0 +1,160 @@ +# coding=utf-8 +import polyglot +import time +import numpy as np +from benchmark import Benchmark +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_THREADS_PER_BLOCK = 128 + +SQUARE_KERNEL = """ + extern "C" __global__ void square(float* x, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + x[idx] = x[idx] * x[idx]; + } + } + """ + +DIFF_KERNEL = """ + extern "C" __global__ void diff(float* x, float* y, float* z, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + z[idx] = x[idx] - y[idx]; + } + } + """ + +REDUCE_KERNEL = """ + extern "C" __global__ void reduce(float *x, float *res, int n) { + __shared__ float cache[%d]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + cache[threadIdx.x] = x[i]; + } + __syncthreads(); + + // Perform tree reduction; + i = %d / 2; + while (i > 0) { + if (threadIdx.x < i) { + cache[threadIdx.x] += cache[threadIdx.x + i]; + } + __syncthreads(); + i /= 2; + } + if (threadIdx.x == 0) { + atomicAdd(res, cache[0]); + } + } + """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + +############################## +############################## + + +class Benchmark1(Benchmark): + """ + Compute the sum of difference of squares of 2 vectors, using multiple GrCUDA kernels. + Structure of the computation: + A: x^2 ──┐ + ├─> C: z=x-y ──> D: sum(z) + B: x^2 ──┘ + """ + + def __init__(self, benchmark: BenchmarkResult): + super().__init__("b1", benchmark) + self.size = 0 + self.x = None + self.y = None + self.z = None + self.res = None + self.num_blocks = 0 + self.square_kernel = None + self.diff_kernel = None + self.reduce_kernel = None + self.cpu_result = 0 + + def alloc(self, size: int): + self.size = size + self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + # Allocate 2 vectors; + start = time.time() + self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.y = polyglot.eval(language="grcuda", string=f"float[{size}]") + + # Allocate a support vector; + self.z = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.res = polyglot.eval(language="grcuda", string=f"float[1]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + self.square_kernel = build_kernel(SQUARE_KERNEL, "square", "pointer, sint32") + self.diff_kernel = build_kernel(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32") + self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32") + + end = time.time() + self.benchmark.add_phase({"name": "allocation", "time_sec": end - start}) + + def init(self): + start = time.time() + for i in range(self.size): + self.x[i] = 1 / (i + 1) + self.y[i] = 2 / (i + 1) + end = time.time() + self.benchmark.add_phase({"name": "initialization", "time_sec": end - start}) + + def execute(self) -> object: + # This must be reset at every execution; + self.res[0] = 0 + + # Call the kernel. The 2 computations are independent, and can be done in parallel; + start_tot = time.time() + self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.size) + self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.size) + end = time.time() + self.benchmark.add_phase({"name": "square", "time_sec": end - start_tot}) + + # C. Compute the difference of the 2 vectors. This must be done after the 2 previous computations; + start = time.time() + self.diff_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.y, self.z, self.size) + end = time.time() + self.benchmark.add_phase({"name": "diff", "time_sec": end - start}) + + # D. Compute the sum of the result; + start = time.time() + self.reduce_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.z, self.res, self.size) + end = time.time() + self.benchmark.add_phase({"name": "reduce", "time_sec": end - start}) + + result = self.res[0] + self.benchmark.add_to_benchmark("gpu_result", result) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tgpu result: {result:.4f}") + + return result + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + # Recompute the CPU result only if necessary; + start = time.time() + if self.current_iter == 0 or reinit: + x_g = 1 / np.linspace(1, self.size, self.size) + y_g = 2 / np.linspace(1, self.size, self.size) + + x_g = x_g ** 2 + y_g = y_g ** 2 + x_g -= y_g + self.cpu_result = np.sum(x_g) + cpu_time = time.time() - start + difference = np.abs(self.cpu_result - gpu_result) + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", difference) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tcpu result: {self.cpu_result:.4f}, " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") + + diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py new file mode 100644 index 00000000..e0f3c351 --- /dev/null +++ b/projects/resources/python/benchmark/benchmark.py @@ -0,0 +1,82 @@ +from benchmark_result import BenchmarkResult +from abc import ABC, abstractmethod +import time + + +class Benchmark(ABC): + """ + Base class for all benchmarks, it provides the general control flow of the benchmark execution; + """ + + def __init__(self, name: str, benchmark: BenchmarkResult): + self.name = name + self.benchmark = benchmark + self.current_iter = 0 + + @abstractmethod + def alloc(self, size: int) -> None: + """ + Allocate new memory on GPU used for the benchmark; + :param size: base factor used in the memory allocation, e.g. size of each array + """ + pass + + @abstractmethod + def init(self) -> None: + """ + Initialize the content of the input data of the benchmark; + """ + pass + + @abstractmethod + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + """ + Run an equivalent benchmark on CPU to obtain the correct result of the benchmark, + and compute the distance w.r.t. the GPU result; + :param gpu_result: the output of the GPU computation + :param reinit: if the GPU data was re-initialized in this computation + """ + pass + + @abstractmethod + def execute(self) -> object: + """ + Execute the main computation of this benchmark; + :return: the result of the GPU computation, it could be a scalar numeric value or an arbitrary data structure + """ + pass + + def run(self, policy: str, size: int, realloc: bool, reinit: bool) -> None: + + self.benchmark.start_new_benchmark(name=self.name, + policy=policy, + size=size, + realloc=realloc, + reinit=reinit, + iteration=self.current_iter) + + # TODO: set the execution policy; + + # Start a timer to monitor the total GPU execution time; + start = time.time() + + # Allocate memory for the benchmark; + if self.current_iter == 0 or realloc: + self.alloc(size) + # Initialize memory for the benchmark; + if self.current_iter == 0 or reinit: + self.init() + # Execute the benchmark; + gpu_result = self.execute() + + # Stop the timer; + end = time.time() + self.benchmark.add_total_time(end - start) + + # Perform validation on CPU; + self.cpu_validation(gpu_result, reinit) + + # Write to file the current result; + self.benchmark.save_to_file() + # Book-keeping; + self.current_iter += 1 diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py new file mode 100644 index 00000000..53df1a69 --- /dev/null +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -0,0 +1,81 @@ +import argparse + +from bench.bench_1 import Benchmark1 +from benchmark_result import BenchmarkResult + +############################## +############################## + +# Benchmark settings; +benchmarks = { + "b1": Benchmark1 +} + +num_elem = { + "b1": [100] +} + +policies = { + "b1": ["default"] +} + +############################## +############################## + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description="measure GrCUDA execution time") + + parser.add_argument("-d", "--debug", action='store_true', + help="If present, print debug messages") + parser.add_argument("-t", "--num_iter", metavar="N", type=int, default=BenchmarkResult.DEFAULT_NUM_ITER, + help="Number of times each benchmark is executed") + parser.add_argument("-o", "--output_path", metavar="path/to/output.json", + help="Path to the file where results will be stored") + parser.add_argument("--realloc", metavar="[True|False]", type=bool, nargs="*", + help="If True, allocate new memory and rebuild the GPU code at each iteration") + parser.add_argument("--reinit", metavar="[True|False]", type=bool, nargs="*", + help="If True, re-initialize the values used in each benchmark at each iteration") + parser.add_argument("-c", "--cpu_validation", action='store_true', + help="If present, validate the result of each benchmark using the CPU") + parser.add_argument("-b", "--benchmark", + help="If present, run the benchmark only for the specified kernel") + parser.add_argument("--policy", + help="If present, run the benchmark only with the selected policy") + parser.add_argument("-n", "--size", metavar="N", type=int, + help="Override the input data size used for the benchmarks") + + # Parse the input arguments; + args = parser.parse_args() + + debug = args.debug if args.debug else BenchmarkResult.DEFAULT_DEBUG + num_iter = args.num_iter if args.num_iter else BenchmarkResult.DEFAULT_NUM_ITER + output_path = args.output_path if args.output_path else "" + cpu_validation = args.cpu_validation if args.cpu_validation else BenchmarkResult.DEFAULT_CPU_VALIDATION + realloc = args.realloc if args.realloc else [BenchmarkResult.DEFAULT_REALLOC] + reinit = args.reinit if args.reinit else [BenchmarkResult.DEFAULT_REINIT] + + # Create a new benchmark result instance; + benchmark_res = BenchmarkResult(debug=debug, num_iterations=num_iter, output_path=output_path, cpu_validation=cpu_validation) + + if args.benchmark and benchmark_res.debug: + BenchmarkResult.log_message(f"using only benchmark: {args.benchmark}") + benchmarks = {args.benchmark: benchmarks[args.benchmark]} + + if args.policy and benchmark_res.debug: + BenchmarkResult.log_message(f"using only type: {args.policy}") + policies = {n: [args.policy] for n in policies.keys()} + + if args.size and benchmark_res.debug: + BenchmarkResult.log_message(f"using only size: {args.size}") + num_elem = {n: [args.size] for n in num_elem.keys()} + + # Execute each test; + for b_name, b in benchmarks.items(): + benchmark = b(benchmark_res) + for p in policies[b_name]: + for n in num_elem[b_name]: + for re in realloc: + for ri in reinit: + for i in range(num_iter): + benchmark.run(policy=p, size=n, realloc=re, reinit=ri) diff --git a/projects/resources/python/benchmark/benchmark_result.py b/projects/resources/python/benchmark/benchmark_result.py new file mode 100644 index 00000000..15accba9 --- /dev/null +++ b/projects/resources/python/benchmark/benchmark_result.py @@ -0,0 +1,137 @@ +import os +from datetime import datetime +import json + + +class BenchmarkResult: + + DEFAULT_RES_FOLDER = "../../../../data/results" + DEFAULT_NUM_ITER = 30 + DEFAULT_DEBUG = False + DEFAULT_CPU_VALIDATION = True + DEFAULT_REALLOC = False + DEFAULT_REINIT = True + + def __init__(self, + num_iterations: int = DEFAULT_NUM_ITER, + cpu_validation: bool = DEFAULT_CPU_VALIDATION, + debug: bool = DEFAULT_DEBUG, + output_path: str = "" + ): + self.debug = debug + + self.num_iterations = num_iterations + self._cpu_validation = cpu_validation + self._results = {"num_iterations": num_iterations, + "cpu_validation": cpu_validation, + "benchmarks": {}} + # Used to store the results of the benchmark currently being executed; + self._dict_current = {} + + # If true, use the provided output path as it is, without adding extensions or creating folders; + self._output_path = output_path if output_path else self.default_output_file_name() + output_folder = os.path.dirname(output_path) if output_path else self.DEFAULT_RES_FOLDER + if not os.path.exists(output_folder): + if self.debug: + BenchmarkResult.log_message(f"creating result folder: {output_folder}") + os.makedirs(output_folder) + if self.debug: + BenchmarkResult.log_message(f"storing results in {self._output_path}") + + def default_output_file_name(self) -> str: + output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + file_name = f"{output_date}_{self.num_iterations}.json" + return os.path.join(self.DEFAULT_RES_FOLDER, file_name) + + def start_new_benchmark(self, name: str, policy: str, size: int, + realloc: bool, reinit: bool, iteration: int) -> None: + """ + Benchmark results are stored in a nested dictionary with the following structure. + self.results["benchmarks"]->{benchmark_name}->{policy}->{size}->{realloc}->{reinit}->{actual result} + + :param name: name of the benchmark + :param policy: current policy used in the benchmark + :param size: size of the input data + :param realloc: if reallocation is performed + :param reinit: if re-initialization is performed + :param iteration: current iteration + """ + + # 1. Benchmark name; + if name in self._results["benchmarks"]: + dict_policy = self._results["benchmarks"][name] + else: + dict_policy = {} + self._results["benchmarks"][name] = dict_policy + # 2. Policy name; + if policy in dict_policy: + dict_size = dict_policy[policy] + else: + dict_size = {} + dict_policy[policy] = dict_size + # 3. Input size; + if size in dict_size: + dict_realloc = dict_size[size] + else: + dict_realloc = {} + dict_size[size] = dict_realloc + # 4. Realloc options; + if realloc in dict_realloc: + dict_reinit = dict_realloc[realloc] + else: + dict_reinit = {} + dict_realloc[realloc] = dict_reinit + # 5. Reinit options; + self._dict_current = {"phases": [], "iteration": iteration} + if reinit in dict_reinit: + dict_reinit[reinit] += [self._dict_current] + else: + dict_reinit[reinit] = [self._dict_current] + + if self.debug: + BenchmarkResult.log_message( + f"starting benchmark={name}, iter={iteration + 1}/{self.num_iterations}, " + f"policy={policy}, size={size}, realloc={realloc}, reinit={reinit}") + + def add_to_benchmark(self, key: str, message: object) -> None: + """ + Add an key-value pair in the current benchmark entry, e.g. ("allocation_time_ms", 10); + :param key: the key used to identify the message, e.g. "allocation_time_ms" + :param message: the value of the message, possibly a string, a number, + or any object that can be represented as JSON + """ + self._dict_current[key] = message + + def add_total_time(self, total_time: float) -> None: + """ + Add to the current benchmark entry the execution time of a benchmark iteration, + and compute the amount of overhead w.r.t. the single phases + :param total_time: execution time of the benchmark iteration + """ + self._dict_current["total_time_sec"] = total_time + tot_time_phases = sum([x["time_sec"] if "time_sec" in x else 0 for x in self._dict_current["phases"]]) + self._dict_current["overhead_sec"] = total_time - tot_time_phases + if self.debug: + BenchmarkResult.log_message(f"\ttotal execution time: {total_time:.4f} sec," + + f" overhead: {total_time - tot_time_phases:.4f} sec") + + def add_phase(self, phase: dict) -> None: + """ + Add a dictionary that represents a phase of a benchmark, to provide fine-grained profiling; + :param phase: a dictionary that contains information about a phase of the algorithm, + with information such as name, duration, description, etc... + """ + self._dict_current["phases"] += [phase] + if self.debug and "name" in phase and "time_sec" in phase: + BenchmarkResult.log_message(f"\t\t{phase['name']}: {phase['time_sec']:.4f} sec") + + def save_to_file(self) -> None: + with open(self._output_path, "w+") as f: + json_result = json.dumps(self._results, ensure_ascii=False, indent=4) + f.write(json_result) + + @staticmethod + def log_message(message: str) -> None: + date = datetime.now() + date_str = date.strftime("%Y-%m-%d-%H-%M-%S-%f") + print(f"[{date_str} grcuda-python] {message}") From 0936f5feef766b4833231d9d5c0e92a9ebe6df25 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 26 Apr 2020 17:09:31 +0200 Subject: [PATCH 033/236] added 2 benchmarks and random init --- .../python/benchmark/bench/bench_1.py | 29 ++- .../python/benchmark/bench/bench_2.py | 214 ++++++++++++++++++ .../python/benchmark/bench/bench_3.py | 162 +++++++++++++ .../resources/python/benchmark/benchmark.py | 1 + .../python/benchmark/benchmark_main.py | 24 +- .../python/benchmark/benchmark_result.py | 5 +- 6 files changed, 422 insertions(+), 13 deletions(-) create mode 100644 projects/resources/python/benchmark/bench/bench_2.py create mode 100644 projects/resources/python/benchmark/bench/bench_3.py diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index afbbb42f..50f19cde 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -2,6 +2,8 @@ import polyglot import time import numpy as np +from random import random, randint, seed + from benchmark import Benchmark from benchmark_result import BenchmarkResult @@ -101,10 +103,16 @@ def alloc(self, size: int): self.benchmark.add_phase({"name": "allocation", "time_sec": end - start}) def init(self): + self.random_seed = randint(0, 10000000) + seed(self.random_seed) start = time.time() for i in range(self.size): - self.x[i] = 1 / (i + 1) - self.y[i] = 2 / (i + 1) + if self.benchmark.random_init: + self.x[i] = random() + self.y[i] = 2 * random() + else: + self.x[i] = 1 / (i + 1) + self.y[i] = 2 / (i + 1) end = time.time() self.benchmark.add_phase({"name": "initialization", "time_sec": end - start}) @@ -113,11 +121,11 @@ def execute(self) -> object: self.res[0] = 0 # Call the kernel. The 2 computations are independent, and can be done in parallel; - start_tot = time.time() + start = time.time() self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.size) self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.size) end = time.time() - self.benchmark.add_phase({"name": "square", "time_sec": end - start_tot}) + self.benchmark.add_phase({"name": "square", "time_sec": end - start}) # C. Compute the difference of the 2 vectors. This must be done after the 2 previous computations; start = time.time() @@ -142,8 +150,17 @@ def cpu_validation(self, gpu_result: object, reinit: bool) -> None: # Recompute the CPU result only if necessary; start = time.time() if self.current_iter == 0 or reinit: - x_g = 1 / np.linspace(1, self.size, self.size) - y_g = 2 / np.linspace(1, self.size, self.size) + # Re-initialize the random number generator with the same seed as the GPU to generate the same values; + seed(self.random_seed) + if self.benchmark.random_init: + x_g = np.zeros(self.size) + y_g = np.zeros(self.size) + for i in range(self.size): + x_g[i] = random() + y_g[i] = 2 * random() + else: + x_g = 1 / np.linspace(1, self.size, self.size) + y_g = 2 / np.linspace(1, self.size, self.size) x_g = x_g ** 2 y_g = y_g ** 2 diff --git a/projects/resources/python/benchmark/bench/bench_2.py b/projects/resources/python/benchmark/bench/bench_2.py new file mode 100644 index 00000000..5c14fbb3 --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_2.py @@ -0,0 +1,214 @@ +# coding=utf-8 +import polyglot +import time +import numpy as np +from random import random, randint, seed + +from benchmark import Benchmark +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_THREADS_PER_BLOCK = 128 + +SQUARE_KERNEL = """ + extern "C" __global__ void square(float* x, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + x[idx] = x[idx] * x[idx]; + } + } + """ + +DIFF_KERNEL = """ + extern "C" __global__ void diff(float* x, float* y, float* z, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + z[idx] = x[idx] - y[idx]; + } + } + """ + +ADDTWO_KERNEL = """ + extern "C" __global__ void addtwo(float* a, float* b, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + b[idx] = a[idx] + 2.0; + } + } + """ + +REDUCE_KERNEL = """ + extern "C" __global__ void reduce(float *x, float *y, float *res, int n) { + __shared__ float cache[%d]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + cache[threadIdx.x] = x[i] + y[i]; + } + __syncthreads(); + + // Perform tree reduction; + i = %d / 2; + while (i > 0) { + if (threadIdx.x < i) { + cache[threadIdx.x] += cache[threadIdx.x + i]; + } + __syncthreads(); + i /= 2; + } + if (threadIdx.x == 0) { + atomicAdd(res, cache[0]); + } + } + """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + +############################## +############################## + + +class Benchmark2(Benchmark): + """ + Compute a complex graph of interconnected computations using GrCUDA. + Structure of the computation: + A: x^2 ──┐ + ├─> C: z=x-y ───┐ + B: x^2 ──┘ │ + ├-> F: sum(z+b) + │ + D: a^2 ────> E: b=a+2 ──┘ + """ + + def __init__(self, benchmark: BenchmarkResult): + super().__init__("b2", benchmark) + self.size = 0 + self.x = None + self.y = None + self.z = None + self.res = None + self.a = None + self.b = None + self.num_blocks = 0 + self.square_kernel = None + self.diff_kernel = None + self.addtwo_kernel = None + self.reduce_kernel = None + self.cpu_result = 0 + + def alloc(self, size: int): + self.size = size + self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + # Allocate 2 vectors; + start = time.time() + self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.y = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.a = polyglot.eval(language="grcuda", string=f"float[{size}]") + + # Allocate support vectors; + self.z = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.b = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.res = polyglot.eval(language="grcuda", string=f"float[1]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + self.square_kernel = build_kernel(SQUARE_KERNEL, "square", "pointer, sint32") + self.diff_kernel = build_kernel(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32") + self.addtwo_kernel = build_kernel(ADDTWO_KERNEL, "addtwo", "pointer, pointer, sint32") + self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, pointer, sint32") + + end = time.time() + self.benchmark.add_phase({"name": "allocation", "time_sec": end - start}) + + def init(self): + self.random_seed = randint(0, 10000000) + seed(self.random_seed) + start = time.time() + for i in range(self.size): + if self.benchmark.random_init: + self.x[i] = random() + self.y[i] = 2 * random() + self.a[i] = 4 * random() + else: + self.x[i] = 1 / (i + 1) + self.y[i] = 2 / (i + 1) + self.a[i] = 4 / (i + 1) + end = time.time() + self.benchmark.add_phase({"name": "initialization", "time_sec": end - start}) + + def execute(self) -> object: + # This must be reset at every execution; + self.res[0] = 0 + + # Call the kernel. The 2 computations are independent, and can be done in parallel; + start = time.time() + self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.size) + self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.size) + end = time.time() + self.benchmark.add_phase({"name": "square", "time_sec": end - start}) + + # C. Compute the difference of the 2 vectors. This must be done after the 2 previous computations; + start = time.time() + self.diff_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.y, self.z, self.size) + end = time.time() + self.benchmark.add_phase({"name": "diff", "time_sec": end - start}) + + # D. Compute the other branch of the computation; + start = time.time() + self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.a, self.size) + end = time.time() + self.benchmark.add_phase({"name": "square_other_branch", "time_sec": end - start}) + + # E. Continue computing the other branch; + start = time.time() + self.addtwo_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.a, self.b, self.size) + end = time.time() + self.benchmark.add_phase({"name": "add_two_other_branch", "time_sec": end - start}) + + # F. Compute the sum of the result; + start = time.time() + self.reduce_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.z, self.b, self.res, self.size) + end = time.time() + self.benchmark.add_phase({"name": "reduce", "time_sec": end - start}) + + result = self.res[0] + self.benchmark.add_to_benchmark("gpu_result", result) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tgpu result: {result:.4f}") + + return result + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + # Recompute the CPU result only if necessary; + start = time.time() + if self.current_iter == 0 or reinit: + # Re-initialize the random number generator with the same seed as the GPU to generate the same values; + seed(self.random_seed) + if self.benchmark.random_init: + x_g = np.zeros(self.size) + y_g = np.zeros(self.size) + a_g = np.zeros(self.size) + for i in range(self.size): + x_g[i] = random() + y_g[i] = 2 * random() + a_g[i] = 4 * random() + else: + x_g = 1 / np.linspace(1, self.size, self.size) + y_g = 2 / np.linspace(1, self.size, self.size) + a_g = 4 / np.linspace(1, self.size, self.size) + + x_g = x_g ** 2 + y_g = y_g ** 2 + a_g = a_g ** 2 + x_g -= y_g + a_g += 2 + self.cpu_result = np.sum(x_g + a_g) + cpu_time = time.time() - start + difference = np.abs(self.cpu_result - gpu_result) + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", difference) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tcpu result: {self.cpu_result:.4f}, " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") + + diff --git a/projects/resources/python/benchmark/bench/bench_3.py b/projects/resources/python/benchmark/bench/bench_3.py new file mode 100644 index 00000000..a3bef0db --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_3.py @@ -0,0 +1,162 @@ +# coding=utf-8 +import polyglot +import time +import numpy as np +from random import random, randint, seed + +from benchmark import Benchmark +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_ITER = 5 + +NUM_THREADS_PER_BLOCK = 128 + +SQUARE_KERNEL = """ + extern "C" __global__ void square(float* x, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + x[idx] = x[idx] * x[idx]; + } + } + """ + +REDUCE_KERNEL = """ + extern "C" __global__ void reduce(float *x, float *y, float *res, int n) { + __shared__ float cache[%d]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + cache[threadIdx.x] = x[i] + y[i]; + } + __syncthreads(); + + // Perform tree reduction; + i = %d / 2; + while (i > 0) { + if (threadIdx.x < i) { + cache[threadIdx.x] += cache[threadIdx.x + i]; + } + __syncthreads(); + i /= 2; + } + if (threadIdx.x == 0) { + atomicAdd(res, cache[0]); + } + } + """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + +############################## +############################## + + +class Benchmark3(Benchmark): + """ + Compute a pipeline of GrCUDA kernels using loops to build a dynamic graph. + Structure of the computation: + A: x^2 ─ [5 times] ─┐ + ├─> C: res=sum(x+y) + B: x^2 ─ [5 times] ─┘ + """ + + def __init__(self, benchmark: BenchmarkResult): + super().__init__("b3", benchmark) + self.size = 0 + self.x = None + self.y = None + self.res = None + self.num_blocks = 0 + self.square_kernel = None + self.reduce_kernel = None + self.cpu_result = 0 + self.num_iter = NUM_ITER + + def alloc(self, size: int): + self.size = size + self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + # Allocate 2 vectors; + start = time.time() + self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.y = polyglot.eval(language="grcuda", string=f"float[{size}]") + + # Allocate a support vector; + self.res = polyglot.eval(language="grcuda", string=f"float[1]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + self.square_kernel = build_kernel(SQUARE_KERNEL, "square", "pointer, sint32") + self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, pointer, sint32") + + end = time.time() + self.benchmark.add_phase({"name": "allocation", "time_sec": end - start}) + + def init(self): + self.random_seed = randint(0, 10000000) + seed(self.random_seed) + start = time.time() + for i in range(self.size): + if self.benchmark.random_init: + self.x[i] = random() + self.y[i] = random() + else: + self.x[i] = 1 / (i + 1) + self.y[i] = 1 / (i + 1) + end = time.time() + self.benchmark.add_phase({"name": "initialization", "time_sec": end - start}) + + def execute(self) -> object: + # This must be reset at every execution; + self.res[0] = 0 + + # A. B. Call the kernels. The 2 computations are independent, and can be done in parallel; + for i in range(self.num_iter): + start = time.time() + self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.size) + self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.size) + end = time.time() + self.benchmark.add_phase({"name": f"square_{i}", "time_sec": end - start}) + + # C. Compute the sum of the result; + start = time.time() + self.reduce_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.y, self.res, self.size) + end = time.time() + self.benchmark.add_phase({"name": "reduce", "time_sec": end - start}) + + result = self.res[0] + self.benchmark.add_to_benchmark("gpu_result", result) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tgpu result: {result:.4f}") + + return result + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + # Recompute the CPU result only if necessary; + start = time.time() + if self.current_iter == 0 or reinit: + # Re-initialize the random number generator with the same seed as the GPU to generate the same values; + seed(self.random_seed) + if self.benchmark.random_init: + x_g = np.zeros(self.size) + y_g = np.zeros(self.size) + for i in range(self.size): + x_g[i] = random() + y_g[i] = random() + else: + x_g = 1 / np.linspace(1, self.size, self.size) + y_g = 1 / np.linspace(1, self.size, self.size) + + for i in range(NUM_ITER): + x_g = x_g ** 2 + y_g = y_g ** 2 + self.cpu_result = np.sum(x_g + y_g) + cpu_time = time.time() - start + difference = np.abs(self.cpu_result - gpu_result) + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", difference) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tcpu result: {self.cpu_result:.4f}, " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") + + diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py index e0f3c351..2d8c75cd 100644 --- a/projects/resources/python/benchmark/benchmark.py +++ b/projects/resources/python/benchmark/benchmark.py @@ -12,6 +12,7 @@ def __init__(self, name: str, benchmark: BenchmarkResult): self.name = name self.benchmark = benchmark self.current_iter = 0 + self.random_seed = 42 # Default random seed, it will be overwritten with a random one; @abstractmethod def alloc(self, size: int) -> None: diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index 53df1a69..3ff3bd46 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -1,6 +1,8 @@ import argparse from bench.bench_1 import Benchmark1 +from bench.bench_2 import Benchmark2 +from bench.bench_3 import Benchmark3 from benchmark_result import BenchmarkResult ############################## @@ -8,15 +10,21 @@ # Benchmark settings; benchmarks = { - "b1": Benchmark1 + "b1": Benchmark1, + "b2": Benchmark2, + "b3": Benchmark3, } num_elem = { - "b1": [100] + "b1": [100], + "b2": [100], + "b3": [100], } policies = { - "b1": ["default"] + "b1": ["default"], + "b2": ["default"], + "b3": ["default"], } ############################## @@ -26,7 +34,7 @@ parser = argparse.ArgumentParser(description="measure GrCUDA execution time") - parser.add_argument("-d", "--debug", action='store_true', + parser.add_argument("-d", "--debug", action="store_true", help="If present, print debug messages") parser.add_argument("-t", "--num_iter", metavar="N", type=int, default=BenchmarkResult.DEFAULT_NUM_ITER, help="Number of times each benchmark is executed") @@ -36,7 +44,7 @@ help="If True, allocate new memory and rebuild the GPU code at each iteration") parser.add_argument("--reinit", metavar="[True|False]", type=bool, nargs="*", help="If True, re-initialize the values used in each benchmark at each iteration") - parser.add_argument("-c", "--cpu_validation", action='store_true', + parser.add_argument("-c", "--cpu_validation", action="store_true", help="If present, validate the result of each benchmark using the CPU") parser.add_argument("-b", "--benchmark", help="If present, run the benchmark only for the specified kernel") @@ -44,6 +52,8 @@ help="If present, run the benchmark only with the selected policy") parser.add_argument("-n", "--size", metavar="N", type=int, help="Override the input data size used for the benchmarks") + parser.add_argument("-r", "--random", action="store_true", + help="Initialize benchmarks randomly whenever possible") # Parse the input arguments; args = parser.parse_args() @@ -54,9 +64,11 @@ cpu_validation = args.cpu_validation if args.cpu_validation else BenchmarkResult.DEFAULT_CPU_VALIDATION realloc = args.realloc if args.realloc else [BenchmarkResult.DEFAULT_REALLOC] reinit = args.reinit if args.reinit else [BenchmarkResult.DEFAULT_REINIT] + random_init = args.random if args.random else BenchmarkResult.DEFAULT_RANDOM_INIT # Create a new benchmark result instance; - benchmark_res = BenchmarkResult(debug=debug, num_iterations=num_iter, output_path=output_path, cpu_validation=cpu_validation) + benchmark_res = BenchmarkResult(debug=debug, num_iterations=num_iter, output_path=output_path, + cpu_validation=cpu_validation, random_init=random_init) if args.benchmark and benchmark_res.debug: BenchmarkResult.log_message(f"using only benchmark: {args.benchmark}") diff --git a/projects/resources/python/benchmark/benchmark_result.py b/projects/resources/python/benchmark/benchmark_result.py index 15accba9..1dd11c33 100644 --- a/projects/resources/python/benchmark/benchmark_result.py +++ b/projects/resources/python/benchmark/benchmark_result.py @@ -11,19 +11,22 @@ class BenchmarkResult: DEFAULT_CPU_VALIDATION = True DEFAULT_REALLOC = False DEFAULT_REINIT = True + DEFAULT_RANDOM_INIT = True def __init__(self, num_iterations: int = DEFAULT_NUM_ITER, cpu_validation: bool = DEFAULT_CPU_VALIDATION, debug: bool = DEFAULT_DEBUG, + random_init: bool = DEFAULT_RANDOM_INIT, output_path: str = "" ): self.debug = debug - + self.random_init = random_init self.num_iterations = num_iterations self._cpu_validation = cpu_validation self._results = {"num_iterations": num_iterations, "cpu_validation": cpu_validation, + "random_init": random_init, "benchmarks": {}} # Used to store the results of the benchmark currently being executed; self._dict_current = {} From 9d5fa751c5638876c298711582ec542c5eb939f7 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 27 Apr 2020 09:54:57 +0200 Subject: [PATCH 034/236] updated readme --- notes.md => NOTES.md | 0 README.md | 26 +++++++++++++++++-- .../python/benchmark/benchmark_main.py | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) rename notes.md => NOTES.md (100%) diff --git a/notes.md b/NOTES.md similarity index 100% rename from notes.md rename to NOTES.md diff --git a/README.md b/README.md index 113b770c..cfae3b53 100644 --- a/README.md +++ b/README.md @@ -250,7 +250,7 @@ graalpython -m venv ~/graalpython_venv source ~/graalpython_venv/bin/activate ``` -* Recommended: install 'numpy` in Graalpython +* Recommended: install 'numpy` in Graalpython (required for performance benchmarking) ``` graalpython -m ginstall install setuptools; @@ -264,7 +264,29 @@ graalpython -m ginstall install numpy; * Also update the project SDK and the default JUnit configurations to use the GraalVM SDK in `$GRAAL_HOME`, and update the `PATH` variable so that it can find `nvcc` 9. Run tests with `mx unittest com.nvidia` - +* Run a specific test using, for example, `mx unittest com.nvidia.grcuda.test.gpu.ExecutionDAGTest#executionDAGConstructorTest` + +10. Execute performance tests using Graalpython + +``` +cd projects/resources/python/benchmark +graalpython --jvm --polyglot --WithThread benchmark_main.py -d -i 5 -n 1000 +``` + +* Benchmarks are defined in the `projects/resources/python/benchmark/bench` folder, +and you can create more benchmarks by inheriting from the `Benchmark` class +* The output of benchmarks is stored in a JSON (by default, located in `data/results`) +* The benchmarking suite supports the following options + 1. `-d`, `--debug`: print to the console the results and details of each benchmark. False by default + 2. `-t`, `--num_iter`: number of times that each benchmark is executed, for each combination of options. 30 by default + 3. `-o`, `--output_path`: full path to the file where results are stored. By default results are stored in `data/results`, + and the file name is generated automatically + 4. `--realloc`: if true, allocate new memory and rebuild the GPU code at each iteration. False by default + 5. `-reinit`: if true, re-initialize the values used in each benchmark at each iteration. True by default + 6. `-c`, `--cpu_validation`: if present, validate the result of each benchmark using the CPU + 7. `-b`, `--benchmark`: run the benchmark only for the specified kernel. Otherwise run all benchmarks specified in `benchmark_main.py` + 8. `-n`, `--size`: specify the input size of data used as input for each benchmark. Otherwise use the sizes specified in `benchmark_main.py` + 9. `-r`, `--random`: initialize benchmarks randomly whenever possible. True by default diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index 3ff3bd46..db3e6b34 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -36,7 +36,7 @@ parser.add_argument("-d", "--debug", action="store_true", help="If present, print debug messages") - parser.add_argument("-t", "--num_iter", metavar="N", type=int, default=BenchmarkResult.DEFAULT_NUM_ITER, + parser.add_argument("-i", "--num_iter", metavar="N", type=int, default=BenchmarkResult.DEFAULT_NUM_ITER, help="Number of times each benchmark is executed") parser.add_argument("-o", "--output_path", metavar="path/to/output.json", help="Path to the file where results will be stored") From 3364c72322a869e938ac5d80e4c4d39465c59a36 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 27 Apr 2020 11:20:00 +0200 Subject: [PATCH 035/236] updatnig notes --- NOTES.md | 108 +++++++++++++++++++++++++++++++++++------------------- README.md | 20 +++++----- 2 files changed, 81 insertions(+), 47 deletions(-) diff --git a/NOTES.md b/NOTES.md index 115ea517..f681f9f9 100644 --- a/NOTES.md +++ b/NOTES.md @@ -1,49 +1,89 @@ - - # Extending GrCUDA with a dynamic computational DAG The main idea is to **represent GrCUDA computations as vertices of a DAG**, connected using their dependencies (e.g. the output of a kernel is used as input in another one). * The DAG allows scheduling parallel computations on different streams and avoid synchronization when not necessary - * See `projects/resources/python/examples/pipeline_1.py` for a simple example of how it can be useful + * See `projects/resources/python/examples` for simple examples of how this technique can be useful Differences w.r.t. existing techniques (e.g. TensorFlow or [CUDA Graphs](https://devblogs.nvidia.com/cuda-graphs/)): 1. The DAG creation is automatic, instead of being built by the user - 2. The DAG is built at runtime, not at compile time. This means that we don't have to worry about the control flow of the host program, but only about data dependencies, + 2. The DAG is built at runtime, not at compile time or eagerly. This means that we don't have to worry about the control flow of the host program, but only about data dependencies, as we dynamically add and schedule new vertices/computations as the user provides them. We can also collect profiling information and adjust the DAG creation based on that (e.g. how many CUDA streams we need) - -We need a class (e.g. `GpuExecutionContext`) that tracks GPU computational elements (e.g. `kernels`) declarations and invocations - * When a new computation is created, or when it is called, notify `GpuExecutionContext` so that it updates the `DAG` + +How it works, in a few words + * The class `GpuExecutionContext` tracks GPU computational elements (e.g. `kernels`) declarations and invocations + * When a new computation is created, or when it is called, it notifies `GpuExecutionContext` so that it updates the `DAG` by computing the data dependencies of the new computation + * `GpuExecutionContext` uses the DAG to understand if the new computation can start immediately, or it must wait for other computations to finish * Different computations are overlapped using different CUDA streams - * If a computation requires one or more computations to finish before starting, it will have to wait by using a synchronization point on the right CUDA stream(s) - * Otherwise it will execute immediately - + * If a computation requires one or more computations to finish before starting, it will have to wait by using a synchronization point on the right CUDA stream(s) -## API Design +## What's already there + +**TODO!** + +* Stream exposed, with assignment + +* **Current limitations** + 1. Dependency computation, K1(X, Y), K2(X), K3(Y) + 2. Synchronization is done by the host on the main thread, this limits parallel execution in the example before. + Instead, we should assign computations to different threads, and block the thread execution. + This was the first approach, but it gave sync errors (probably due to other problems that are now solved) + +## Open questions + +### Questions on API design (i.e. how do we provide the best user experience) + +1. How to understand if a parameter is read-only? ([API Design, point 4](#api-design)) +2. How do we track scalar values? ([API Design, point 5](#api-design)) +3. How can user specify options cleanly? ([API Design, point 2](#api-design)) + * Using only context startup options is limiting, but it simplify the problem (we don't have to worry about changing how the DAG is built at runtime) + * If we want provide more flexibility, we can add functions to the DSL, but that's not very clean + +### Questions on internal development (i.e. how do we do something in the most powerful/flexible/efficient way) + +1. How to handle library functions? They usually have no stream options ([API Design, point 6](#api-design)) +2. How to handle pre-registered libraries and external functions? Same problem as question 1 + +### Other questions (e.g. things I don't understand about GrCUDA/GraalVM/Truffle) + +1. What are `map` and `shred` functions? Are they exposed to the outside? +2. When doing unit-testing, can we access internal data structures of the guest language (e.g. to monitor the state of the DAG) +3. In Graalpython, can we create new guest polyglot contexts at runtime, with user-specified options? + +*** + +## Detailed development notes + +## API Design Dependencies can be explicitely specified by the user using handles, or we can try inferring dependencies automatically 1. Automatic dependency inferring is more interesting from a research perspective, and *cleaner* for end-users - * By default, we need to have explicit sync points after every kernel call - * Automatic dependency inferring will remove some sync points if possible - * It must be a *white-listing* process, as we need to guarantee correctness - 2. The API needs ways to modify/turn off this policy, if desired - * Startup option? Easy, but cannot be modified + * One option is to perform synchronization *white-listing*: have explicit sync points after every kernel call, and remove dependencies if possible. + **Pro:** it should be better at guaranteeing correctness. **Cons:** finding if we *do not* have a dependency is more complex that finding if we have one + * The other option is *black-listing*, i.e. do not have any sync point and add them if a dependency is found. + This is the option currently used: it is simpler, faster, and so far I could not find cases where the 2 approaches are not identical + 2. The API needs ways to modify the scheduling policy, if desired (e.g. go back to fully synchronized execution) + * Context startup option? Easy, but cannot be modified * Expose a function in the GrCUDA DSL? More flexibility, but changing options using the DSL is not very clean 3. How to handle CPU control flow? In GrCUDA we are not aware of `if` and `for` loops on the host side * The DAG is built dynamically: we need to update it as we receive scheduling orders, and decide if we can execute or not. We don't care about the original control flow 4. How do we identify if a **parameter is read-only**? If two kernels use the same parameter but only read from it, they can execute in parallel * This is not trivial: LLVM can understand, for example, if a scalar value is read-only, but doing that with an array is not always possible - * Users might have to specify which parameters are read-only in the kernel signature, which is probably better than using explicit handles + * Users might have to specify which parameters are read-only in the kernel signature, which is still better than using explicit handles 5. How do we handle scalar values? We could also have dependencies due to scalar values (e.g. a computation is started only if the error in the next iteration is above a threashold) - * Scalars are returned by copy, so we cannot keep track of their dependencies. Input scalars are read-only by definition, but what about output scalars? - * Currently kernels cannot return scalar values, and scalar outputs are stored in a size-1 array (which we can treat as any other array) - * But library functions can return scalars! - * One idea could be to *box* scalar values with Truffle nodes and store the actual value using a `Future`. + * Currently, only reads from `DeviceArray` (and similar) return scalar values, and they must be done synchronously, as the result is immediately exposed to the guest language. + * Array reads (and writes) are done synchronously by the host, and we guarantee that no kernel that uses the affected array is running + * Kernels do not return scalar values, and scalar outputs are stored in a size-1 array (which we can treat as any other array) + * Moreover, **a user can extract a scalar from a size-1 array, and use it as input to another kernel. This creates a dependency that cannot be found automatically!** + * The only way around that is to have the option to manually specify dependencies + * Library functions can return scalars! + * One idea could be to *box* scalar values with Truffle nodes and store the actual value using a `Future`. If the user reads or writes the value, we wait for the GPU computation to end. Then the scalar value can be unboxed to avoid further overheads. - 6. Libraries functions: library functions are more complex to handle as they could also have code running on the host side. + * But running library functions on streams is problematic (see problem 6), so this solution might not be required + 6. Library functions: library functions are more complex to handle as they could also have code running on the host side. * They also do not expose streams, so it could be difficult to pipeline them * In some cases they might expose streams in the signature, we can probably find them by parsing the signature * They can also return scalars (see problem 5) - + * If we run them on threads, we parallelize at least the CPU side ## What is a computational element in GrCUDA? @@ -53,7 +93,9 @@ Dependencies can be explicitely specified by the user using handles, or we can t `DeviceArray` accesses can be done in any point, and are not represented as kernels (as they happen on CPU side, using managed memory) * If a `DeviceArray` access happens between two kernels, we must keep the sync point - * Similar considerations for `MultiDimDeviceArray`. We don't need to deal with inner dimensions, the top-level access is enough to keep a sync point + * Similar considerations for `MultiDimDeviceArray`. We don't need to deal with the outer dimensions, as only the innermost level accesses managed memory + * Accesses to managed memory are added to the DAG only if they require synchronization. + If an access follows another access (e.g. when initializing an array) we can skip the scheduling and execute it immediately, without scheduling overhead Pre-registered libraries, such as RAPIDS, can be called like `dbscan_func = polyglot.eval(language="grcuda", string="ML::cumlDpDbscanFit")` * They are added to a namespace just like `buildkernel` @@ -70,14 +112,16 @@ Other stuff? E.g. `map` and `shred`, currently not documented Invocation to computational elements are wrapped in classes that extend a generic `GrCUDAComputationalElement`, which is used to build the vertices of the DAG and exposes interfaces to compute data dependencies with other `GrCUDAComputationalElements` and to schedule the computation -# Other notes on GrCUDA architecture +## Other notes on GrCUDA architecture + +These notes relate to the structure of the original GrCUDA repository. You can skip them if you are already familiar with it! The `nodes` package contains the basic Truffle nodes that define the language - * Not immediately relevant to this project, we can deal with already-parsed functions (e.g. `buildkernel`) and `InteropLibrary` objects + * Not relevant at the moment, as we can deal with already-parsed functions (e.g. `buildkernel`) and `InteropLibrary` objects * But it might be required to add nodes to handle scalar values The `function` package contains functions that can be invoked through the DSL, such as `buildkernel` - * We might want to add some function to change the runtime behaviour at runtime + * We might want to add some function to enable the user to change the runtime behaviour () `Namespace` handling: the `Namespace` class maintains a tree of functions (e.g. `buildkernel`) and other namespaces (e.g. `ML`) * When `CallNode` is executed, we look for a function whose name matches the identifier of the `CallNode` @@ -85,14 +129,4 @@ The `function` package contains functions that can be invoked through the DSL, s * Additional namespaces are created in `GrCUDAContext`, and a registry like `CUMLRegistry` adds functions to the namespace * Each function in the registry is added to the namespace as an `ExternalFunction` -## Open questions -1. What are `map` and `shred` functions? Are they exposed to the outside? -2. How to handle library functions? Wrapping them with a `GrCUDAComputationalElement`? -3. How to handle pre-registered libraries and external functions? Wrapping them with a `GrCUDAComputationalElement`? -4. How do we modify kernel calls to add/remove sync points? -5. How do we execute kernels in parallel? We need to have streams, and a stream manager -6. How do we monitor accesses to `DeviceArrays` to preserve sync points? -7. How do we track scalar values? -8. How to understand if a parameter is read-only? -9. When doing unit-testing, can we access internal data structures of the guest language (e.g. to monitor the state of the DAG) diff --git a/README.md b/README.md index cfae3b53..1f2b0c75 100644 --- a/README.md +++ b/README.md @@ -198,7 +198,7 @@ mx --dynamicimports graalpython --cp-sfx `pwd`/mxbuild/dists/jdk1.8/grcuda.jar \ * This section contains all the steps required to setup GrCUDA if your goal is to contribute to its development, or simply hack with it. This guide refers to GraalVM Community Edition JDK8 for Linux with `amd64` architectures, i.e. download releases prefixed with `graalvm-ce-java8-linux-amd64` or something like that. -1. Get the source code of GrCUDA, graal, mx +1. **Get the source code of GrCUDA, graal, mx** ``` git clone https://github.com/oracle/graal.git @@ -206,13 +206,13 @@ git clone https://github.com/graalvm/mx.git git clone https://github.com/NVIDIA/grcuda.git (this can be replaced with a fork) ``` -2. Download the right JDK +2. **Download the right JDK** * [Here](https://github.com/graalvm/openjdk8-jvmci-builder/releases/tag/jvmci-20.0-b02) you can find releases for GraalVM 20.0, but other versions are available on the same repository -3. Download the right build for GraalVM +3. **Download the right build for GraalVM** * [Here](https://github.com/graalvm/graalvm-ce-builds/releases) you can find releases for GraalVM 20.0, and more recent versions once they will become available -4. Setup your CUDA environment +4. **Setup your CUDA environment** * Install CUDA and Nvidia drivers, for exampel following the steps [here](https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=CentOS&target_version=7&target_type=rpmnetwork) * Add the following to your environment (assuming that you have installed CUDA in the default `/usr/local` location, and using the `nvcc` compiler @@ -221,7 +221,7 @@ export CUDA_DIR=/usr/local/cuda export PATH=$PATH:$CUDA_DIR/bin ``` -5. Setup your GraalVM and GrCUDA environment +5. **Setup your GraalVM and GrCUDA environment** * Add the following to your environment (assuming you have installed the releases mentioned in step 2 and 3) ``` @@ -233,7 +233,7 @@ export PATH=$GRAAL_HOME/bin:$PATH export PATH=$JAVA_HOME/bin:$PATH ``` -6. Install languages for GraalVM (optional, but recommended) +6. **Install languages for GraalVM** (optional, but recommended) ``` gu available @@ -258,15 +258,15 @@ graalpython -m ginstall install Cython; graalpython -m ginstall install numpy; ``` -7. Install GrCUDA with `./install.sh` +7. **Install GrCUDA with** `./install.sh` -8. Setup your IDE with `mx ideinit` +8. **Setup your IDE with** `mx ideinit` * Also update the project SDK and the default JUnit configurations to use the GraalVM SDK in `$GRAAL_HOME`, and update the `PATH` variable so that it can find `nvcc` -9. Run tests with `mx unittest com.nvidia` +9. **Run tests with** `mx unittest com.nvidia` * Run a specific test using, for example, `mx unittest com.nvidia.grcuda.test.gpu.ExecutionDAGTest#executionDAGConstructorTest` -10. Execute performance tests using Graalpython +10. **Execute performance tests using Graalpython** ``` cd projects/resources/python/benchmark From fe9e091b4b6768cb901e1923bb8af218d30d83f7 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 27 Apr 2020 12:20:17 +0200 Subject: [PATCH 036/236] updated notes --- NOTES.md | 40 +++++++++++++++---- .../nvidia/grcuda/test/BuildKernelTest.java | 7 ++-- .../grcuda/test/gpu/ExecutionDAGTest.java | 16 +++----- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/NOTES.md b/NOTES.md index f681f9f9..40d877f2 100644 --- a/NOTES.md +++ b/NOTES.md @@ -4,12 +4,12 @@ The main idea is to **represent GrCUDA computations as vertices of a DAG**, conn * The DAG allows scheduling parallel computations on different streams and avoid synchronization when not necessary * See `projects/resources/python/examples` for simple examples of how this technique can be useful -Differences w.r.t. existing techniques (e.g. TensorFlow or [CUDA Graphs](https://devblogs.nvidia.com/cuda-graphs/)): +**Differences w.r.t. existing techniques** (e.g. TensorFlow or [CUDA Graphs](https://devblogs.nvidia.com/cuda-graphs/)): 1. The DAG creation is automatic, instead of being built by the user 2. The DAG is built at runtime, not at compile time or eagerly. This means that we don't have to worry about the control flow of the host program, but only about data dependencies, as we dynamically add and schedule new vertices/computations as the user provides them. We can also collect profiling information and adjust the DAG creation based on that (e.g. how many CUDA streams we need) -How it works, in a few words +**How it works, in a few words** * The class `GpuExecutionContext` tracks GPU computational elements (e.g. `kernels`) declarations and invocations * When a new computation is created, or when it is called, it notifies `GpuExecutionContext` so that it updates the `DAG` by computing the data dependencies of the new computation * `GpuExecutionContext` uses the DAG to understand if the new computation can start immediately, or it must wait for other computations to finish @@ -18,15 +18,39 @@ How it works, in a few words ## What's already there -**TODO!** - -* Stream exposed, with assignment +* The DAG supports kernel invocation, and array accesses (both `DeviceArray` and `MultiDimDeviceArray`) + * Kernels are executed in parallel, on different streams, whenever possible +* **Main classes used by the scheduler** + 1. `GpuExecutionContext`: takes care of scheduling and executing computations, it is the director of the orchestration and manages the DAG + 2. `GrCUDAComputationalElement`: abstract class that wraps GrCUDA computations, e.g. kernel executions and array accesses. + It provides `GpuExecutionContext` with functions used to compute dependencies or decide if the computation must be done synchronously (e.g. array accesses) + 3. `ExecutionDAG`: the DAG representing the dependencies between computations, it is composed of vertices that wrap each `GrCUDAComputationalElement` + 4. `GrCUDAStremManager`: class that handles the creation and the assignment of streams to kernels +* **Basic execution flow** + 1. The host language (i.e. the user) calls an `InteropLibrary` object that can be associated to a `GrCUDAComputationalElement`, e.g. a kernel execution or an array access + 2. A new `GrCUDAComputationalElement` is created and registered to the `GpuExecutionContext`, to represent the computation + 3. `GpuExecutionContext` adds the computation to the DAG and computes its dependencies + 4. Based on the dependencies, the `GpuExecutionContext` associates a stream to the computation through `GrCUDAStremManager` + 5. `GpuExecutionContext` executes the computation on the chosen stream, performing synchronization if necessary + 6. In case of subsequent array accesses, we skip the scheduling part as accesses are synchronous, and minimize overheads +* The CUDA stream interface has been added to GrCUDA, and is accessible by the users (not recommended, but possible) + * Users can create/destroy streams, and assign streams to kernels + * The `cudaStreamAttachMemAsync` is also exposed, to exclusively associate a managed memory array to a given stream. + This is used, on Pre-Pascal GPUs, to access arrays on CPU while a kernel is using other arrays on GPU +* Most of the new code is unit-tested and integration-tested, and there is a Python benchmarking suite to measure execution time with different settings * **Current limitations** - 1. Dependency computation, K1(X, Y), K2(X), K3(Y) - 2. Synchronization is done by the host on the main thread, this limits parallel execution in the example before. - Instead, we should assign computations to different threads, and block the thread execution. + 1. **Dependency computation does not consider disjoint parameter subsets.** + Consider 3 kernels, `K1(X, Y)`, `K2(X)`, `K3(Y)`: `K2` and `K3` are both depending on `K1`, but are using different inputs, and can run in parallel. + Currently, I'm just computing that they both depend on `K1`, but I'm not considering that they have disjoint dependencies. + 2. **Synchronization happens the main execution thread**, this limits parallel execution: + in the example before, calling `K2` requires to sync on the stream used by `K1`, and `K3` starts only after 'K2' has started. + If `Y` was read-only in `K1`, this wait would have been unnecessary. + Instead, we can assign computations to different threads, block the thread execution, and start child computations with callbacks. This was the first approach, but it gave sync errors (probably due to other problems that are now solved) + 3. **Streams are not reused if they are free:** I'm creating new streams for computations without dependencies, but I could re-use existing streams that are currently free. + This avoids memory leaks, but requires a bit of extra book-keeping. + 4. Scalar values are not considered for dependencies. They are read-only when used as input, but there could be output-input depenencies ([API Design, point 4](#api-design)) ## Open questions diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BuildKernelTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BuildKernelTest.java index e4fa246c..5b0f7403 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BuildKernelTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/BuildKernelTest.java @@ -158,11 +158,10 @@ public void testBuild2DKernelAndLaunch() { assertNotNull(matmultKernel.getMember("ptx").asString()); // generate matrices - // FIXME: performance regression in array.reads, currently using smaller data size; - final int numARows = 32; // 256; - final int numACols = 32; // 192; + final int numARows = 128; + final int numACols = 128; final int numBRows = numACols; - final int numBCols = 32; //128; + final int numBCols = 128; final int blockSize = 32; Value matrixA = context.eval("grcuda", "float[" + (numARows * numACols) + "]"); Value matrixB = context.eval("grcuda", "float[" + (numBRows * numBCols) + "]"); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 787b4561..27e95368 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -239,10 +239,6 @@ public void dependencyPipelineSimpleTest() { try (Context context = Context.newBuilder().allowAllAccess(true).build()) { - // TODO: is there a way to access the inner GrCUDA data structures? - - // FIXME: the computation gives a wrong numerical value for small N (< 100000), but only in Java (not in Graalpython), - // and without any change to the runtime. final int numElements = 10; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); @@ -254,8 +250,8 @@ public void dependencyPipelineSimpleTest() { assertNotNull(squareKernel); for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 2.0); // 1.0 / (i + 1)); - y.setArrayElement(i, 4.0); // 2.0 / (i + 1)); + x.setArrayElement(i, 2.0); + y.setArrayElement(i, 4.0); } Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); @@ -264,8 +260,6 @@ public void dependencyPipelineSimpleTest() { configuredSquareKernel.execute(x, numElements); configuredSquareKernel.execute(y, numElements); - // FIXME: temporary sync point until we add array accesses as DAG nodes! - // Verify the output; assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); assertEquals(16.0, y.getArrayElement(0).asFloat(), 0.1); @@ -277,9 +271,9 @@ public void dependencyPipelineSimple2Test() { try (Context context = Context.newBuilder().allowAllAccess(true).build()) { - // TODO: is there a way to access the inner GrCUDA data structures? - - final int numElements = 1000; + // FIXME: this test fails randomly with small values (< 100000, more or less), + // but the same computation doesn't fail in Graalpython. + final int numElements = 100000; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); Value x = deviceArrayConstructor.execute("float", numElements); From 1f7905b770dc8693a5e02043d04e489066ab2316 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 27 Apr 2020 12:22:47 +0200 Subject: [PATCH 037/236] Update NOTES.md --- NOTES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NOTES.md b/NOTES.md index 40d877f2..9a6d20a0 100644 --- a/NOTES.md +++ b/NOTES.md @@ -50,7 +50,7 @@ The main idea is to **represent GrCUDA computations as vertices of a DAG**, conn This was the first approach, but it gave sync errors (probably due to other problems that are now solved) 3. **Streams are not reused if they are free:** I'm creating new streams for computations without dependencies, but I could re-use existing streams that are currently free. This avoids memory leaks, but requires a bit of extra book-keeping. - 4. Scalar values are not considered for dependencies. They are read-only when used as input, but there could be output-input depenencies ([API Design, point 4](#api-design)) + 4. **Scalar values are not considered for dependencies**: they are read-only when used as input, but there could be output-input depenencies ([API Design, point 4](#api-design)) ## Open questions From 17cafccce36544c859128e9c8d79ef4f8b06e3ac Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 27 Apr 2020 14:39:03 +0200 Subject: [PATCH 038/236] temporarily changed printf to provide human readable output --- .../com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java | 2 ++ .../gpu/computation/DeviceArrayReadExecution.java | 7 ++++--- .../gpu/computation/DeviceArrayWriteExecution.java | 11 ++++++----- .../grcuda/gpu/computation/KernelExecution.java | 7 +++++-- .../nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java | 3 +-- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java index 3f5a4650..a8bd0e0d 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java @@ -125,6 +125,8 @@ private Object executeComputationSync(ExecutionDAG.DAGVertex vertex) throws Unsu // Before starting this computation, ensure that all its parents have finished their computation; streamManager.syncParentStreams(vertex); + System.out.println("-- running " + vertex.getComputation()); + // Perform the computation; vertex.getComputation().setComputationStarted(); vertex.getComputation().updateIsComputationArrayAccess(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java index d5764a59..7f2172d1 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java @@ -32,8 +32,9 @@ public void updateIsComputationArrayAccess() { @Override public String toString() { - return "DeviceArrayReadExecution(" + - "array=" + array + - ", index=" + index + ")"; +// return "DeviceArrayReadExecution(" + +// "array=" + array + +// ", index=" + index + ")"; + return "array read on " + System.identityHashCode(array) + "; index=" + index; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java index f7c4d741..36f63c49 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java @@ -41,10 +41,11 @@ public void updateIsComputationArrayAccess() { @Override public String toString() { - return "DeviceArrayWriteExecution(" + - "array=" + array + - ", index=" + index + - ", value=" + value + - ")"; +// return "DeviceArrayWriteExecution(" + +// "array=" + array + +// ", index=" + index + +// ", value=" + value + +// ")"; + return "array write on " + System.identityHashCode(array) + "; index=" + index + "; value=" + value; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index 86eaca19..f3bebd8c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -92,9 +92,12 @@ public void associateArraysToStreamImpl() { @Override public String toString() { - return "KernelExecution(" + configuredKernel.toString() + "; args=[" + +// return "KernelExecution(" + configuredKernel.toString() + "; args=[" + +// Arrays.stream(args.getOriginalArgs()).map(a -> Integer.toString(System.identityHashCode(a))).collect(Collectors.joining(", ")) + +// "]" + "; stream=" + this.getStream() + ")"; + return "kernel=" + kernel.getKernelName() + "; args=[" + Arrays.stream(args.getOriginalArgs()).map(a -> Integer.toString(System.identityHashCode(a))).collect(Collectors.joining(", ")) + - "]" + "; stream=" + this.getStream() + ")"; + "]" + "; stream=" + this.getStream().getStreamNumber(); } static class KernelExecutionInitializer implements InitializeArgumentSet { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 7bc19735..37ec8ca6 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -62,9 +62,8 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { vertex.getParentComputations().forEach(c -> { // Synchronize computations that are not yet finished and can use streams; if (!c.isComputationFinished() && c.canUseStream()) { -// System.out.println("\tsync thread on stream " + c.getStream() + " by " + vertex.getComputation()); + System.out.println("--\tsync stream " + c.getStream().getStreamNumber() + " by " + vertex.getComputation()); runtime.cudaStreamSynchronize(c.getStream()); -// System.out.println("\tfinish sync thread on stream " + c.getStream()); // Set the parent computations as finished; c.setComputationFinished(); } From a63618f0f0ccf5d58b8fc69e734b92313b136c3a Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 27 Apr 2020 15:31:20 +0200 Subject: [PATCH 039/236] fixed array read/write optimization not being propagated to parent array in multidim arrays --- .../src/com/nvidia/grcuda/array/AbstractArray.java | 6 ++++++ .../grcuda/array/MultiDimDeviceArrayView.java | 12 +++++++++++- .../gpu/computation/ArrayAccessExecution.java | 14 +++++++++++--- .../gpu/computation/ArrayExecutionInitializer.java | 6 +++--- .../gpu/computation/DeviceArrayReadExecution.java | 11 ++--------- .../gpu/computation/DeviceArrayWriteExecution.java | 11 ++--------- .../computation/GrCUDAComputationalElement.java | 14 ++++++-------- .../MultiDimDeviceArrayViewReadExecution.java | 11 ++--------- .../MultiDimDeviceArrayViewWriteExecution.java | 11 ++--------- 9 files changed, 45 insertions(+), 51 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 85191885..804ba07f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -49,6 +49,12 @@ protected AbstractArray(GrCUDAExecutionContext grCUDAExecutionContext, ElementTy this.elementType = elementType; } + protected AbstractArray(GrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType, boolean isLastComputationArrayAccess) { + this.grCUDAExecutionContext = grCUDAExecutionContext; + this.elementType = elementType; + this.isLastComputationArrayAccess = isLastComputationArrayAccess; + } + /** * Register the array in {@link com.nvidia.grcuda.gpu.GrCUDAExecutionContext} so that operations on this array * can be monitored by the runtime. Registration must be done with a separate function at the end of concrete Array classes. diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java index fd422312..49ed8262 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java @@ -52,7 +52,7 @@ public final class MultiDimDeviceArrayView extends AbstractArray implements Truf private final long stride; MultiDimDeviceArrayView(MultiDimDeviceArray mdDeviceArray, int dim, long offset, long stride) { - super(mdDeviceArray.grCUDAExecutionContext, mdDeviceArray.elementType); + super(mdDeviceArray.grCUDAExecutionContext, mdDeviceArray.elementType, mdDeviceArray.isLastComputationArrayAccess()); this.mdDeviceArray = mdDeviceArray; this.thisDimension = dim; this.offset = offset; @@ -78,6 +78,16 @@ public final long getPointer() { return mdDeviceArray.getPointer(); } + /** + * Propagate the flag to the parent array, so other temporary views are aware of this computation; + * @param lastComputationArrayAccess if the last computation on this array is a host read/write + */ + @Override + public void setLastComputationArrayAccess(boolean lastComputationArrayAccess) { + super.setLastComputationArrayAccess(lastComputationArrayAccess); + this.mdDeviceArray.setLastComputationArrayAccess(lastComputationArrayAccess); + } + @Override public String toString() { return String.format("MultiDimDeviceArrayView(dim=%d, offset=%d, stride=%d)\n", diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java index 7366e0be..3f268865 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java @@ -1,15 +1,23 @@ package com.nvidia.grcuda.gpu.computation; +import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; /** * Abstract class that wraps all computational elements representing accesses on managed memory by the CPU; */ -public abstract class ArrayAccessExecution extends GrCUDAComputationalElement { - public ArrayAccessExecution(GrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer) { +public abstract class ArrayAccessExecution extends GrCUDAComputationalElement { + + protected boolean isComputationArrayAccess = true; + protected T array; + + public ArrayAccessExecution(GrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer, T array) { super(grCUDAExecutionContext, initializer); + this.array = array; } @Override - public boolean isComputationArrayAccess() { return true; } + public void updateIsComputationArrayAccess() { + this.array.setLastComputationArrayAccess(isComputationArrayAccess); + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java index 0c18108b..19fa7327 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java @@ -13,11 +13,11 @@ * while in {@link com.nvidia.grcuda.array.MultiDimDeviceArray} there is currently no need to explicitly represent computations, * as they cannot directly the underlying memory; */ -class ArrayExecutionInitializer implements InitializeArgumentSet { +class ArrayExecutionInitializer implements InitializeArgumentSet { - private final AbstractArray array; + private final T array; - ArrayExecutionInitializer(AbstractArray array) { + ArrayExecutionInitializer(T array) { this.array = array; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java index 7f2172d1..8651426e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java @@ -3,17 +3,15 @@ import com.nvidia.grcuda.array.DeviceArray; import com.oracle.truffle.api.profiles.ValueProfile; -public class DeviceArrayReadExecution extends ArrayAccessExecution { +public class DeviceArrayReadExecution extends ArrayAccessExecution { - private final DeviceArray array; private final long index; private final ValueProfile elementTypeProfile; public DeviceArrayReadExecution(DeviceArray array, long index, ValueProfile elementTypeProfile) { - super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer(array)); - this.array = array; + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array), array); this.index = index; this.elementTypeProfile = elementTypeProfile; } @@ -25,11 +23,6 @@ public Object execute() { return result; } - @Override - public void updateIsComputationArrayAccess() { - this.array.setLastComputationArrayAccess(true); - } - @Override public String toString() { // return "DeviceArrayReadExecution(" + diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java index 36f63c49..f760fa0f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java @@ -6,9 +6,8 @@ import com.oracle.truffle.api.interop.UnsupportedTypeException; import com.oracle.truffle.api.profiles.ValueProfile; -public class DeviceArrayWriteExecution extends ArrayAccessExecution { +public class DeviceArrayWriteExecution extends ArrayAccessExecution { - private final DeviceArray array; private final long index; private final Object value; private final InteropLibrary valueLibrary; @@ -19,8 +18,7 @@ public DeviceArrayWriteExecution(DeviceArray array, Object value, InteropLibrary valueLibrary, ValueProfile elementTypeProfile) { - super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer(array)); - this.array = array; + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array), array); this.index = index; this.value = value; this.valueLibrary = valueLibrary; @@ -34,11 +32,6 @@ public Object execute() throws UnsupportedTypeException { return NoneValue.get(); } - @Override - public void updateIsComputationArrayAccess() { - this.array.setLastComputationArrayAccess(true); - } - @Override public String toString() { // return "DeviceArrayWriteExecution(" + diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index d5be5745..6477f13f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -48,6 +48,11 @@ public abstract class GrCUDAComputationalElement { * Keep track of whether this computation has already been started, to avoid performing the same computation multiple times; */ private boolean computationStarted = false; + /** + * Specify if this computational element represents an array access (read or write) on an {@link com.nvidia.grcuda.array.AbstractArray} + * performed synchronously by the CPU. By default it returns false; + */ + protected boolean isComputationArrayAccess = false; /** * Constructor that takes an argument set initializer to build the set of arguments used in the dependency computation @@ -182,20 +187,13 @@ public final void associateArraysToStream() { */ protected void associateArraysToStreamImpl() {} - /** - * Specify if this computational element represents an array access (read or write) on an {@link com.nvidia.grcuda.array.AbstractArray} - * performed synchronously by the CPU. By default it returns false; - * @return if this computation is a CPU array access on managed memory - */ - public boolean isComputationArrayAccess() { return false; } - /** * Set for all the {@link com.nvidia.grcuda.array.AbstractArray} in the computation if this computation is an array access; */ public void updateIsComputationArrayAccess() { for (Object o : this.argumentSet) { if (o instanceof AbstractArray) { - ((AbstractArray) o).setLastComputationArrayAccess(isComputationArrayAccess()); + ((AbstractArray) o).setLastComputationArrayAccess(isComputationArrayAccess); } } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java index 29efd314..f692875c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java @@ -3,17 +3,15 @@ import com.nvidia.grcuda.array.MultiDimDeviceArrayView; import com.oracle.truffle.api.profiles.ValueProfile; -public class MultiDimDeviceArrayViewReadExecution extends ArrayAccessExecution { +public class MultiDimDeviceArrayViewReadExecution extends ArrayAccessExecution { - private final MultiDimDeviceArrayView array; private final long index; private final ValueProfile elementTypeProfile; public MultiDimDeviceArrayViewReadExecution(MultiDimDeviceArrayView array, long index, ValueProfile elementTypeProfile) { - super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer(array.getMdDeviceArray())); - this.array = array; + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array.getMdDeviceArray()), array); this.index = index; this.elementTypeProfile = elementTypeProfile; } @@ -25,11 +23,6 @@ public Object execute() { return result; } - @Override - public void updateIsComputationArrayAccess() { - this.array.setLastComputationArrayAccess(true); - } - @Override public String toString() { return "MultiDimDeviceArrayViewReadExecution(" + diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java index 75e711ef..c4879308 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java @@ -6,9 +6,8 @@ import com.oracle.truffle.api.interop.UnsupportedTypeException; import com.oracle.truffle.api.profiles.ValueProfile; -public class MultiDimDeviceArrayViewWriteExecution extends ArrayAccessExecution { +public class MultiDimDeviceArrayViewWriteExecution extends ArrayAccessExecution { - private final MultiDimDeviceArrayView array; private final long index; private final Object value; private final InteropLibrary valueLibrary; @@ -19,8 +18,7 @@ public MultiDimDeviceArrayViewWriteExecution(MultiDimDeviceArrayView array, Object value, InteropLibrary valueLibrary, ValueProfile elementTypeProfile) { - super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer(array.getMdDeviceArray())); - this.array = array; + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array.getMdDeviceArray()), array); this.index = index; this.value = value; this.valueLibrary = valueLibrary; @@ -34,11 +32,6 @@ public Object execute() throws UnsupportedTypeException { return NoneValue.get(); } - @Override - public void updateIsComputationArrayAccess() { - this.array.setLastComputationArrayAccess(true); - } - @Override public String toString() { return "MultiDimDeviceArrayViewReadExecution(" + From bbd5612bff462505c9123befa5c2e4ecb875037b Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 28 Apr 2020 15:24:39 +0200 Subject: [PATCH 040/236] added synchronous execution policy --- NOTES.md | 6 +- README.md | 4 +- .../grcuda/test/gpu/ExecutionDAGTest.java | 2 +- .../SyncGrCUDAExecutionContextTest.java | 127 ++++++++++++++++++ .../gpu/stream/GrCUDAStreamManagerTest.java | 2 +- .../src/com/nvidia/grcuda/GrCUDAContext.java | 41 +++++- .../src/com/nvidia/grcuda/GrCUDAOptions.java | 3 + .../nvidia/grcuda/array/AbstractArray.java | 14 +- .../com/nvidia/grcuda/array/DeviceArray.java | 4 +- .../grcuda/array/MultiDimDeviceArray.java | 4 +- .../grcuda/functions/BindKernelFunction.java | 7 +- .../grcuda/functions/BuildKernelFunction.java | 7 +- .../grcuda/functions/DeviceArrayFunction.java | 19 ++- .../functions/MapDeviceArrayFunction.java | 17 ++- .../functions/TypedDeviceArrayFunction.java | 7 +- .../TypedMapDeviceArrayFunction.java | 7 +- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 7 +- .../src/com/nvidia/grcuda/gpu/Kernel.java | 9 +- .../gpu/computation/ArrayAccessExecution.java | 4 +- .../GrCUDAComputationalElement.java | 9 +- .../gpu/computation/KernelExecution.java | 2 +- .../AbstractGrCUDAExecutionContext.java | 92 +++++++++++++ .../executioncontext/ExecutionPolicyEnum.java | 16 +++ .../GrCUDAExecutionContext.java | 61 +-------- .../SyncGrCUDAExecutionContext.java | 37 +++++ .../com/nvidia/grcuda/nodes/ArrayNode.java | 13 +- 26 files changed, 388 insertions(+), 133 deletions(-) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/SyncGrCUDAExecutionContextTest.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/{ => executioncontext}/GrCUDAExecutionContext.java (73%) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java diff --git a/NOTES.md b/NOTES.md index 9a6d20a0..50369d90 100644 --- a/NOTES.md +++ b/NOTES.md @@ -25,12 +25,12 @@ The main idea is to **represent GrCUDA computations as vertices of a DAG**, conn 2. `GrCUDAComputationalElement`: abstract class that wraps GrCUDA computations, e.g. kernel executions and array accesses. It provides `GpuExecutionContext` with functions used to compute dependencies or decide if the computation must be done synchronously (e.g. array accesses) 3. `ExecutionDAG`: the DAG representing the dependencies between computations, it is composed of vertices that wrap each `GrCUDAComputationalElement` - 4. `GrCUDAStremManager`: class that handles the creation and the assignment of streams to kernels + 4. `GrCUDAStreamManager`: class that handles the creation and the assignment of streams to kernels * **Basic execution flow** 1. The host language (i.e. the user) calls an `InteropLibrary` object that can be associated to a `GrCUDAComputationalElement`, e.g. a kernel execution or an array access 2. A new `GrCUDAComputationalElement` is created and registered to the `GpuExecutionContext`, to represent the computation 3. `GpuExecutionContext` adds the computation to the DAG and computes its dependencies - 4. Based on the dependencies, the `GpuExecutionContext` associates a stream to the computation through `GrCUDAStremManager` + 4. Based on the dependencies, the `GpuExecutionContext` associates a stream to the computation through `GrCUDAStreamManager` 5. `GpuExecutionContext` executes the computation on the chosen stream, performing synchronization if necessary 6. In case of subsequent array accesses, we skip the scheduling part as accesses are synchronous, and minimize overheads * The CUDA stream interface has been added to GrCUDA, and is accessible by the users (not recommended, but possible) @@ -44,7 +44,7 @@ The main idea is to **represent GrCUDA computations as vertices of a DAG**, conn Consider 3 kernels, `K1(X, Y)`, `K2(X)`, `K3(Y)`: `K2` and `K3` are both depending on `K1`, but are using different inputs, and can run in parallel. Currently, I'm just computing that they both depend on `K1`, but I'm not considering that they have disjoint dependencies. 2. **Synchronization happens the main execution thread**, this limits parallel execution: - in the example before, calling `K2` requires to sync on the stream used by `K1`, and `K3` starts only after 'K2' has started. + in the example before, calling `K2` requires to sync on the stream used by `K1`, and `K3` starts only after `K2` has started. If `Y` was read-only in `K1`, this wait would have been unnecessary. Instead, we can assign computations to different threads, block the thread execution, and start child computations with callbacks. This was the first approach, but it gave sync errors (probably due to other problems that are now solved) diff --git a/README.md b/README.md index 1f2b0c75..164031b7 100644 --- a/README.md +++ b/README.md @@ -213,8 +213,8 @@ git clone https://github.com/NVIDIA/grcuda.git (this can be replaced with a fork * [Here](https://github.com/graalvm/graalvm-ce-builds/releases) you can find releases for GraalVM 20.0, and more recent versions once they will become available 4. **Setup your CUDA environment** -* Install CUDA and Nvidia drivers, for exampel following the steps [here](https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=CentOS&target_version=7&target_type=rpmnetwork) -* Add the following to your environment (assuming that you have installed CUDA in the default `/usr/local` location, and using the `nvcc` compiler +* Install CUDA and Nvidia drivers, for example following the steps [here](https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=CentOS&target_version=7&target_type=rpmnetwork) +* Add the following to your environment (assuming you have installed CUDA in the default `/usr/local` location, and using the `nvcc` compiler ``` export CUDA_DIR=/usr/local/cuda diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 27e95368..08042d5d 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -5,7 +5,7 @@ import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/SyncGrCUDAExecutionContextTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/SyncGrCUDAExecutionContextTest.java new file mode 100644 index 00000000..ec28bda8 --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/SyncGrCUDAExecutionContextTest.java @@ -0,0 +1,127 @@ +package com.nvidia.grcuda.test.gpu.executioncontext; + +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Value; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class SyncGrCUDAExecutionContextTest { + + private static final int NUM_THREADS_PER_BLOCK = 128; + + private static final String SQUARE_KERNEL = + "extern \"C\" __global__ void square(float* x, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " x[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + + private static final String DIFF_KERNEL = + "extern \"C\" __global__ void diff(float* x, float* y, float* z, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " z[idx] = x[idx] - y[idx];\n" + + " }\n" + + "}"; + + private static final String REDUCE_KERNEL = + "extern \"C\" __global__ void reduce(float *x, float *res, int n) {\n" + + " __shared__ float cache[" + NUM_THREADS_PER_BLOCK + "];\n" + + " int i = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (i < n) {\n" + + " cache[threadIdx.x] = x[i];\n" + + " }\n" + + " __syncthreads();\n" + + " i = " + NUM_THREADS_PER_BLOCK + " / 2;\n" + + " while (i > 0) {\n" + + " if (threadIdx.x < i) {\n" + + " cache[threadIdx.x] += cache[threadIdx.x + i];\n" + + " }\n" + + " __syncthreads();\n" + + " i /= 2;\n" + + " }\n" + + " if (threadIdx.x == 0) {\n" + + " atomicAdd(res, cache[0]);\n" + + " }\n" + + "}"; + + @Test + public void dependencyPipelineSimpleSyncTest() { + + try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", "sync").allowAllAccess(true).build()) { + + final int numElements = 10; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + + assertNotNull(squareKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + y.setArrayElement(i, 4.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + configuredSquareKernel.execute(y, numElements); + + // Verify the output; + assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(16.0, y.getArrayElement(0).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineSimple2SyncTest() { + + try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", "sync").allowAllAccess(true).build()) { + + // FIXME: this test fails randomly with small values (< 100000, more or less), + // but the same computation doesn't fail in Graalpython. + final int numElements = 100000; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value res = deviceArrayConstructor.execute("float", 1); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 1.0 / (i + 1)); + y.setArrayElement(i, 2.0 / (i + 1)); + } + res.setArrayElement(0, 0.0); + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32"); + Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32"); + assertNotNull(squareKernel); + assertNotNull(diffKernel); + assertNotNull(reduceKernel); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + configuredSquareKernel.execute(y, numElements); + configuredDiffKernel.execute(x, y, z, numElements); + configuredReduceKernel.execute(z, res, numElements); + + // Verify the output; + float resScalar = res.getArrayElement(0).asFloat(); + assertEquals(-4.93, resScalar, 0.01); + } + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index ec795a27..b2f60b12 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -1,7 +1,7 @@ package com.nvidia.grcuda.test.gpu.stream; import com.nvidia.grcuda.gpu.ExecutionDAG; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.test.gpu.ExecutionDAGTest; import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.junit.Test; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index 3b66d14e..db4e7213 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -38,8 +38,11 @@ import com.nvidia.grcuda.functions.GetDevicesFunction; import com.nvidia.grcuda.functions.map.MapFunction; import com.nvidia.grcuda.functions.map.ShredFunction; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.ExecutionPolicyEnum; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.SyncGrCUDAExecutionContext; import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.TruffleLanguage.Env; @@ -55,13 +58,15 @@ */ public final class GrCUDAContext { + public static final ExecutionPolicyEnum DEFAULT_EXECUTION_POLICY = ExecutionPolicyEnum.DEFAULT; + private static final String ROOT_NAMESPACE = "CU"; private final Env env; - private final GrCUDAExecutionContext grCUDAExecutionContext; + private final AbstractGrCUDAExecutionContext grCUDAExecutionContext; private final Namespace rootNamespace; private final ArrayList disposables = new ArrayList<>(); - private AtomicInteger moduleId = new AtomicInteger(0); + private final AtomicInteger moduleId = new AtomicInteger(0); private volatile boolean cudaInitialized = false; // this is used to look up pre-existing call targets for "map" operations, see MapArrayNode @@ -69,7 +74,21 @@ public final class GrCUDAContext { public GrCUDAContext(Env env) { this.env = env; - this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env); + + // Retrieve the execution policy; + ExecutionPolicyEnum executionPolicy = parseExecutionPolicy(env.getOptions().get(GrCUDAOptions.ExecutionPolicy)); + // Initialize the execution policy; + System.out.println("-- using " + executionPolicy.getName() + " execution policy"); + switch (executionPolicy) { + case SYNC: + this.grCUDAExecutionContext = new SyncGrCUDAExecutionContext(this, env); + break; + case DEFAULT: + this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env); + break; + default: + this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env); + } Namespace namespace = new Namespace(ROOT_NAMESPACE); namespace.addNamespace(namespace); @@ -100,7 +119,7 @@ public Env getEnv() { return env; } - public GrCUDAExecutionContext getGrCUDAExecutionContext() { + public AbstractGrCUDAExecutionContext getGrCUDAExecutionContext() { return grCUDAExecutionContext; } @@ -152,6 +171,18 @@ public T getOption(OptionKey key) { return env.getOptions().get(key); } + @TruffleBoundary + private static ExecutionPolicyEnum parseExecutionPolicy(String policyString) { + switch(policyString) { + case "sync": + return ExecutionPolicyEnum.SYNC; + case "default": + return ExecutionPolicyEnum.DEFAULT; + default: + return GrCUDAContext.DEFAULT_EXECUTION_POLICY; + } + } + /** * Cleanup the GrCUDA context at the end of the execution; */ diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java index 9d250dcb..cc144791 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java @@ -54,4 +54,7 @@ private GrCUDAOptions() { @Option(category = OptionCategory.USER, help = "Set the location of the cuml library.", stability = OptionStability.STABLE) // public static final OptionKey CuMLLibrary = new OptionKey<>(CUMLRegistry.DEFAULT_LIBRARY); + @Option(category = OptionCategory.USER, help = "Chose the scheduling policy of GrCUDA computations", stability = OptionStability.EXPERIMENTAL) // + public static final OptionKey ExecutionPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_EXECUTION_POLICY.getName()); + } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 804ba07f..8b35d4c3 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -1,7 +1,7 @@ package com.nvidia.grcuda.array; import com.nvidia.grcuda.ElementType; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.oracle.truffle.api.interop.InteropLibrary; import com.oracle.truffle.api.interop.InvalidArrayIndexException; import com.oracle.truffle.api.interop.TruffleObject; @@ -19,7 +19,7 @@ public abstract class AbstractArray implements TruffleObject { /** * Reference to the underlying CUDA runtime that manages the array memory. */ - protected final GrCUDAExecutionContext grCUDAExecutionContext; + protected final AbstractGrCUDAExecutionContext grCUDAExecutionContext; /** * Data type of elements stored in the array. @@ -27,7 +27,7 @@ public abstract class AbstractArray implements TruffleObject { protected final ElementType elementType; /** - * True IFF the array has been registered in {@link com.nvidia.grcuda.gpu.GrCUDAExecutionContext}. + * True IFF the array has been registered in {@link AbstractGrCUDAExecutionContext}. * Used to avoid multiple registration; */ private boolean registeredInContext = false; @@ -44,19 +44,19 @@ public ElementType getElementType() { return elementType; } - protected AbstractArray(GrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType) { + protected AbstractArray(AbstractGrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType) { this.grCUDAExecutionContext = grCUDAExecutionContext; this.elementType = elementType; } - protected AbstractArray(GrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType, boolean isLastComputationArrayAccess) { + protected AbstractArray(AbstractGrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType, boolean isLastComputationArrayAccess) { this.grCUDAExecutionContext = grCUDAExecutionContext; this.elementType = elementType; this.isLastComputationArrayAccess = isLastComputationArrayAccess; } /** - * Register the array in {@link com.nvidia.grcuda.gpu.GrCUDAExecutionContext} so that operations on this array + * Register the array in {@link AbstractGrCUDAExecutionContext} so that operations on this array * can be monitored by the runtime. Registration must be done with a separate function at the end of concrete Array classes. * This is done to avoid leaving the context in an inconsistent state if the concrete constructor throws an exception and fails. */ @@ -67,7 +67,7 @@ protected void registerArray() { } } - public GrCUDAExecutionContext getGrCUDAExecutionContext() { + public AbstractGrCUDAExecutionContext getGrCUDAExecutionContext() { return grCUDAExecutionContext; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index 089e1e4e..69ad95ab 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -30,7 +30,7 @@ import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.functions.DeviceArrayCopyFunction; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.LittleEndianNativeArrayView; import com.nvidia.grcuda.gpu.computation.DeviceArrayReadExecution; import com.nvidia.grcuda.gpu.computation.DeviceArrayWriteExecution; @@ -114,7 +114,7 @@ public boolean constainsValue(String name) { /** Mutable view onto the underlying memory buffer. */ private final LittleEndianNativeArrayView nativeView; - public DeviceArray(GrCUDAExecutionContext grCUDAExecutionContext, long numElements, ElementType elementType) { + public DeviceArray(AbstractGrCUDAExecutionContext grCUDAExecutionContext, long numElements, ElementType elementType) { super(grCUDAExecutionContext, elementType); this.numElements = numElements; this.sizeBytes = numElements * elementType.getSizeBytes(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java index 50e40afa..03f3cf78 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java @@ -30,7 +30,7 @@ import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.array.DeviceArray.MemberSet; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.LittleEndianNativeArrayView; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; @@ -66,7 +66,7 @@ public class MultiDimDeviceArray extends AbstractArray implements TruffleObject /** Mutable view onto the underlying memory buffer. */ private final LittleEndianNativeArrayView nativeView; - public MultiDimDeviceArray(GrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType, long[] dimensions, + public MultiDimDeviceArray(AbstractGrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType, long[] dimensions, boolean useColumnMajor) { super(grCUDAExecutionContext, elementType); if (dimensions.length < 2) { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindKernelFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindKernelFunction.java index a2b22a64..ab059634 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindKernelFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BindKernelFunction.java @@ -28,17 +28,16 @@ */ package com.nvidia.grcuda.functions; -import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.ArityException; import com.oracle.truffle.api.interop.UnsupportedTypeException; public final class BindKernelFunction extends Function { - private final GrCUDAExecutionContext grCUDAExecutionContext; + private final AbstractGrCUDAExecutionContext grCUDAExecutionContext; - public BindKernelFunction(GrCUDAExecutionContext grCUDAExecutionContext) { + public BindKernelFunction(AbstractGrCUDAExecutionContext grCUDAExecutionContext) { super("bindkernel"); this.grCUDAExecutionContext = grCUDAExecutionContext; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BuildKernelFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BuildKernelFunction.java index bceed0a3..8bb4b11f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BuildKernelFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/BuildKernelFunction.java @@ -28,16 +28,15 @@ */ package com.nvidia.grcuda.functions; -import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.ArityException; import com.oracle.truffle.api.interop.UnsupportedTypeException; public class BuildKernelFunction extends Function { - private final GrCUDAExecutionContext grCUDAExecutionContext; + private final AbstractGrCUDAExecutionContext grCUDAExecutionContext; - public BuildKernelFunction(GrCUDAExecutionContext grCUDAExecutionContext) { + public BuildKernelFunction(AbstractGrCUDAExecutionContext grCUDAExecutionContext) { super("buildkernel"); this.grCUDAExecutionContext = grCUDAExecutionContext; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java index 7f4227d9..0f56e892 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java @@ -28,17 +28,13 @@ */ package com.nvidia.grcuda.functions; -import java.util.ArrayList; -import java.util.Optional; - -import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.GrCUDAException; -import com.nvidia.grcuda.array.MultiDimDeviceArray; import com.nvidia.grcuda.TypeException; +import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.array.DeviceArray.MemberSet; -import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.array.MultiDimDeviceArray; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; @@ -53,6 +49,9 @@ import com.oracle.truffle.api.library.ExportMessage; import com.oracle.truffle.api.profiles.ValueProfile; +import java.util.ArrayList; +import java.util.Optional; + @ExportLibrary(InteropLibrary.class) public final class DeviceArrayFunction extends Function { @@ -60,9 +59,9 @@ public final class DeviceArrayFunction extends Function { private static final MemberSet MEMBERS = new MemberSet(MAP); - private final GrCUDAExecutionContext grCUDAExecutionContext; + private final AbstractGrCUDAExecutionContext grCUDAExecutionContext; - public DeviceArrayFunction(GrCUDAExecutionContext grCUDAExecutionContext) { + public DeviceArrayFunction(AbstractGrCUDAExecutionContext grCUDAExecutionContext) { super("DeviceArray"); this.grCUDAExecutionContext = grCUDAExecutionContext; } @@ -87,7 +86,7 @@ public Object call(Object[] arguments) throws ArityException, UnsupportedTypeExc } } - static Object createArray(Object[] arguments, int start, ElementType elementType, GrCUDAExecutionContext grCUDAExecutionContext) throws UnsupportedTypeException { + static Object createArray(Object[] arguments, int start, ElementType elementType, AbstractGrCUDAExecutionContext grCUDAExecutionContext) throws UnsupportedTypeException { ArrayList elementsPerDim = new ArrayList<>(); Optional useColumnMajor = Optional.empty(); for (int i = start; i < arguments.length; ++i) { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java index 33a023e3..ffd361ce 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/MapDeviceArrayFunction.java @@ -28,9 +28,6 @@ */ package com.nvidia.grcuda.functions; -import java.util.concurrent.ConcurrentHashMap; - -import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAException; @@ -38,8 +35,8 @@ import com.nvidia.grcuda.GrCUDALanguage; import com.nvidia.grcuda.NoneValue; import com.nvidia.grcuda.TypeException; -import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.array.DeviceArray; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.Truffle; @@ -68,6 +65,8 @@ import com.oracle.truffle.api.profiles.ConditionProfile; import com.oracle.truffle.api.profiles.ValueProfile; +import java.util.concurrent.ConcurrentHashMap; + /** * This node is conceptually a simple memcpy operation, but it can take arbitrary Truffle objects as * input and uses {@link InteropLibrary} to access them. The target is a {@link DeviceArray}. The @@ -76,7 +75,7 @@ @GenerateUncached abstract class MapArrayNode extends Node { - abstract Object execute(Object source, ElementType elementType, GrCUDAExecutionContext grCUDAExecutionContext); + abstract Object execute(Object source, ElementType elementType, AbstractGrCUDAExecutionContext grCUDAExecutionContext); private static final FrameDescriptor DESCRIPTOR = new FrameDescriptor(); private static final FrameSlot SIZE_SLOT = DESCRIPTOR.addFrameSlot("size", FrameSlotKind.Long); @@ -171,7 +170,7 @@ protected CallTarget createUncachedLoop(Object source, GrCUDAContext context) { } @Specialization(limit = "3") - Object doMap(Object source, ElementType elementType, GrCUDAExecutionContext grCUDAExecutionContext, + Object doMap(Object source, ElementType elementType, AbstractGrCUDAExecutionContext grCUDAExecutionContext, @CachedLibrary("source") InteropLibrary interop, @CachedContext(GrCUDALanguage.class) @SuppressWarnings("unused") GrCUDAContext context, @Cached(value = "createLoop(source)", uncached = "createUncachedLoop(source, context)") CallTarget loop) { @@ -206,9 +205,9 @@ Object doMap(Object source, ElementType elementType, GrCUDAExecutionContext grCU @ExportLibrary(InteropLibrary.class) public final class MapDeviceArrayFunction extends Function { - private final GrCUDAExecutionContext grCUDAExecutionContext; + private final AbstractGrCUDAExecutionContext grCUDAExecutionContext; - public MapDeviceArrayFunction(GrCUDAExecutionContext grCUDAExecutionContext) { + public MapDeviceArrayFunction(AbstractGrCUDAExecutionContext grCUDAExecutionContext) { super("MapDeviceArray"); this.grCUDAExecutionContext = grCUDAExecutionContext; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedDeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedDeviceArrayFunction.java index 55923d18..9d9e2b28 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedDeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedDeviceArrayFunction.java @@ -29,8 +29,7 @@ package com.nvidia.grcuda.functions; import com.nvidia.grcuda.ElementType; -import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.ArityException; @@ -41,10 +40,10 @@ */ public final class TypedDeviceArrayFunction extends Function { - private final GrCUDAExecutionContext grCUDAExecutionContext; + private final AbstractGrCUDAExecutionContext grCUDAExecutionContext; private final ElementType elementType; - public TypedDeviceArrayFunction(GrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType) { + public TypedDeviceArrayFunction(AbstractGrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType) { super("TypedDeviceArray"); this.grCUDAExecutionContext = grCUDAExecutionContext; this.elementType = elementType; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedMapDeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedMapDeviceArrayFunction.java index c09b1cb0..4290bd3e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedMapDeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/TypedMapDeviceArrayFunction.java @@ -29,8 +29,7 @@ package com.nvidia.grcuda.functions; import com.nvidia.grcuda.ElementType; -import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.interop.ArityException; @@ -44,10 +43,10 @@ @ExportLibrary(InteropLibrary.class) public final class TypedMapDeviceArrayFunction extends Function { - private final GrCUDAExecutionContext grCUDAExecutionContext; + private final AbstractGrCUDAExecutionContext grCUDAExecutionContext; private final ElementType elementType; - public TypedMapDeviceArrayFunction(GrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType) { + public TypedMapDeviceArrayFunction(AbstractGrCUDAExecutionContext grCUDAExecutionContext, ElementType elementType) { super("TypedMapDeviceArray"); this.grCUDAExecutionContext = grCUDAExecutionContext; this.elementType = elementType; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index bce7ea79..77e0ba19 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -41,6 +41,7 @@ import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; import com.nvidia.grcuda.gpu.computation.PostPascalArrayStreamAssociation; import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; @@ -425,7 +426,7 @@ public void registerCUDAFunctions(Namespace rootNamespace) { } } - ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { + public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { return arrayStreamArchitecturePolicy; } @@ -687,7 +688,7 @@ long extractStreamPointer(Object stream) { private HashMap loadedModules = new HashMap<>(); @TruffleBoundary - public Kernel loadKernel(GrCUDAExecutionContext grCUDAExecutionContext, String cubinFile, String kernelName, String signature) { + public Kernel loadKernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, String cubinFile, String kernelName, String signature) { CUModule module = loadedModules.get(cubinFile); try { if (module == null) { @@ -704,7 +705,7 @@ public Kernel loadKernel(GrCUDAExecutionContext grCUDAExecutionContext, String c } @TruffleBoundary - public Kernel buildKernel(GrCUDAExecutionContext grCUDAExecutionContext, String code, String kernelName, String signature) { + public Kernel buildKernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, String code, String kernelName, String signature) { String moduleName = "truffle" + context.getNextModuleId(); PTXKernel ptx = nvrtc.compileKernel(code, kernelName, moduleName, "--std=c++14"); CUModule module = null; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index 5f2edc0b..b5b02009 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -32,6 +32,7 @@ import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.array.MultiDimDeviceArray; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; @@ -56,7 +57,7 @@ @ExportLibrary(InteropLibrary.class) public class Kernel implements TruffleObject { - private final GrCUDAExecutionContext grCUDAExecutionContext; + private final AbstractGrCUDAExecutionContext grCUDAExecutionContext; private final String kernelName; private final CUDARuntime.CUModule kernelModule; private final long kernelFunction; @@ -66,7 +67,7 @@ public class Kernel implements TruffleObject { private final List argsAreArrays; private String ptxCode; - public Kernel(GrCUDAExecutionContext grCUDAExecutionContext, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, String kernelSignature) { + public Kernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, String kernelSignature) { this.grCUDAExecutionContext = grCUDAExecutionContext; this.kernelName = kernelName; this.kernelModule = kernelModule; @@ -77,7 +78,7 @@ public Kernel(GrCUDAExecutionContext grCUDAExecutionContext, String kernelName, this.grCUDAExecutionContext.registerKernel(this); } - public Kernel(GrCUDAExecutionContext grCUDAExecutionContext, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, + public Kernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, String kernelSignature, String ptx) { this(grCUDAExecutionContext, kernelName, kernelModule, kernelFunction, kernelSignature); this.ptxCode = ptx; @@ -87,7 +88,7 @@ public void incrementLaunchCount() { launchCount++; } - public GrCUDAExecutionContext getGrCUDAExecutionContext() { + public AbstractGrCUDAExecutionContext getGrCUDAExecutionContext() { return grCUDAExecutionContext; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java index 3f268865..d47a5569 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java @@ -1,7 +1,7 @@ package com.nvidia.grcuda.gpu.computation; import com.nvidia.grcuda.array.AbstractArray; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; /** * Abstract class that wraps all computational elements representing accesses on managed memory by the CPU; @@ -11,7 +11,7 @@ public abstract class ArrayAccessExecution extends GrCU protected boolean isComputationArrayAccess = true; protected T array; - public ArrayAccessExecution(GrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer, T array) { + public ArrayAccessExecution(AbstractGrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer, T array) { super(grCUDAExecutionContext, initializer); this.array = array; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index 6477f13f..8736a79f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -1,7 +1,8 @@ package com.nvidia.grcuda.gpu.computation; import com.nvidia.grcuda.array.AbstractArray; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.DefaultStream; import com.oracle.truffle.api.CompilerDirectives; @@ -31,7 +32,7 @@ public abstract class GrCUDAComputationalElement { /** * Reference to the execution context where this computation is executed; */ - protected final GrCUDAExecutionContext grCUDAExecutionContext; + protected final AbstractGrCUDAExecutionContext grCUDAExecutionContext; /** * Reference to the stream where this computation will be executed, * if possible (i.e. if the computation can be executed on a custom stream). @@ -60,7 +61,7 @@ public abstract class GrCUDAComputationalElement { * @param initializer the initializer used to build the internal set of arguments considered in the dependency computation */ @CompilerDirectives.TruffleBoundary - public GrCUDAComputationalElement(GrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer) { + public GrCUDAComputationalElement(AbstractGrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer) { this.argumentSet = initializer.initialize(); // Initialize by making a copy of the original set; this.activeArgumentSet = new HashSet<>(this.argumentSet); @@ -72,7 +73,7 @@ public GrCUDAComputationalElement(GrCUDAExecutionContext grCUDAExecutionContext, * @param grCUDAExecutionContext execution context in which this computational element will be scheduled * @param args the list of arguments provided to the computation. Arguments are expected to be {@link org.graalvm.polyglot.Value} */ - public GrCUDAComputationalElement(GrCUDAExecutionContext grCUDAExecutionContext, List args) { + public GrCUDAComputationalElement(AbstractGrCUDAExecutionContext grCUDAExecutionContext, List args) { this(grCUDAExecutionContext, new DefaultExecutionInitializer(args)); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index f3bebd8c..59c027d0 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -3,7 +3,7 @@ import com.nvidia.grcuda.NoneValue; import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.ConfiguredKernel; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.Kernel; import com.nvidia.grcuda.gpu.KernelArguments; import com.nvidia.grcuda.gpu.KernelConfig; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java new file mode 100644 index 00000000..d0c1dc2c --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java @@ -0,0 +1,92 @@ +package com.nvidia.grcuda.gpu.executioncontext; + +import com.nvidia.grcuda.GrCUDAContext; +import com.nvidia.grcuda.array.AbstractArray; +import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.Kernel; +import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.oracle.truffle.api.TruffleLanguage; +import com.oracle.truffle.api.interop.UnsupportedTypeException; + +import java.util.HashSet; +import java.util.Set; + +/** + * Abstract class that defines how {@link GrCUDAComputationalElement} are registered and scheduled for execution. + * It monitor sthe state of GrCUDA execution, keep track of memory allocated, + * kernels and other executable functions, and dependencies between elements. + */ +public abstract class AbstractGrCUDAExecutionContext { + + /** + * Reference to the inner {@link CUDARuntime} used to execute kernels and other {@link GrCUDAComputationalElement} + */ + protected final CUDARuntime cudaRuntime; + + /** + * Set that contains all the arrays allocated so far. + */ + protected final Set arraySet = new HashSet<>(); + + /** + * Set that contains all the CUDA kernels declared so far. + */ + protected final Set kernelSet = new HashSet<>(); + + /** + * Reference to the computational DAG that represents dependencies between computations; + */ + protected final ExecutionDAG dag = new ExecutionDAG(); + + public AbstractGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { + this.cudaRuntime = new CUDARuntime(context, env); + } + + public AbstractGrCUDAExecutionContext(CUDARuntime cudaRuntime) { + this.cudaRuntime = cudaRuntime; + } + + /** + * Register this computation for future execution by the {@link AbstractGrCUDAExecutionContext}, + * and add it to the current computational DAG. + * The actual execution might be deferred depending on the inferred data dependencies; + */ + abstract public Object registerExecution(GrCUDAComputationalElement computation) throws UnsupportedTypeException; + + public void registerArray(AbstractArray array) { + arraySet.add(array); + } + + public void registerKernel(Kernel kernel) { + kernelSet.add(kernel); + } + + public ExecutionDAG getDag() { + return dag; + } + + public CUDARuntime getCudaRuntime() { + return cudaRuntime; + } + + // Functions used to interface directly with the CUDA runtime; + + public Kernel loadKernel(String cubinFile, String kernelName, String signature) { + return cudaRuntime.loadKernel(this, cubinFile, kernelName, signature); + } + + public Kernel buildKernel(String code, String kernelName, String signature) { + return cudaRuntime.buildKernel(this, code, kernelName, signature); + } + + public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { + return cudaRuntime.getArrayStreamArchitecturePolicy(); + } + + /** + * Delete internal structures that require manual cleanup operations; + */ + public void cleanup() { } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java new file mode 100644 index 00000000..dc9ec62e --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java @@ -0,0 +1,16 @@ +package com.nvidia.grcuda.gpu.executioncontext; + +public enum ExecutionPolicyEnum { + SYNC("sync"), + DEFAULT("default"); + + private final String name; + + ExecutionPolicyEnum(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java similarity index 73% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java index a8bd0e0d..5d78562f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java @@ -1,27 +1,20 @@ -package com.nvidia.grcuda.gpu; +package com.nvidia.grcuda.gpu.executioncontext; import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAThreadManager; -import com.nvidia.grcuda.array.AbstractArray; -import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; +import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.interop.UnsupportedTypeException; -import java.util.HashSet; -import java.util.Set; - /** * Class used to monitor the state of GrCUDA execution, keep track of memory allocated, * kernels and other executable functions, and dependencies between elements. */ -public class GrCUDAExecutionContext { +public class GrCUDAExecutionContext extends AbstractGrCUDAExecutionContext { - /** - * Reference to the inner {@link CUDARuntime} used to execute kernels and other {@link GrCUDAComputationalElement} - */ - private final CUDARuntime cudaRuntime; /** * Reference to the {@link com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager} that takes care of * scheduling computations on different streams; @@ -32,18 +25,6 @@ public class GrCUDAExecutionContext { */ private final GrCUDAThreadManager threadManager; - /** - * Set that contains all the arrays allocated so far. - */ - private final Set arraySet = new HashSet<>(); - - /** - * Set that contains all the CUDA kernels declared so far. - */ - private final Set kernelSet = new HashSet<>(); - - private final ExecutionDAG dag = new ExecutionDAG(); - public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { this(new CUDARuntime(context, env), new GrCUDAThreadManager(context)); } @@ -53,24 +34,17 @@ public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threa } public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, GrCUDAStreamManager streamManager) { - this.cudaRuntime = cudaRuntime; + super(cudaRuntime); this.threadManager = threadManager; this.streamManager = streamManager; } - public void registerArray(AbstractArray array) { - arraySet.add(array); - } - - public void registerKernel(Kernel kernel) { - kernelSet.add(kernel); - } - /** * Register this computation for future execution by the {@link GrCUDAExecutionContext}, * and add it to the current computational DAG. * The actual execution might be deferred depending on the inferred data dependencies; */ + @Override public Object registerExecution(GrCUDAComputationalElement computation) throws UnsupportedTypeException { // Add the new computation to the DAG ExecutionDAG.DAGVertex vertex = dag.append(computation); @@ -87,35 +61,14 @@ public Object registerExecution(GrCUDAComputationalElement computation) throws U // } } - public ExecutionDAG getDag() { - return dag; - } - - public CUDARuntime getCudaRuntime() { - return cudaRuntime; - } - public GrCUDAStreamManager getStreamManager() { return streamManager; } - // Functions used to interface directly with the CUDA runtime; - - public Kernel loadKernel(String cubinFile, String kernelName, String signature) { - return cudaRuntime.loadKernel(this, cubinFile, kernelName, signature); - } - - public Kernel buildKernel(String code, String kernelName, String signature) { - return cudaRuntime.buildKernel(this, code, kernelName, signature); - } - - public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { - return cudaRuntime.getArrayStreamArchitecturePolicy(); - } - /** * Delete internal structures that require manual cleanup operations; */ + @Override public void cleanup() { threadManager.finalizeManager(); streamManager.cleanup(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java new file mode 100644 index 00000000..97e706f8 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java @@ -0,0 +1,37 @@ +package com.nvidia.grcuda.gpu.executioncontext; + +import com.nvidia.grcuda.GrCUDAContext; +import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.oracle.truffle.api.TruffleLanguage; +import com.oracle.truffle.api.interop.UnsupportedTypeException; + +/** + * Execute all computations synchronously, without computing dependencies or using streams; + */ +public class SyncGrCUDAExecutionContext extends AbstractGrCUDAExecutionContext { + + public SyncGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { + super(context, env); + } + + public SyncGrCUDAExecutionContext(CUDARuntime cudaRuntime) { + super(cudaRuntime); + } + + /** + * Register this computation for future execution by the {@link SyncGrCUDAExecutionContext}, + * and add it to the current computational DAG. + * The actual execution might be deferred depending on the inferred data dependencies; + */ + @Override + public Object registerExecution(GrCUDAComputationalElement computation) throws UnsupportedTypeException { + // Start the computation immediately; + Object result = computation.execute(); + + // Wait for the computation to end; + cudaRuntime.cudaDeviceSynchronize(); + + return result; + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java index e1d5f0f0..f4e7519f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/nodes/ArrayNode.java @@ -28,22 +28,21 @@ */ package com.nvidia.grcuda.nodes; -import java.util.ArrayList; - -import com.nvidia.grcuda.array.AbstractArray; -import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAInternalException; import com.nvidia.grcuda.GrCUDALanguage; +import com.nvidia.grcuda.array.AbstractArray; +import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.array.MultiDimDeviceArray; -import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.CachedContext; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.frame.VirtualFrame; +import java.util.ArrayList; + public abstract class ArrayNode extends ExpressionNode { @Children private ExpressionNode[] sizeNodes; @@ -59,7 +58,7 @@ public abstract class ArrayNode extends ExpressionNode { @Specialization AbstractArray doDefault(VirtualFrame frame, @CachedContext(GrCUDALanguage.class) GrCUDAContext context) { - final GrCUDAExecutionContext grCUDAExecutionContext = context.getGrCUDAExecutionContext(); + final AbstractGrCUDAExecutionContext grCUDAExecutionContext = context.getGrCUDAExecutionContext(); long[] elementsPerDim = new long[sizeNodes.length]; int dim = 0; for (ExpressionNode sizeNode : sizeNodes) { From 3638e866c9f3bce84129124e206d93cbeea577eb Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 28 Apr 2020 15:32:57 +0200 Subject: [PATCH 041/236] added bookkeeping to sync exec --- .../gpu/executioncontext/SyncGrCUDAExecutionContext.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java index 97e706f8..4d9a4beb 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java @@ -26,6 +26,11 @@ public SyncGrCUDAExecutionContext(CUDARuntime cudaRuntime) { */ @Override public Object registerExecution(GrCUDAComputationalElement computation) throws UnsupportedTypeException { + + // Book-keeping; + computation.setComputationStarted(); + computation.updateIsComputationArrayAccess(); + // Start the computation immediately; Object result = computation.execute(); From 56972c63b288280eae4eaa6e9b4caaba3987dde8 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 28 Apr 2020 17:01:12 +0200 Subject: [PATCH 042/236] added option to disable cpu validation in benchmarks --- projects/resources/python/benchmark/benchmark_main.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index db3e6b34..5ba31995 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -44,8 +44,10 @@ help="If True, allocate new memory and rebuild the GPU code at each iteration") parser.add_argument("--reinit", metavar="[True|False]", type=bool, nargs="*", help="If True, re-initialize the values used in each benchmark at each iteration") - parser.add_argument("-c", "--cpu_validation", action="store_true", - help="If present, validate the result of each benchmark using the CPU") + parser.add_argument("-c", "--cpu_validation", action="store_true", dest="cpu_validation", + help="Validate the result of each benchmark using the CPU") + parser.add_argument("--no_cpu_validation", action="store_false", dest="cpu_validation", + help="Validate the result of each benchmark using the CPU") parser.add_argument("-b", "--benchmark", help="If present, run the benchmark only for the specified kernel") parser.add_argument("--policy", @@ -54,6 +56,7 @@ help="Override the input data size used for the benchmarks") parser.add_argument("-r", "--random", action="store_true", help="Initialize benchmarks randomly whenever possible") + parser.set_defaults(cpu_validation=BenchmarkResult.DEFAULT_CPU_VALIDATION) # Parse the input arguments; args = parser.parse_args() @@ -61,15 +64,17 @@ debug = args.debug if args.debug else BenchmarkResult.DEFAULT_DEBUG num_iter = args.num_iter if args.num_iter else BenchmarkResult.DEFAULT_NUM_ITER output_path = args.output_path if args.output_path else "" - cpu_validation = args.cpu_validation if args.cpu_validation else BenchmarkResult.DEFAULT_CPU_VALIDATION realloc = args.realloc if args.realloc else [BenchmarkResult.DEFAULT_REALLOC] reinit = args.reinit if args.reinit else [BenchmarkResult.DEFAULT_REINIT] random_init = args.random if args.random else BenchmarkResult.DEFAULT_RANDOM_INIT + cpu_validation = args.cpu_validation # Create a new benchmark result instance; benchmark_res = BenchmarkResult(debug=debug, num_iterations=num_iter, output_path=output_path, cpu_validation=cpu_validation, random_init=random_init) + BenchmarkResult.log_message(f"using CPU validation: {cpu_validation}") + if args.benchmark and benchmark_res.debug: BenchmarkResult.log_message(f"using only benchmark: {args.benchmark}") benchmarks = {args.benchmark: benchmarks[args.benchmark]} From bf47aa6339987002b11ac61034350850d97efdd1 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 29 Apr 2020 18:55:16 +0200 Subject: [PATCH 043/236] added 1 more benchmark, fixed benchmark options --- .../GrCUDAExecutionContext.java | 2 +- .../gpu/stream/GrCUDAStreamManager.java | 2 +- .../python/benchmark/bench/bench_1.py | 11 +- .../python/benchmark/bench/bench_4.py | 159 ++++++++++++++++++ .../resources/python/benchmark/benchmark.py | 21 ++- .../python/benchmark/benchmark_main.py | 13 +- .../python/benchmark/benchmark_result.py | 29 +++- .../resources/python/examples/pipeline_2.py | 14 +- .../resources/python/examples/pipeline_3.py | 5 + 9 files changed, 234 insertions(+), 22 deletions(-) create mode 100644 projects/resources/python/benchmark/bench/bench_4.py diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java index 5d78562f..c4b4e490 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java @@ -78,7 +78,7 @@ private Object executeComputationSync(ExecutionDAG.DAGVertex vertex) throws Unsu // Before starting this computation, ensure that all its parents have finished their computation; streamManager.syncParentStreams(vertex); - System.out.println("-- running " + vertex.getComputation()); +// System.out.println("-- running " + vertex.getComputation()); // Perform the computation; vertex.getComputation().setComputationStarted(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 37ec8ca6..5373d201 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -62,7 +62,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { vertex.getParentComputations().forEach(c -> { // Synchronize computations that are not yet finished and can use streams; if (!c.isComputationFinished() && c.canUseStream()) { - System.out.println("--\tsync stream " + c.getStream().getStreamNumber() + " by " + vertex.getComputation()); +// System.out.println("--\tsync stream " + c.getStream().getStreamNumber() + " by " + vertex.getComputation()); runtime.cudaStreamSynchronize(c.getStream()); // Set the parent computations as finished; c.setComputationFinished(); diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index 50f19cde..3734b80d 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -4,7 +4,7 @@ import numpy as np from random import random, randint, seed -from benchmark import Benchmark +from benchmark import Benchmark, time_phase from benchmark_result import BenchmarkResult ############################## @@ -80,12 +80,12 @@ def __init__(self, benchmark: BenchmarkResult): self.reduce_kernel = None self.cpu_result = 0 + @time_phase("allocation") def alloc(self, size: int): self.size = size self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK # Allocate 2 vectors; - start = time.time() self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") self.y = polyglot.eval(language="grcuda", string=f"float[{size}]") @@ -99,13 +99,10 @@ def alloc(self, size: int): self.diff_kernel = build_kernel(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32") self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32") - end = time.time() - self.benchmark.add_phase({"name": "allocation", "time_sec": end - start}) - + @time_phase("initialization") def init(self): self.random_seed = randint(0, 10000000) seed(self.random_seed) - start = time.time() for i in range(self.size): if self.benchmark.random_init: self.x[i] = random() @@ -113,8 +110,6 @@ def init(self): else: self.x[i] = 1 / (i + 1) self.y[i] = 2 / (i + 1) - end = time.time() - self.benchmark.add_phase({"name": "initialization", "time_sec": end - start}) def execute(self) -> object: # This must be reset at every execution; diff --git a/projects/resources/python/benchmark/bench/bench_4.py b/projects/resources/python/benchmark/bench/bench_4.py new file mode 100644 index 00000000..2b23befb --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_4.py @@ -0,0 +1,159 @@ +# coding=utf-8 +import polyglot +import time +import numpy as np +from random import random, randint, seed + +from benchmark import Benchmark, time_phase +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_THREADS_PER_BLOCK = 128 + +COMPUTE_KERNEL = """ + extern "C" __global__ void compute(const float* x, float *y, int n) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + y[i] = logf(1.0 + cosf(x[i]) * cosf(x[i]) + sinf(x[i]) * sinf(x[i])); + } + } + """ + +REDUCE_KERNEL = """ + extern "C" __global__ void reduce(const float *x, const float *y, float *res, int n) { + __shared__ float cache[%d]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + cache[threadIdx.x] = x[i] + y[i]; + } + __syncthreads(); + + // Perform tree reduction; + i = %d / 2; + while (i > 0) { + if (threadIdx.x < i) { + cache[threadIdx.x] += cache[threadIdx.x + i]; + } + __syncthreads(); + i /= 2; + } + if (threadIdx.x == 0) { + atomicAdd(res, cache[0]); + } + } + """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + +############################## +############################## + + +class Benchmark4(Benchmark): + """ + Compute the sum of 2 vectors after having applied some computationally intensive arithmetic to it: + A: log(1 + sin(x)^2 + cos(x)^2) ──┐ + ├─> C: sum(x + y) + B: log(1 + sin(y)^2 + cos(y)^2) ──┘ + """ + + def __init__(self, benchmark: BenchmarkResult): + super().__init__("b4", benchmark) + self.size = 0 + self.x = None + self.y = None + self.a = None + self.b = None + self.res = None + self.num_blocks = 0 + self.compute_kernel = None + self.reduce_kernel = None + self.cpu_result = 0 + + @time_phase("allocation") + def alloc(self, size: int): + self.size = size + self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + # Allocate 4 vectors; + self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.y = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.a = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.b = polyglot.eval(language="grcuda", string=f"float[{size}]") + + # Allocate a support vector; + self.res = polyglot.eval(language="grcuda", string=f"float[1]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + self.compute_kernel = build_kernel(COMPUTE_KERNEL, "compute", "pointer, pointer, sint32") + self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, pointer, sint32") + + @time_phase("initialization") + def init(self): + self.random_seed = randint(0, 10000000) + seed(self.random_seed) + for i in range(self.size): + if self.benchmark.random_init: + self.x[i] = random() + self.a[i] = random() + else: + self.x[i] = 1 / (i + 1) + self.a[i] = 1 / (i + 1) + + def execute(self) -> object: + # This must be reset at every execution; + self.res[0] = 0 + + # A. B. Call the kernels. The 2 computations are independent, and can be done in parallel; + start = time.time() + self.compute_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.y, self.size) + self.compute_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.a, self.b, self.size) + end = time.time() + self.benchmark.add_phase({"name": "compute", "time_sec": end - start}) + + # C. Compute the sum of the result; + start = time.time() + self.reduce_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.b, self.res, self.size) + end = time.time() + self.benchmark.add_phase({"name": "reduce", "time_sec": end - start}) + + start = time.time() + result = self.res[0] + end = time.time() + self.benchmark.add_phase({"name": "read_result", "time_sec": end - start}) + + self.benchmark.add_to_benchmark("gpu_result", result) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tgpu result: {result:.4f}") + + return result + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + # Recompute the CPU result only if necessary; + start = time.time() + if self.current_iter == 0 or reinit: + # Re-initialize the random number generator with the same seed as the GPU to generate the same values; + seed(self.random_seed) + if self.benchmark.random_init: + x_g = np.zeros(self.size) + y_g = np.zeros(self.size) + for i in range(self.size): + x_g[i] = random() + y_g[i] = random() + else: + x_g = 1 / np.linspace(1, self.size, self.size) + y_g = 1 / np.linspace(1, self.size, self.size) + + x_g = np.log(1 + np.sin(x_g)**2 + np.cos(x_g)**2) + y_g = np.log(1 + np.sin(y_g)**2 + np.cos(y_g)**2) + self.cpu_result = np.sum(x_g + y_g) + cpu_time = time.time() - start + difference = np.abs(self.cpu_result - gpu_result) + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", difference) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tcpu result: {self.cpu_result:.4f}, " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") + + diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py index 2d8c75cd..351d462a 100644 --- a/projects/resources/python/benchmark/benchmark.py +++ b/projects/resources/python/benchmark/benchmark.py @@ -1,6 +1,24 @@ from benchmark_result import BenchmarkResult from abc import ABC, abstractmethod import time +from typing import Callable + + +def time_phase(phase_name: str) -> Callable: + """ + Decorator that simplifies timing a function call and storing the result in the benchmark log; + :param phase_name: name of the benchmark phase + :return: the output of the wrapped function + """ + def inner_func(func) -> Callable: + def func_call(self, *args, **kwargs) -> object: + start = time.time() + result = func(self, *args, **kwargs) + end = time.time() + self.benchmark.add_phase({"name": phase_name, "time_sec": end - start}) + return result + return func_call + return inner_func class Benchmark(ABC): @@ -75,7 +93,8 @@ def run(self, policy: str, size: int, realloc: bool, reinit: bool) -> None: self.benchmark.add_total_time(end - start) # Perform validation on CPU; - self.cpu_validation(gpu_result, reinit) + if self.benchmark.cpu_validation: + self.cpu_validation(gpu_result, reinit) # Write to file the current result; self.benchmark.save_to_file() diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index 5ba31995..f1e94a92 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -1,8 +1,10 @@ import argparse +from distutils.util import strtobool from bench.bench_1 import Benchmark1 from bench.bench_2 import Benchmark2 from bench.bench_3 import Benchmark3 +from bench.bench_4 import Benchmark4 from benchmark_result import BenchmarkResult ############################## @@ -13,18 +15,21 @@ "b1": Benchmark1, "b2": Benchmark2, "b3": Benchmark3, + "b4": Benchmark4, } num_elem = { "b1": [100], "b2": [100], "b3": [100], + "b4": [100], } policies = { "b1": ["default"], "b2": ["default"], "b3": ["default"], + "b4": ["default"], } ############################## @@ -40,9 +45,9 @@ help="Number of times each benchmark is executed") parser.add_argument("-o", "--output_path", metavar="path/to/output.json", help="Path to the file where results will be stored") - parser.add_argument("--realloc", metavar="[True|False]", type=bool, nargs="*", + parser.add_argument("--realloc", metavar="[True|False]", type=lambda x: bool(strtobool(x)), nargs="*", help="If True, allocate new memory and rebuild the GPU code at each iteration") - parser.add_argument("--reinit", metavar="[True|False]", type=bool, nargs="*", + parser.add_argument("--reinit", metavar="[True|False]", type=lambda x: bool(strtobool(x)), nargs="*", help="If True, re-initialize the values used in each benchmark at each iteration") parser.add_argument("-c", "--cpu_validation", action="store_true", dest="cpu_validation", help="Validate the result of each benchmark using the CPU") @@ -96,3 +101,7 @@ for ri in reinit: for i in range(num_iter): benchmark.run(policy=p, size=n, realloc=re, reinit=ri) + # Print the summary of this block; + if benchmark_res.debug: + benchmark_res.print_current_summary(name=b_name, policy=p, size=n, + realloc=re, reinit=ri, skip=3) diff --git a/projects/resources/python/benchmark/benchmark_result.py b/projects/resources/python/benchmark/benchmark_result.py index 1dd11c33..1afe5ee8 100644 --- a/projects/resources/python/benchmark/benchmark_result.py +++ b/projects/resources/python/benchmark/benchmark_result.py @@ -1,7 +1,7 @@ import os from datetime import datetime import json - +import numpy as np class BenchmarkResult: @@ -23,7 +23,7 @@ def __init__(self, self.debug = debug self.random_init = random_init self.num_iterations = num_iterations - self._cpu_validation = cpu_validation + self.cpu_validation = cpu_validation self._results = {"num_iterations": num_iterations, "cpu_validation": cpu_validation, "random_init": random_init, @@ -128,6 +128,31 @@ def add_phase(self, phase: dict) -> None: if self.debug and "name" in phase and "time_sec" in phase: BenchmarkResult.log_message(f"\t\t{phase['name']}: {phase['time_sec']:.4f} sec") + def print_current_summary(self, name: str, policy: str, size: int, realloc: bool, reinit, skip: int = 0) -> None: + """ + Print a summary of the benchmark with the provided settings; + + :param name: name of the benchmark + :param policy: current policy used in the benchmark + :param size: size of the input data + :param realloc: if reallocation is performed + :param reinit: if re-initialization is performed + :param skip: skip the first N iterations when computing the summary statistics + """ + try: + results_filtered = self._results["benchmarks"][name][policy][size][realloc][reinit] + except KeyError as e: + results_filtered = [] + BenchmarkResult.log_message(f"WARNING: benchmark with signature" + f" [{name}][{policy}][{size}][{realloc}][{reinit}] not found, exception {e}") + # Retrieve execution times; + exec_times = [x["total_time_sec"] for x in results_filtered][skip:] + mean_time = np.mean(exec_times) if exec_times else np.nan + std_time = np.std(exec_times) if exec_times else np.nan + BenchmarkResult.log_message(f"summary of benchmark={name}, policy={policy}, size={size}," + + f" realloc={realloc}, reinit={reinit};" + + f" mean execution time={mean_time:.4f}±{std_time:.4f} sec") + def save_to_file(self) -> None: with open(self._output_path, "w+") as f: json_result = json.dumps(self._results, ensure_ascii=False, indent=4) diff --git a/projects/resources/python/examples/pipeline_2.py b/projects/resources/python/examples/pipeline_2.py index 672f877d..b8b754c5 100644 --- a/projects/resources/python/examples/pipeline_2.py +++ b/projects/resources/python/examples/pipeline_2.py @@ -60,7 +60,7 @@ # Structure of the computation: # A: x^2 ──┐ # ├─> C: z=x-y ───┐ -# B: x^2 ──┘ │ +# B: y^2 ──┘ │ # ├-> F: sum(z+b) # │ # D: a^2 ────> E: b=a+2 ──┘ @@ -113,19 +113,19 @@ time_cumulative += end - start print(f"square, time: {end - start:.4f} sec") - # C. Compute the difference of the 2 vectors. This must be done after the 2 previous computations; + # D. Compute the other branch of the computation; start = time.time() - diff_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(x, y, z, N) + square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(a, N) end = time.time() time_cumulative += end - start - print(f"diff, time: {end - start:.4f} sec") + print(f"square - other branch, time: {end - start:.4f} sec") - # D. Compute the other branch of the computation; + # C. Compute the difference of the 2 vectors. This must be done after the 2 previous computations; start = time.time() - square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(a, N) + diff_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(x, y, z, N) end = time.time() time_cumulative += end - start - print(f"square - other branch, time: {end - start:.4f} sec") + print(f"diff, time: {end - start:.4f} sec") # E. Continue computing the other branch; start = time.time() diff --git a/projects/resources/python/examples/pipeline_3.py b/projects/resources/python/examples/pipeline_3.py index a648757f..222ca481 100644 --- a/projects/resources/python/examples/pipeline_3.py +++ b/projects/resources/python/examples/pipeline_3.py @@ -97,6 +97,11 @@ time_cumulative += end - start print(f"iter {i}) time: {end - start:.4f} sec") + square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(y, N) + a = y[0] + b=a+1 + square_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(y, b) + # C. Compute the sum of the result; start = time.time() reduce_kernel(NUM_BLOCKS, NUM_THREADS_PER_BLOCK)(x, y, res, N) From 3b79ae0b81850f59882d559171555abfd6ee431a Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 30 Apr 2020 18:08:14 +0200 Subject: [PATCH 044/236] wrapping kernel arguments to store if const or array --- .../grcuda/test/gpu/ExecutionDAGTest.java | 57 ++++++++++---- .../gpu/stream/GrCUDAStreamManagerTest.java | 41 ++++++---- .../com/nvidia/grcuda/gpu/ArgumentType.java | 12 +++ .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 11 +-- .../src/com/nvidia/grcuda/gpu/Kernel.java | 74 +++++++++---------- .../nvidia/grcuda/gpu/KernelArguments.java | 20 ++++- .../ArrayExecutionInitializer.java | 12 ++- .../gpu/computation/ComputationArgument.java | 41 ++++++++++ .../ComputationArgumentWithValue.java | 50 +++++++++++++ .../computation/DeviceArrayReadExecution.java | 2 +- .../DeviceArrayWriteExecution.java | 2 +- .../GrCUDAComputationalElement.java | 28 +++---- .../computation/InitializeArgumentSet.java | 2 +- .../gpu/computation/KernelExecution.java | 10 +-- .../MultiDimDeviceArrayViewReadExecution.java | 2 +- ...MultiDimDeviceArrayViewWriteExecution.java | 2 +- .../GrCUDAExecutionContext.java | 2 +- .../gpu/stream/GrCUDAStreamManager.java | 2 +- 18 files changed, 265 insertions(+), 105 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ArgumentType.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ComputationArgument.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ComputationArgumentWithValue.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 08042d5d..a1b3dd04 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,12 +1,14 @@ package com.nvidia.grcuda.test.gpu; import com.nvidia.grcuda.NoneValue; +import com.nvidia.grcuda.gpu.ArgumentType; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; -import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import com.oracle.truffle.api.interop.UnsupportedTypeException; @@ -30,7 +32,13 @@ public class ExecutionDAGTest { * Mock class to test the DAG execution; */ public static class KernelExecutionTest extends GrCUDAComputationalElement { - public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { +// public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { +// super(grCUDAExecutionContext, args.stream() +// .map(a -> new ComputationArgumentWithValue(ArgumentType.POINTER, true, false, a)) +// .collect(Collectors.toList())); +// } + + public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { super(grCUDAExecutionContext, args); } @@ -44,6 +52,20 @@ public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List B(1) -> D(1,3) -> E(1,4) -> F(4) // \----> C(2) // The final frontier is composed by C(2), D(3), E(1), F(4); - new KernelExecutionTest(context, Arrays.asList(1, 2)).schedule(); - new KernelExecutionTest(context, Collections.singletonList(1)).schedule(); - new KernelExecutionTest(context, Collections.singletonList(2)).schedule(); - new KernelExecutionTest(context, Arrays.asList(1, 3)).schedule(); - new KernelExecutionTest(context, Arrays.asList(1, 4)).schedule(); - new KernelExecutionTest(context, Collections.singletonList(4)).schedule(); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(4))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); ExecutionDAG dag = context.getDag(); @@ -289,8 +314,8 @@ public void dependencyPipelineSimple2Test() { Value buildkernel = context.eval("grcuda", "buildkernel"); Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); - Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32"); - Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "const pointer, const pointer, pointer, sint32"); + Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "const pointer, pointer, sint32"); assertNotNull(squareKernel); assertNotNull(diffKernel); assertNotNull(reduceKernel); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index b2f60b12..4d49a6dd 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -18,10 +18,13 @@ public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(1)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(2)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 2, 3)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(3)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(1))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(2))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, + Arrays.asList(new ExecutionDAGTest.MockArgument(1), + new ExecutionDAGTest.MockArgument(2), + new ExecutionDAGTest.MockArgument(3))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(3))).schedule(); ExecutionDAG dag = context.getDag(); @@ -40,12 +43,15 @@ public void streamSelectionMockTest() throws UnsupportedTypeException { // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // \----> C(2) // The final frontier is composed by C(2), D(3), E(1), F(4); - new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 2)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(1)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(2)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 3)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 4)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(4)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, + Arrays.asList(new ExecutionDAGTest.MockArgument(1), new ExecutionDAGTest.MockArgument(2))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(1))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(2))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, + Arrays.asList(new ExecutionDAGTest.MockArgument(1), new ExecutionDAGTest.MockArgument(2))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, + Arrays.asList(new ExecutionDAGTest.MockArgument(1), new ExecutionDAGTest.MockArgument(4))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(4))).schedule(); ExecutionDAG dag = context.getDag(); @@ -66,12 +72,15 @@ public void streamSelection2MockTest() throws UnsupportedTypeException { // A(1,2) -> B(1) -> D(1,3) // \----> C(2) // E(4) -> F(4, 5) - new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 2)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(1)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(2)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(1, 3)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(4)).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Arrays.asList(4, 5)).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, + Arrays.asList(new ExecutionDAGTest.MockArgument(1), new ExecutionDAGTest.MockArgument(2))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(1))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(2))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, + Arrays.asList(new ExecutionDAGTest.MockArgument(1), new ExecutionDAGTest.MockArgument(3))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(4))).schedule(); + new ExecutionDAGTest.KernelExecutionTest(context, + Arrays.asList(new ExecutionDAGTest.MockArgument(4), new ExecutionDAGTest.MockArgument(5))).schedule(); ExecutionDAG dag = context.getDag(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ArgumentType.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ArgumentType.java new file mode 100644 index 00000000..9079e35e --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ArgumentType.java @@ -0,0 +1,12 @@ +package com.nvidia.grcuda.gpu; + +/** + * Defines the types of arguments that can be specified in a kernel NFI signature; + */ +public enum ArgumentType { + POINTER, + INT32, + INT64, + FLOAT32, + FLOAT64; +} \ No newline at end of file diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index 6a2ab42d..8eb6b531 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -1,5 +1,6 @@ package com.nvidia.grcuda.gpu; +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.oracle.truffle.api.interop.TruffleObject; @@ -37,7 +38,7 @@ public DAGVertex append(GrCUDAComputationalElement kernel) { // For each vertex in the frontier, compute dependencies of the vertex; for (DAGVertex frontierVertex : frontier) { - List dependencies = computeDependencies(frontierVertex, newVertex); + List dependencies = computeDependencies(frontierVertex, newVertex); if (dependencies.size() > 0) { // Create a new edge between the two vertices (book-keeping is automatic); new DAGEdge(frontierVertex, newVertex, dependencies); @@ -52,7 +53,7 @@ public DAGVertex append(GrCUDAComputationalElement kernel) { return newVertex; } - private List computeDependencies(DAGVertex startVertex, DAGVertex endVertex) { + private List computeDependencies(DAGVertex startVertex, DAGVertex endVertex) { return startVertex.getComputation().computeDependencies(endVertex.getComputation()); } @@ -208,7 +209,7 @@ public class DAGEdge { /** * List of objects that represents depenencies between the two vertices; */ - private List dependencies; + private List dependencies; DAGEdge(DAGVertex start, DAGVertex end) { this.start = start; @@ -222,7 +223,7 @@ public class DAGEdge { edges.add(this); } - DAGEdge(DAGVertex start, DAGVertex end, List dependencies) { + DAGEdge(DAGVertex start, DAGVertex end, List dependencies) { this(start, end); this.dependencies = dependencies; } @@ -239,7 +240,7 @@ public int getId() { return id; } - public List getDependencies() { + public List getDependencies() { return dependencies; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index b5b02009..7d220520 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -32,9 +32,9 @@ import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.array.MultiDimDeviceArray; +import com.nvidia.grcuda.gpu.computation.ComputationArgument; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; -import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; @@ -50,9 +50,7 @@ import com.oracle.truffle.api.library.ExportMessage; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; @ExportLibrary(InteropLibrary.class) public class Kernel implements TruffleObject { @@ -63,8 +61,7 @@ public class Kernel implements TruffleObject { private final long kernelFunction; private final String kernelSignature; private int launchCount = 0; - private final ArgumentType[] argumentTypes; - private final List argsAreArrays; + private final List arguments = new ArrayList<>(); private String ptxCode; public Kernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, String kernelName, CUDARuntime.CUModule kernelModule, long kernelFunction, String kernelSignature) { @@ -73,8 +70,7 @@ public Kernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, String kern this.kernelModule = kernelModule; this.kernelFunction = kernelFunction; this.kernelSignature = kernelSignature; - this.argumentTypes = parseSignature(kernelSignature); - this.argsAreArrays = computeIfArgsAreArrays(this.argumentTypes); + parseSignature(kernelSignature); this.grCUDAExecutionContext.registerKernel(this); } @@ -92,23 +88,19 @@ public AbstractGrCUDAExecutionContext getGrCUDAExecutionContext() { return grCUDAExecutionContext; } - public ArgumentType[] getArgumentTypes() { - return argumentTypes; - } - - public List getArgsAreArrays() { - return argsAreArrays; + public List getArguments() { + return arguments; } public KernelArguments createKernelArguments(Object[] args, InteropLibrary int32Access, InteropLibrary int64Access, InteropLibrary doubleAccess) throws UnsupportedTypeException, ArityException { - if (args.length != argumentTypes.length) { + if (args.length != arguments.size()) { CompilerDirectives.transferToInterpreter(); - throw ArityException.create(argumentTypes.length, args.length); + throw ArityException.create(arguments.size(), args.length); } - KernelArguments kernelArgs = new KernelArguments(args); - for (int argIdx = 0; argIdx < argumentTypes.length; argIdx++) { - ArgumentType type = argumentTypes[argIdx]; + KernelArguments kernelArgs = new KernelArguments(args, arguments); + for (int argIdx = 0; argIdx < arguments.size(); argIdx++) { + ArgumentType type = arguments.get(argIdx).getType(); try { switch (type) { case INT32: @@ -157,12 +149,33 @@ public KernelArguments createKernelArguments(Object[] args, InteropLibrary int32 return kernelArgs; } - private static ArgumentType[] parseSignature(String kernelSignature) { - CompilerAsserts.neverPartOfCompilation(); - ArrayList args = new ArrayList<>(); + private void parseSignature(String kernelSignature) { for (String s : kernelSignature.trim().split(",")) { + + // Find if the type is const; + String[] typePieces = s.trim().split(" "); + String typeString; + boolean typeIsConst = false; + if (typePieces.length == 1) { + // If only 1 piece is found, the argument is not const; + typeString = typePieces[0].trim(); + } else if (typePieces.length == 2) { + // Const can be either before or after the type; + if (typePieces[0].trim().equals("const")) { + typeIsConst = true; + typeString = typePieces[1].trim(); + } else if (typePieces[1].trim().equals("const")) { + typeIsConst = true; + typeString = typePieces[0].trim(); + } else { + throw new IllegalArgumentException("invalid type identifier in kernel signature: " + s); + } + } else { + throw new IllegalArgumentException("invalid type identifier in kernel signature: " + s); + } + ArgumentType type; - switch (s.trim()) { + switch (typeString) { case "pointer": type = ArgumentType.POINTER; break; @@ -183,15 +196,8 @@ private static ArgumentType[] parseSignature(String kernelSignature) { default: throw new IllegalArgumentException("invalid type identifier in kernel signature: " + s); } - args.add(type); + this.arguments.add(new ComputationArgument(type, type.equals(ArgumentType.POINTER), typeIsConst)); } - ArgumentType[] argArray = new ArgumentType[args.size()]; - args.toArray(argArray); - return argArray; - } - - private static List computeIfArgsAreArrays(ArgumentType[] types) { - return Arrays.stream(types).map(a -> a == ArgumentType.POINTER).collect(Collectors.toList()); } public long getKernelFunction() { @@ -207,14 +213,6 @@ public String toString() { return "Kernel(" + kernelName + ", " + kernelSignature + ", launchCount=" + launchCount + ")"; } - private enum ArgumentType { - POINTER, - INT32, - INT64, - FLOAT32, - FLOAT64; - } - public String getPTX() { return ptxCode; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java index d27f8851..7730c760 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java @@ -1,18 +1,31 @@ package com.nvidia.grcuda.gpu; +import com.nvidia.grcuda.gpu.computation.ComputationArgument; +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; + import java.io.Closeable; import java.io.IOException; import java.util.ArrayList; +import java.util.List; public final class KernelArguments implements Closeable { private final Object[] originalArgs; + /** + * Associate each input object to the characteristics of its argument, such as its type and if it's constant; + */ + private final List kernelArgumentWithValues = new ArrayList<>(); private final UnsafeHelper.PointerArray argumentArray; private final ArrayList argumentValues = new ArrayList<>(); - public KernelArguments(Object[] args) { + public KernelArguments(Object[] args, List kernelArgumentList) { this.originalArgs = args; this.argumentArray = UnsafeHelper.createPointerArray(args.length); + assert(args.length == kernelArgumentList.size()); + // Initialize the list of arguments and object references; + for (int i = 0; i < args.length; i++) { + kernelArgumentWithValues.add(new ComputationArgumentWithValue(kernelArgumentList.get(i), args[i])); + } } public void setArgument(int argIdx, UnsafeHelper.MemoryObject obj) { @@ -32,6 +45,11 @@ public Object getOriginalArg(int index) { return originalArgs[index]; } + public List getKernelArgumentWithValues() { + return kernelArgumentWithValues; + } + + @Override public void close() { this.argumentArray.close(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java index 19fa7327..02c9530f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java @@ -1,6 +1,7 @@ package com.nvidia.grcuda.gpu.computation; import com.nvidia.grcuda.array.AbstractArray; +import com.nvidia.grcuda.gpu.ArgumentType; import com.oracle.truffle.api.CompilerDirectives; import java.util.Collections; @@ -16,14 +17,21 @@ class ArrayExecutionInitializer implements InitializeArgumentSet { private final T array; + private final boolean readOnly; ArrayExecutionInitializer(T array) { + this(array, false); + } + + ArrayExecutionInitializer(T array, boolean readOnly) { this.array = array; + this.readOnly = readOnly; } @Override @CompilerDirectives.TruffleBoundary - public Set initialize() { - return new HashSet<>(Collections.singleton(this.array)); + public Set initialize() { + return new HashSet<>(Collections.singleton( + new ComputationArgumentWithValue(ArgumentType.POINTER, true, readOnly, this.array))); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ComputationArgument.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ComputationArgument.java new file mode 100644 index 00000000..ca011c20 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ComputationArgument.java @@ -0,0 +1,41 @@ +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.gpu.ArgumentType; + +/** + * Defines a {@link GrCUDAComputationalElement} argument representing the elements of a NFI signature. + * For each argument, store its type, if it's a pointer, + * and if it's constant (i.e. its content cannot be modified in the computation); + */ +public class ComputationArgument { + protected final ArgumentType type; + protected final boolean isArray; + protected final boolean isConst; + + public ComputationArgument(ArgumentType type, boolean isArray, boolean isConst) { + this.type = type; + this.isArray = isArray; + this.isConst = isConst; + } + + public ArgumentType getType() { + return type; + } + + public boolean isArray() { + return isArray; + } + + public boolean isConst() { + return isConst; + } + + @Override + public String toString() { + return "ComputationArgument(" + + "type=" + type + + ", isArray=" + isArray + + ", isConst=" + isConst + + ')'; + } +} \ No newline at end of file diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ComputationArgumentWithValue.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ComputationArgumentWithValue.java new file mode 100644 index 00000000..64e23f2b --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ComputationArgumentWithValue.java @@ -0,0 +1,50 @@ +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.gpu.ArgumentType; + +import java.util.Objects; + +/** + * Defines a {@link GrCUDAComputationalElement} argument representing the elements of a NFI signature. + * For each argument, store its type, if it's a pointer, + * and if it's constant (i.e. its content cannot be modified in the computation). + * This class also holds a reference to the actual object associated to the argument; + */ +public class ComputationArgumentWithValue extends ComputationArgument { + private final Object argumentValue; + + public ComputationArgumentWithValue(ArgumentType type, boolean isArray, boolean isConst, Object argumentValue) { + super(type, isArray, isConst); + this.argumentValue = argumentValue; + } + + public ComputationArgumentWithValue(ComputationArgument computationArgument, Object argumentValue) { + super(computationArgument.getType(), computationArgument.isArray(), computationArgument.isConst()); + this.argumentValue = argumentValue; + } + + public Object getArgumentValue() { return this.argumentValue; } + + @Override + public String toString() { + return "ComputationArgumentWithValue(" + + "argumentValue=" + argumentValue + + ", type=" + type + + ", isArray=" + isArray + + ", isConst=" + isConst + + ')'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ComputationArgumentWithValue that = (ComputationArgumentWithValue) o; + return Objects.equals(argumentValue, that.argumentValue); + } + + @Override + public int hashCode() { + return Objects.hash(argumentValue); + } +} \ No newline at end of file diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java index 8651426e..863a1712 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java @@ -11,7 +11,7 @@ public class DeviceArrayReadExecution extends ArrayAccessExecution public DeviceArrayReadExecution(DeviceArray array, long index, ValueProfile elementTypeProfile) { - super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array), array); + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array, true), array); this.index = index; this.elementTypeProfile = elementTypeProfile; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java index f760fa0f..ffdd2fb2 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java @@ -18,7 +18,7 @@ public DeviceArrayWriteExecution(DeviceArray array, Object value, InteropLibrary valueLibrary, ValueProfile elementTypeProfile) { - super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array), array); + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array, false), array); this.index = index; this.value = value; this.valueLibrary = valueLibrary; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index 8736a79f..80f9d79b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -22,13 +22,13 @@ public abstract class GrCUDAComputationalElement { /** * This set contains the original set of input arguments that are used to compute dependencies; */ - protected final Set argumentSet; + protected final Set argumentSet; /** * This set contains the input arguments that are considered, at each step, in the dependency computation. * The set initially coincides with "argumentSet", then arguments are removed from this set once a new dependency is found; * TODO: should this be moved somewhere else? e.g. inside the DAG, although this means moving the dependency computation too */ - private Set activeArgumentSet; + private Set activeArgumentSet; /** * Reference to the execution context where this computation is executed; */ @@ -73,11 +73,11 @@ public GrCUDAComputationalElement(AbstractGrCUDAExecutionContext grCUDAExecution * @param grCUDAExecutionContext execution context in which this computational element will be scheduled * @param args the list of arguments provided to the computation. Arguments are expected to be {@link org.graalvm.polyglot.Value} */ - public GrCUDAComputationalElement(AbstractGrCUDAExecutionContext grCUDAExecutionContext, List args) { + public GrCUDAComputationalElement(AbstractGrCUDAExecutionContext grCUDAExecutionContext, List args) { this(grCUDAExecutionContext, new DefaultExecutionInitializer(args)); } - public Set getArgumentSet() { + public Set getArgumentSet() { return argumentSet; } @@ -88,10 +88,10 @@ public Set getArgumentSet() { * @return the list of arguments that the two kernels have in common */ @CompilerDirectives.TruffleBoundary - public List computeDependencies(GrCUDAComputationalElement other) { - Set dependencies = new HashSet<>(); - Set newArgumentSet = new HashSet<>(); - for (Object arg : this.activeArgumentSet) { + public List computeDependencies(GrCUDAComputationalElement other) { + Set dependencies = new HashSet<>(); + Set newArgumentSet = new HashSet<>(); + for (ComputationArgumentWithValue arg : this.activeArgumentSet) { // The other computation requires the current argument, so we have found a new dependency; if (other.activeArgumentSet.contains(arg)) { dependencies.add(arg); @@ -192,9 +192,9 @@ protected void associateArraysToStreamImpl() {} * Set for all the {@link com.nvidia.grcuda.array.AbstractArray} in the computation if this computation is an array access; */ public void updateIsComputationArrayAccess() { - for (Object o : this.argumentSet) { - if (o instanceof AbstractArray) { - ((AbstractArray) o).setLastComputationArrayAccess(isComputationArrayAccess); + for (ComputationArgumentWithValue o : this.argumentSet) { + if (o.getArgumentValue() instanceof AbstractArray) { + ((AbstractArray) o.getArgumentValue()).setLastComputationArrayAccess(isComputationArrayAccess); } } } @@ -204,14 +204,14 @@ public void updateIsComputationArrayAccess() { * and consider each of them in the dependency computations; */ private static class DefaultExecutionInitializer implements InitializeArgumentSet { - private final List args; + private final List args; - DefaultExecutionInitializer(List args) { + DefaultExecutionInitializer(List args) { this.args = args; } @Override - public Set initialize() { + public Set initialize() { return new HashSet<>(args); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java index 394c1906..3af47ca6 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java @@ -8,5 +8,5 @@ public interface InitializeArgumentSet { * considered in the dependency evaluation. * @return a set of arguments used in the evaluation */ - Set initialize(); + Set initialize(); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index 59c027d0..d53b1f6f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -3,16 +3,15 @@ import com.nvidia.grcuda.NoneValue; import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.ConfiguredKernel; -import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.Kernel; import com.nvidia.grcuda.gpu.KernelArguments; import com.nvidia.grcuda.gpu.KernelConfig; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import java.util.Arrays; import java.util.Set; import java.util.stream.Collectors; -import java.util.stream.IntStream; /** * Class used to track the single execution of a {@link ConfiguredKernel}. @@ -110,12 +109,11 @@ static class KernelExecutionInitializer implements InitializeArgumentSet { } @Override - public Set initialize() { + public Set initialize() { // TODO: what aboout scalars? We cannot treat them in the same way, as they are copied and not referenced // There should be a semantic to manually specify scalar dependencies? For now we have to skip them; - return IntStream.range(0, args.getOriginalArgs().length).filter(i -> - kernel.getArgsAreArrays().get(i) - ).mapToObj(args::getOriginalArg).collect(Collectors.toSet()); + return this.args.getKernelArgumentWithValues().stream() + .filter(ComputationArgument::isArray).collect(Collectors.toSet()); } } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java index f692875c..6ea69007 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewReadExecution.java @@ -11,7 +11,7 @@ public class MultiDimDeviceArrayViewReadExecution extends ArrayAccessExecution(array.getMdDeviceArray()), array); + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array.getMdDeviceArray(), true), array); this.index = index; this.elementTypeProfile = elementTypeProfile; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java index c4879308..6282b5cc 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/MultiDimDeviceArrayViewWriteExecution.java @@ -18,7 +18,7 @@ public MultiDimDeviceArrayViewWriteExecution(MultiDimDeviceArrayView array, Object value, InteropLibrary valueLibrary, ValueProfile elementTypeProfile) { - super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array.getMdDeviceArray()), array); + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array.getMdDeviceArray(), false), array); this.index = index; this.value = value; this.valueLibrary = valueLibrary; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java index c4b4e490..5d78562f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java @@ -78,7 +78,7 @@ private Object executeComputationSync(ExecutionDAG.DAGVertex vertex) throws Unsu // Before starting this computation, ensure that all its parents have finished their computation; streamManager.syncParentStreams(vertex); -// System.out.println("-- running " + vertex.getComputation()); + System.out.println("-- running " + vertex.getComputation()); // Perform the computation; vertex.getComputation().setComputationStarted(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 5373d201..37ec8ca6 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -62,7 +62,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { vertex.getParentComputations().forEach(c -> { // Synchronize computations that are not yet finished and can use streams; if (!c.isComputationFinished() && c.canUseStream()) { -// System.out.println("--\tsync stream " + c.getStream().getStreamNumber() + " by " + vertex.getComputation()); + System.out.println("--\tsync stream " + c.getStream().getStreamNumber() + " by " + vertex.getComputation()); runtime.cudaStreamSynchronize(c.getStream()); // Set the parent computations as finished; c.setComputationFinished(); From e61862a61ee5c1772337c7db6bc3bd4e67957b8d Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 1 May 2020 13:21:52 +0200 Subject: [PATCH 045/236] moved dependency computation to separate class, adding read-only dep computation --- .../src/com/nvidia/grcuda/GrCUDAContext.java | 18 ++- .../src/com/nvidia/grcuda/GrCUDAOptions.java | 3 + .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 13 +- .../gpu/computation/ArrayAccessExecution.java | 2 +- .../ArrayExecutionInitializer.java | 13 +- .../computation/DependencyComputation.java | 33 +++++ .../gpu/computation/DependencyPolicyEnum.java | 16 ++ .../GrCUDAComputationalElement.java | 139 ++++++++++++------ .../computation/InitializeArgumentList.java | 12 ++ .../computation/InitializeArgumentSet.java | 12 -- .../gpu/computation/KernelExecution.java | 8 +- 11 files changed, 194 insertions(+), 75 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyComputation.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyPolicyEnum.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentList.java delete mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index db4e7213..7128c197 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -38,8 +38,9 @@ import com.nvidia.grcuda.functions.GetDevicesFunction; import com.nvidia.grcuda.functions.map.MapFunction; import com.nvidia.grcuda.functions.map.ShredFunction; -import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.computation.DependencyPolicyEnum; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.ExecutionPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.SyncGrCUDAExecutionContext; @@ -59,6 +60,7 @@ public final class GrCUDAContext { public static final ExecutionPolicyEnum DEFAULT_EXECUTION_POLICY = ExecutionPolicyEnum.DEFAULT; + public static final DependencyPolicyEnum DEFAULT_DEPENDENCY_POLICY = DependencyPolicyEnum.DEFAULT; private static final String ROOT_NAMESPACE = "CU"; @@ -75,6 +77,8 @@ public final class GrCUDAContext { public GrCUDAContext(Env env) { this.env = env; + // Retrieve the dependency computation policy; + DependencyPolicyEnum dependencyPolicy = parseDependencyPolicy(env.getOptions().get(GrCUDAOptions.DependencyPolicy)); // Retrieve the execution policy; ExecutionPolicyEnum executionPolicy = parseExecutionPolicy(env.getOptions().get(GrCUDAOptions.ExecutionPolicy)); // Initialize the execution policy; @@ -183,6 +187,18 @@ private static ExecutionPolicyEnum parseExecutionPolicy(String policyString) { } } + @TruffleBoundary + private static DependencyPolicyEnum parseDependencyPolicy(String policyString) { + switch(policyString) { + case "with_const": + return DependencyPolicyEnum.WITH_CONST; + case "default": + return DependencyPolicyEnum.DEFAULT; + default: + return GrCUDAContext.DEFAULT_DEPENDENCY_POLICY; + } + } + /** * Cleanup the GrCUDA context at the end of the execution; */ diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java index cc144791..5c5f3b65 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java @@ -57,4 +57,7 @@ private GrCUDAOptions() { @Option(category = OptionCategory.USER, help = "Chose the scheduling policy of GrCUDA computations", stability = OptionStability.EXPERIMENTAL) // public static final OptionKey ExecutionPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_EXECUTION_POLICY.getName()); + @Option(category = OptionCategory.USER, help = "Chose how data dependencies between GrCUDA computations are computed", stability = OptionStability.EXPERIMENTAL) // + public static final OptionKey DependencyPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_DEPENDENCY_POLICY.getName()); + } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index 8eb6b531..4abb1ebe 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -5,6 +5,7 @@ import com.oracle.truffle.api.interop.TruffleObject; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -38,7 +39,7 @@ public DAGVertex append(GrCUDAComputationalElement kernel) { // For each vertex in the frontier, compute dependencies of the vertex; for (DAGVertex frontierVertex : frontier) { - List dependencies = computeDependencies(frontierVertex, newVertex); + Collection dependencies = computeDependencies(frontierVertex, newVertex); if (dependencies.size() > 0) { // Create a new edge between the two vertices (book-keeping is automatic); new DAGEdge(frontierVertex, newVertex, dependencies); @@ -53,7 +54,7 @@ public DAGVertex append(GrCUDAComputationalElement kernel) { return newVertex; } - private List computeDependencies(DAGVertex startVertex, DAGVertex endVertex) { + private Collection computeDependencies(DAGVertex startVertex, DAGVertex endVertex) { return startVertex.getComputation().computeDependencies(endVertex.getComputation()); } @@ -207,9 +208,9 @@ public class DAGEdge { final private DAGVertex end; final private int id; /** - * List of objects that represents depenencies between the two vertices; + * Set of objects that represents depenencies between the two vertices; */ - private List dependencies; + private Collection dependencies; DAGEdge(DAGVertex start, DAGVertex end) { this.start = start; @@ -223,7 +224,7 @@ public class DAGEdge { edges.add(this); } - DAGEdge(DAGVertex start, DAGVertex end, List dependencies) { + DAGEdge(DAGVertex start, DAGVertex end, Collection dependencies) { this(start, end); this.dependencies = dependencies; } @@ -240,7 +241,7 @@ public int getId() { return id; } - public List getDependencies() { + public Collection getDependencies() { return dependencies; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java index d47a5569..1819da72 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java @@ -11,7 +11,7 @@ public abstract class ArrayAccessExecution extends GrCU protected boolean isComputationArrayAccess = true; protected T array; - public ArrayAccessExecution(AbstractGrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer, T array) { + public ArrayAccessExecution(AbstractGrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentList initializer, T array) { super(grCUDAExecutionContext, initializer); this.array = array; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java index 02c9530f..2724331b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayExecutionInitializer.java @@ -2,11 +2,9 @@ import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.ArgumentType; -import com.oracle.truffle.api.CompilerDirectives; import java.util.Collections; -import java.util.HashSet; -import java.util.Set; +import java.util.List; /** * The only argument in {@link com.nvidia.grcuda.array.AbstractArray} computations is the array itself. @@ -14,7 +12,7 @@ * while in {@link com.nvidia.grcuda.array.MultiDimDeviceArray} there is currently no need to explicitly represent computations, * as they cannot directly the underlying memory; */ -class ArrayExecutionInitializer implements InitializeArgumentSet { +class ArrayExecutionInitializer implements InitializeArgumentList { private final T array; private final boolean readOnly; @@ -29,9 +27,8 @@ class ArrayExecutionInitializer implements InitializeAr } @Override - @CompilerDirectives.TruffleBoundary - public Set initialize() { - return new HashSet<>(Collections.singleton( - new ComputationArgumentWithValue(ArgumentType.POINTER, true, readOnly, this.array))); + public List initialize() { + return Collections.singletonList( + new ComputationArgumentWithValue(ArgumentType.POINTER, true, readOnly, this.array)); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyComputation.java new file mode 100644 index 00000000..4df24773 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyComputation.java @@ -0,0 +1,33 @@ +package com.nvidia.grcuda.gpu.computation; + +import java.util.Collection; + +/** + * Defines how data dependencies between {@link GrCUDAComputationalElement} are found, + * e.g. if read-only or scalar argyments should be ignored. + * It returns the list of arguments that have been found to create side-effects. + * The function is not guaranteed to be pure, + * and is allowed update information in the {@link GrCUDAComputationalElement} + */ +public abstract class DependencyComputation { + + /** + * This set contains the input arguments that are considered, at each step, in the dependency computation. + * The set initially coincides with "argumentSet", then arguments are removed from this set once a new dependency is found. + * This is conceptually a set, in the sense that every element is unique. + * Concrete implementations might use other data structures, if required; + */ + protected Collection activeArgumentSet; + + /** + * Computes if the "other" GrCUDAComputationalElement has dependencies w.r.t. this kernel, + * such as requiring as input a value computed by this kernel; + * @param other kernel for which we want to check dependencies, w.r.t. this kernel + * @return the list of arguments that the two kernels have in common + */ + public abstract Collection computeDependencies(GrCUDAComputationalElement other); + + public Collection getActiveArgumentSet() { + return activeArgumentSet; + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyPolicyEnum.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyPolicyEnum.java new file mode 100644 index 00000000..f0ac6d78 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyPolicyEnum.java @@ -0,0 +1,16 @@ +package com.nvidia.grcuda.gpu.computation; + +public enum DependencyPolicyEnum { + DEFAULT("default"), + WITH_CONST("with_const"); + + private final String name; + + DependencyPolicyEnum(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index 80f9d79b..f4037e50 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -9,6 +9,7 @@ import com.oracle.truffle.api.interop.UnsupportedTypeException; import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -20,15 +21,9 @@ public abstract class GrCUDAComputationalElement { /** - * This set contains the original set of input arguments that are used to compute dependencies; + * This list contains the original set of input arguments that are used to compute dependencies; */ - protected final Set argumentSet; - /** - * This set contains the input arguments that are considered, at each step, in the dependency computation. - * The set initially coincides with "argumentSet", then arguments are removed from this set once a new dependency is found; - * TODO: should this be moved somewhere else? e.g. inside the DAG, although this means moving the dependency computation too - */ - private Set activeArgumentSet; + protected final List argumentList; /** * Reference to the execution context where this computation is executed; */ @@ -55,17 +50,19 @@ public abstract class GrCUDAComputationalElement { */ protected boolean isComputationArrayAccess = false; + private final DependencyComputation dependencyComputation; + /** * Constructor that takes an argument set initializer to build the set of arguments used in the dependency computation * @param grCUDAExecutionContext execution context in which this computational element will be scheduled * @param initializer the initializer used to build the internal set of arguments considered in the dependency computation */ @CompilerDirectives.TruffleBoundary - public GrCUDAComputationalElement(AbstractGrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentSet initializer) { - this.argumentSet = initializer.initialize(); + public GrCUDAComputationalElement(AbstractGrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentList initializer) { + this.argumentList = initializer.initialize(); // Initialize by making a copy of the original set; - this.activeArgumentSet = new HashSet<>(this.argumentSet); this.grCUDAExecutionContext = grCUDAExecutionContext; + this.dependencyComputation = new DefaultDependencyComputation(this.argumentList); } /** @@ -77,33 +74,8 @@ public GrCUDAComputationalElement(AbstractGrCUDAExecutionContext grCUDAExecution this(grCUDAExecutionContext, new DefaultExecutionInitializer(args)); } - public Set getArgumentSet() { - return argumentSet; - } - - /** - * Computes if the "other" GrCUDAComputationalElement has dependencies w.r.t. this kernel, - * such as requiring as input a value computed by this kernel; - * @param other kernel for which we want to check dependencies, w.r.t. this kernel - * @return the list of arguments that the two kernels have in common - */ - @CompilerDirectives.TruffleBoundary - public List computeDependencies(GrCUDAComputationalElement other) { - Set dependencies = new HashSet<>(); - Set newArgumentSet = new HashSet<>(); - for (ComputationArgumentWithValue arg : this.activeArgumentSet) { - // The other computation requires the current argument, so we have found a new dependency; - if (other.activeArgumentSet.contains(arg)) { - dependencies.add(arg); - } else { - // Otherwise, the current argument is still "active", and could enforce a dependency on a future computation; - newArgumentSet.add(arg); - } - } - // Arguments that are not leading to a new dependency could still create new dependencies later on! - this.activeArgumentSet = newArgumentSet; - // Return the list of arguments that created dependencies with the new computation; - return new ArrayList<>(dependencies); + public List getArgumentList() { + return argumentList; } /** @@ -113,7 +85,7 @@ public List computeDependencies(GrCUDAComputationa * @return if the computation could lead to future dependencies */ public boolean hasPossibleDependencies() { - return !this.activeArgumentSet.isEmpty(); + return !this.dependencyComputation.getActiveArgumentSet().isEmpty(); } /** @@ -192,18 +164,28 @@ protected void associateArraysToStreamImpl() {} * Set for all the {@link com.nvidia.grcuda.array.AbstractArray} in the computation if this computation is an array access; */ public void updateIsComputationArrayAccess() { - for (ComputationArgumentWithValue o : this.argumentSet) { + for (ComputationArgumentWithValue o : this.argumentList) { if (o.getArgumentValue() instanceof AbstractArray) { ((AbstractArray) o.getArgumentValue()).setLastComputationArrayAccess(isComputationArrayAccess); } } } + /** + * Computes if the "other" GrCUDAComputationalElement has dependencies w.r.t. this kernel, + * such as requiring as input a value computed by this kernel; + * @param other kernel for which we want to check dependencies, w.r.t. this kernel + * @return the list of arguments that the two kernels have in common + */ + public Collection computeDependencies(GrCUDAComputationalElement other) { + return this.dependencyComputation.computeDependencies(other); + } + /** * The default initializer will simply store all the arguments, * and consider each of them in the dependency computations; */ - private static class DefaultExecutionInitializer implements InitializeArgumentSet { + private static class DefaultExecutionInitializer implements InitializeArgumentList { private final List args; DefaultExecutionInitializer(List args) { @@ -211,8 +193,79 @@ private static class DefaultExecutionInitializer implements InitializeArgumentSe } @Override - public Set initialize() { - return new HashSet<>(args); + public List initialize() { + return args; + } + } + + /** + * By default, consider all dependencies in the active argument set, + * initially specified by the {@link InitializeArgumentList} interface. + * Also update the active argument set, by adding all arguments that were not included in a dependency relation; + */ + private static class DefaultDependencyComputation extends DependencyComputation { + + @CompilerDirectives.TruffleBoundary + DefaultDependencyComputation(List argumentList) { + activeArgumentSet = new HashSet<>(argumentList); + } + + @CompilerDirectives.TruffleBoundary + @Override + public List computeDependencies(GrCUDAComputationalElement other) { + Set dependencies = new HashSet<>(); + Set newArgumentSet = new HashSet<>(); + for (ComputationArgumentWithValue arg : activeArgumentSet) { + // The other computation requires the current argument, so we have found a new dependency; + if (other.dependencyComputation.getActiveArgumentSet().contains(arg)) { + dependencies.add(arg); + } else { + // Otherwise, the current argument is still "active", and could enforce a dependency on a future computation; + newArgumentSet.add(arg); + } + } + // Arguments that are not leading to a new dependency could still create new dependencies later on! + activeArgumentSet = newArgumentSet; + // Return the list of arguments that created dependencies with the new computation; + return new ArrayList<>(dependencies); + } + } + + /** + * If two computations have the same argument, but it is read-only in both cases (i.e. const), + * there is no reason to create a dependency between the two ; + */ + private class WithConstDependencyComputation extends DependencyComputation { + + WithConstDependencyComputation(List argumentList) { + activeArgumentSet = new ArrayList<>(argumentList); + } + + @Override + public List computeDependencies(GrCUDAComputationalElement other) { + List dependencies = new ArrayList<>(); + // FIXME: the active argument set could be something else, e.g. a collection? + // it might make sense to have different types depending on how dependencies are computed; + List newArgumentSet = new ArrayList<>(); + for (ComputationArgumentWithValue arg : activeArgumentSet) { + boolean dependencyFound = false; + for (ComputationArgumentWithValue otherArg : other.dependencyComputation.getActiveArgumentSet()) { + // If both arguments are const, we skip the dependency; + if (arg.equals(otherArg) && !(arg.isConst() && otherArg.isConst())) { + dependencies.add(arg); + dependencyFound = true; + break; + } + } + if (!dependencyFound) { + // Otherwise, the current argument is still "active", and could enforce a dependency on a future computation; + newArgumentSet.add(arg); + } + } + // Arguments that are not leading to a new dependency could still create new dependencies later on! + activeArgumentSet = newArgumentSet; + // Return the list of arguments that created dependencies with the new computation; + return dependencies; } } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentList.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentList.java new file mode 100644 index 00000000..a5cc6aae --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentList.java @@ -0,0 +1,12 @@ +package com.nvidia.grcuda.gpu.computation; + +import java.util.List; + +public interface InitializeArgumentList { + /** + * Used by different {@link GrCUDAComputationalElement} to initialize the list of arguments + * considered in the dependency evaluation. + * @return a list of arguments used in the evaluation + */ + List initialize(); +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java deleted file mode 100644 index 3af47ca6..00000000 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/InitializeArgumentSet.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.nvidia.grcuda.gpu.computation; - -import java.util.Set; - -public interface InitializeArgumentSet { - /** - * Used by different {@link GrCUDAComputationalElement} to initialize the set of arguments - * considered in the dependency evaluation. - * @return a set of arguments used in the evaluation - */ - Set initialize(); -} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index d53b1f6f..03f88245 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -10,7 +10,7 @@ import com.nvidia.grcuda.gpu.stream.CUDAStream; import java.util.Arrays; -import java.util.Set; +import java.util.List; import java.util.stream.Collectors; /** @@ -99,7 +99,7 @@ public String toString() { "]" + "; stream=" + this.getStream().getStreamNumber(); } - static class KernelExecutionInitializer implements InitializeArgumentSet { + static class KernelExecutionInitializer implements InitializeArgumentList { private final Kernel kernel; private final KernelArguments args; @@ -109,11 +109,11 @@ static class KernelExecutionInitializer implements InitializeArgumentSet { } @Override - public Set initialize() { + public List initialize() { // TODO: what aboout scalars? We cannot treat them in the same way, as they are copied and not referenced // There should be a semantic to manually specify scalar dependencies? For now we have to skip them; return this.args.getKernelArgumentWithValues().stream() - .filter(ComputationArgument::isArray).collect(Collectors.toSet()); + .filter(ComputationArgument::isArray).collect(Collectors.toList()); } } } From 2295d914a656f44eab948071707df2aec7b1e3c7 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 1 May 2020 14:03:04 +0200 Subject: [PATCH 046/236] added separate dependency builder --- .../grcuda/test/gpu/ExecutionDAGTest.java | 4 +- .../src/com/nvidia/grcuda/GrCUDAContext.java | 24 +++++- .../GrCUDAComputationalElement.java | 84 ++----------------- .../DefaultDependencyComputation.java | 48 +++++++++++ .../DefaultDependencyComputationBuilder.java | 13 +++ .../DependencyComputation.java | 5 +- .../DependencyComputationBuilder.java | 9 ++ .../DependencyPolicyEnum.java | 2 +- .../WithConstDependencyComputation.java | 45 ++++++++++ ...WithConstDependencyComputationBuilder.java | 13 +++ .../AbstractGrCUDAExecutionContext.java | 16 +++- .../GrCUDAExecutionContext.java | 13 +-- .../SyncGrCUDAExecutionContext.java | 9 +- 13 files changed, 189 insertions(+), 96 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputationBuilder.java rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/{ => dependency}/DependencyComputation.java (88%) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputationBuilder.java rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/{ => dependency}/DependencyPolicyEnum.java (82%) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputationBuilder.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index a1b3dd04..db84fb5b 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -8,6 +8,7 @@ import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; +import com.nvidia.grcuda.gpu.computation.dependency.DefaultDependencyComputationBuilder; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; @@ -71,7 +72,8 @@ public MockArgument(Object value, boolean isConst, boolean isArray) { */ public static class GrCUDAExecutionContextTest extends GrCUDAExecutionContext { public GrCUDAExecutionContextTest() { - super(null, null, new GrCUDAStreamManagerTest(null)); + super(null, null, + new GrCUDAStreamManagerTest(null), new DefaultDependencyComputationBuilder()); } public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index 7128c197..7dff79cf 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -39,7 +39,10 @@ import com.nvidia.grcuda.functions.map.MapFunction; import com.nvidia.grcuda.functions.map.ShredFunction; import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.computation.DependencyPolicyEnum; +import com.nvidia.grcuda.gpu.computation.dependency.DefaultDependencyComputationBuilder; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; +import com.nvidia.grcuda.gpu.computation.dependency.WithConstDependencyComputationBuilder; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.ExecutionPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; @@ -79,19 +82,32 @@ public GrCUDAContext(Env env) { // Retrieve the dependency computation policy; DependencyPolicyEnum dependencyPolicy = parseDependencyPolicy(env.getOptions().get(GrCUDAOptions.DependencyPolicy)); + System.out.println("-- using " + dependencyPolicy.getName() + " dependency policy"); + DependencyComputationBuilder dependencyBuilder; + switch (dependencyPolicy) { + case WITH_CONST: + dependencyBuilder = new WithConstDependencyComputationBuilder(); + break; + case DEFAULT: + dependencyBuilder = new DefaultDependencyComputationBuilder(); + break; + default: + dependencyBuilder = new DefaultDependencyComputationBuilder(); + } + // Retrieve the execution policy; ExecutionPolicyEnum executionPolicy = parseExecutionPolicy(env.getOptions().get(GrCUDAOptions.ExecutionPolicy)); // Initialize the execution policy; System.out.println("-- using " + executionPolicy.getName() + " execution policy"); switch (executionPolicy) { case SYNC: - this.grCUDAExecutionContext = new SyncGrCUDAExecutionContext(this, env); + this.grCUDAExecutionContext = new SyncGrCUDAExecutionContext(this, env, dependencyBuilder); break; case DEFAULT: - this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env); + this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env ,dependencyBuilder); break; default: - this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env); + this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env, dependencyBuilder); } Namespace namespace = new Namespace(ROOT_NAMESPACE); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index f4037e50..fbd8c0eb 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -1,18 +1,15 @@ package com.nvidia.grcuda.gpu.computation; import com.nvidia.grcuda.array.AbstractArray; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputation; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.DefaultStream; -import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.interop.UnsupportedTypeException; -import java.util.ArrayList; import java.util.Collection; -import java.util.HashSet; import java.util.List; -import java.util.Set; /** * Basic class that represents GrCUDA computations, @@ -57,12 +54,11 @@ public abstract class GrCUDAComputationalElement { * @param grCUDAExecutionContext execution context in which this computational element will be scheduled * @param initializer the initializer used to build the internal set of arguments considered in the dependency computation */ - @CompilerDirectives.TruffleBoundary public GrCUDAComputationalElement(AbstractGrCUDAExecutionContext grCUDAExecutionContext, InitializeArgumentList initializer) { this.argumentList = initializer.initialize(); // Initialize by making a copy of the original set; this.grCUDAExecutionContext = grCUDAExecutionContext; - this.dependencyComputation = new DefaultDependencyComputation(this.argumentList); + this.dependencyComputation = grCUDAExecutionContext.getDependencyBuilder().initialize(this.argumentList); } /** @@ -160,6 +156,11 @@ public final void associateArraysToStream() { */ protected void associateArraysToStreamImpl() {} + /** + * Retrieve how the dependency computations are computed; + */ + public DependencyComputation getDependencyComputation() { return dependencyComputation; } + /** * Set for all the {@link com.nvidia.grcuda.array.AbstractArray} in the computation if this computation is an array access; */ @@ -197,75 +198,4 @@ public List initialize() { return args; } } - - /** - * By default, consider all dependencies in the active argument set, - * initially specified by the {@link InitializeArgumentList} interface. - * Also update the active argument set, by adding all arguments that were not included in a dependency relation; - */ - private static class DefaultDependencyComputation extends DependencyComputation { - - @CompilerDirectives.TruffleBoundary - DefaultDependencyComputation(List argumentList) { - activeArgumentSet = new HashSet<>(argumentList); - } - - @CompilerDirectives.TruffleBoundary - @Override - public List computeDependencies(GrCUDAComputationalElement other) { - Set dependencies = new HashSet<>(); - Set newArgumentSet = new HashSet<>(); - for (ComputationArgumentWithValue arg : activeArgumentSet) { - // The other computation requires the current argument, so we have found a new dependency; - if (other.dependencyComputation.getActiveArgumentSet().contains(arg)) { - dependencies.add(arg); - } else { - // Otherwise, the current argument is still "active", and could enforce a dependency on a future computation; - newArgumentSet.add(arg); - } - } - // Arguments that are not leading to a new dependency could still create new dependencies later on! - activeArgumentSet = newArgumentSet; - // Return the list of arguments that created dependencies with the new computation; - return new ArrayList<>(dependencies); - } - } - - /** - * If two computations have the same argument, but it is read-only in both cases (i.e. const), - * there is no reason to create a dependency between the two ; - */ - private class WithConstDependencyComputation extends DependencyComputation { - - WithConstDependencyComputation(List argumentList) { - activeArgumentSet = new ArrayList<>(argumentList); - } - - @Override - public List computeDependencies(GrCUDAComputationalElement other) { - List dependencies = new ArrayList<>(); - // FIXME: the active argument set could be something else, e.g. a collection? - // it might make sense to have different types depending on how dependencies are computed; - List newArgumentSet = new ArrayList<>(); - for (ComputationArgumentWithValue arg : activeArgumentSet) { - boolean dependencyFound = false; - for (ComputationArgumentWithValue otherArg : other.dependencyComputation.getActiveArgumentSet()) { - // If both arguments are const, we skip the dependency; - if (arg.equals(otherArg) && !(arg.isConst() && otherArg.isConst())) { - dependencies.add(arg); - dependencyFound = true; - break; - } - } - if (!dependencyFound) { - // Otherwise, the current argument is still "active", and could enforce a dependency on a future computation; - newArgumentSet.add(arg); - } - } - // Arguments that are not leading to a new dependency could still create new dependencies later on! - activeArgumentSet = newArgumentSet; - // Return the list of arguments that created dependencies with the new computation; - return dependencies; - } - } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java new file mode 100644 index 00000000..751f5abb --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java @@ -0,0 +1,48 @@ +package com.nvidia.grcuda.gpu.computation.dependency; + +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.computation.InitializeArgumentList; +import com.oracle.truffle.api.CompilerDirectives; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * By default, consider all dependencies in the active argument set, + * initially specified by the {@link InitializeArgumentList} interface. + * Also update the active argument set, by adding all arguments that were not included in a dependency relation; + */ +public class DefaultDependencyComputation extends DependencyComputation { + + @CompilerDirectives.TruffleBoundary + DefaultDependencyComputation(List argumentList) { + activeArgumentSet = new HashSet<>(argumentList); + } + + static DefaultDependencyComputation initialize(List argumentList) { + return new DefaultDependencyComputation(argumentList); + } + + @CompilerDirectives.TruffleBoundary + @Override + public List computeDependencies(GrCUDAComputationalElement other) { + Set dependencies = new HashSet<>(); + Set newArgumentSet = new HashSet<>(); + for (ComputationArgumentWithValue arg : activeArgumentSet) { + // The other computation requires the current argument, so we have found a new dependency; + if (other.getDependencyComputation().getActiveArgumentSet().contains(arg)) { + dependencies.add(arg); + } else { + // Otherwise, the current argument is still "active", and could enforce a dependency on a future computation; + newArgumentSet.add(arg); + } + } + // Arguments that are not leading to a new dependency could still create new dependencies later on! + activeArgumentSet = newArgumentSet; + // Return the list of arguments that created dependencies with the new computation; + return new ArrayList<>(dependencies); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputationBuilder.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputationBuilder.java new file mode 100644 index 00000000..4fe9b85c --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputationBuilder.java @@ -0,0 +1,13 @@ +package com.nvidia.grcuda.gpu.computation.dependency; + +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; + +import java.util.List; + +public class DefaultDependencyComputationBuilder implements DependencyComputationBuilder { + + @Override + public DefaultDependencyComputation initialize(List argumentList) { + return new DefaultDependencyComputation(argumentList); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java similarity index 88% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyComputation.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java index 4df24773..a2a2ba25 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyComputation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java @@ -1,4 +1,7 @@ -package com.nvidia.grcuda.gpu.computation; +package com.nvidia.grcuda.gpu.computation.dependency; + +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import java.util.Collection; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputationBuilder.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputationBuilder.java new file mode 100644 index 00000000..28bf3304 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputationBuilder.java @@ -0,0 +1,9 @@ +package com.nvidia.grcuda.gpu.computation.dependency; + +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; + +import java.util.List; + +public interface DependencyComputationBuilder { + DependencyComputation initialize(List argumentList); +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyPolicyEnum.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyPolicyEnum.java similarity index 82% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyPolicyEnum.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyPolicyEnum.java index f0ac6d78..0d6ebecf 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DependencyPolicyEnum.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyPolicyEnum.java @@ -1,4 +1,4 @@ -package com.nvidia.grcuda.gpu.computation; +package com.nvidia.grcuda.gpu.computation.dependency; public enum DependencyPolicyEnum { DEFAULT("default"), diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java new file mode 100644 index 00000000..b20341fc --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java @@ -0,0 +1,45 @@ +package com.nvidia.grcuda.gpu.computation.dependency; + +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; + +import java.util.ArrayList; +import java.util.List; + +/** + * If two computations have the same argument, but it is read-only in both cases (i.e. const), + * there is no reason to create a dependency between the two ; + */ +public class WithConstDependencyComputation extends DependencyComputation { + + WithConstDependencyComputation(List argumentList) { + activeArgumentSet = new ArrayList<>(argumentList); + } + + @Override + public List computeDependencies(GrCUDAComputationalElement other) { + List dependencies = new ArrayList<>(); + // FIXME: the active argument set could be something else, e.g. a collection? + // it might make sense to have different types depending on how dependencies are computed; + List newArgumentSet = new ArrayList<>(); + for (ComputationArgumentWithValue arg : activeArgumentSet) { + boolean dependencyFound = false; + for (ComputationArgumentWithValue otherArg : other.getDependencyComputation().getActiveArgumentSet()) { + // If both arguments are const, we skip the dependency; + if (arg.equals(otherArg) && !(arg.isConst() && otherArg.isConst())) { + dependencies.add(arg); + dependencyFound = true; + break; + } + } + if (!dependencyFound) { + // Otherwise, the current argument is still "active", and could enforce a dependency on a future computation; + newArgumentSet.add(arg); + } + } + // Arguments that are not leading to a new dependency could still create new dependencies later on! + activeArgumentSet = newArgumentSet; + // Return the list of arguments that created dependencies with the new computation; + return dependencies; + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputationBuilder.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputationBuilder.java new file mode 100644 index 00000000..0d8f4fe6 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputationBuilder.java @@ -0,0 +1,13 @@ +package com.nvidia.grcuda.gpu.computation.dependency; + +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; + +import java.util.List; + +public class WithConstDependencyComputationBuilder implements DependencyComputationBuilder { + + @Override + public WithConstDependencyComputation initialize(List argumentList) { + return new WithConstDependencyComputation(argumentList); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java index d0c1dc2c..cb6aaed9 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java @@ -7,6 +7,7 @@ import com.nvidia.grcuda.gpu.Kernel; import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.interop.UnsupportedTypeException; @@ -40,12 +41,19 @@ public abstract class AbstractGrCUDAExecutionContext { */ protected final ExecutionDAG dag = new ExecutionDAG(); - public AbstractGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { + /** + * Reference to how dependencies between computational elements are computed within this execution context; + */ + private final DependencyComputationBuilder dependencyBuilder; + + public AbstractGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyComputationBuilder dependencyBuilder) { this.cudaRuntime = new CUDARuntime(context, env); + this.dependencyBuilder = dependencyBuilder; } - public AbstractGrCUDAExecutionContext(CUDARuntime cudaRuntime) { + public AbstractGrCUDAExecutionContext(CUDARuntime cudaRuntime, DependencyComputationBuilder dependencyBuilder) { this.cudaRuntime = cudaRuntime; + this.dependencyBuilder = dependencyBuilder; } /** @@ -71,6 +79,10 @@ public CUDARuntime getCudaRuntime() { return cudaRuntime; } + public DependencyComputationBuilder getDependencyBuilder() { + return dependencyBuilder; + } + // Functions used to interface directly with the CUDA runtime; public Kernel loadKernel(String cubinFile, String kernelName, String signature) { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java index 5d78562f..cb73c3d8 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java @@ -5,6 +5,7 @@ import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.interop.UnsupportedTypeException; @@ -25,16 +26,16 @@ public class GrCUDAExecutionContext extends AbstractGrCUDAExecutionContext { */ private final GrCUDAThreadManager threadManager; - public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { - this(new CUDARuntime(context, env), new GrCUDAThreadManager(context)); + public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyComputationBuilder dependencyBuilder) { + this(new CUDARuntime(context, env), new GrCUDAThreadManager(context), dependencyBuilder); } - public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager) { - this(cudaRuntime, threadManager, new GrCUDAStreamManager(cudaRuntime)); + public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, DependencyComputationBuilder dependencyBuilder) { + this(cudaRuntime, threadManager, new GrCUDAStreamManager(cudaRuntime), dependencyBuilder); } - public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, GrCUDAStreamManager streamManager) { - super(cudaRuntime); + public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, GrCUDAStreamManager streamManager, DependencyComputationBuilder dependencyBuilder) { + super(cudaRuntime, dependencyBuilder); this.threadManager = threadManager; this.streamManager = streamManager; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java index 4d9a4beb..b85c5101 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java @@ -3,6 +3,7 @@ import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.interop.UnsupportedTypeException; @@ -11,12 +12,12 @@ */ public class SyncGrCUDAExecutionContext extends AbstractGrCUDAExecutionContext { - public SyncGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env) { - super(context, env); + public SyncGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyComputationBuilder dependencyBuilder) { + super(context, env, dependencyBuilder); } - public SyncGrCUDAExecutionContext(CUDARuntime cudaRuntime) { - super(cudaRuntime); + public SyncGrCUDAExecutionContext(CUDARuntime cudaRuntime, DependencyComputationBuilder dependencyBuilder) { + super(cudaRuntime, dependencyBuilder); } /** From 679feb7e0e08a914cebdcc242bc947246fe24de5 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 3 May 2020 11:52:39 +0200 Subject: [PATCH 047/236] removed kernels using manual streams from dag scheduling --- .../nvidia/grcuda/test/CreateStreamTest.java | 5 + .../nvidia/grcuda/test/StreamAttachTest.java | 19 +- .../grcuda/test/gpu/ExecutionDAGTest.java | 84 +---- .../WithConstDependencyComputationTest.java | 296 ++++++++++++++++++ .../gpu/stream/GrCUDAStreamManagerTest.java | 60 ++-- .../test/mock/GrCUDAExecutionContextTest.java | 37 +++ .../test/mock/GrCUDAStreamManagerTest.java | 44 +++ .../grcuda/test/mock/KernelExecutionTest.java | 28 ++ .../nvidia/grcuda/test/mock/MockArgument.java | 18 ++ .../nvidia/grcuda/gpu/ConfiguredKernel.java | 7 +- .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 16 +- .../WithConstDependencyComputation.java | 7 +- .../gpu/stream/GrCUDAStreamManager.java | 35 ++- 13 files changed, 535 insertions(+), 121 deletions(-) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextTest.java create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionTest.java create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MockArgument.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java index 6d42e874..2d06ccbe 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CreateStreamTest.java @@ -79,6 +79,11 @@ public void useStreamTest() { // Set the custom stream; Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream); configuredSquareKernel.execute(x, numElements); + + // Wait for the computations to end; + Value syncStream = context.eval("grcuda", "cudaDeviceSynchronize"); + syncStream.execute(); + for (int i = 0; i < numElements; i++) { assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/StreamAttachTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/StreamAttachTest.java index daa3e1fa..d3432a73 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/StreamAttachTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/StreamAttachTest.java @@ -169,6 +169,8 @@ public void useAttachedStreamTest() { // Execute the kernel on the custom stream; Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream); configuredSquareKernel.execute(x, numElements); + streamSync.execute(stream); + for (int i = 0; i < numElements; i++) { assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); } @@ -217,7 +219,15 @@ public void useTwoStreamsTest() { Value configuredSquareKernel2 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream2); configuredSquareKernel2.execute(y, numElements); - for (int i = 0; i < numElements; i++) { + // Sync just one stream before accessing the dataM + Value syncStream = context.eval("grcuda", "cudaStreamSynchronize"); + syncStream.execute(stream1); + assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.01); + syncStream.execute(stream2); + assertEquals(16.0, y.getArrayElement(0).asFloat(), 0.01); + + // Check the other values; + for (int i = 1; i < numElements; i++) { assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); assertEquals(16.0, y.getArrayElement(i).asFloat(), 0.01); } @@ -292,12 +302,14 @@ public void useDefaultAttachedStreamTest() { // Build the kernel; Value buildkernel = context.eval("grcuda", "buildkernel"); Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + for (int i = 0; i < numElements; ++i) { x.setArrayElement(i, 2.0); } // Execute the kernel on the custom stream; Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream); configuredSquareKernel.execute(x, numElements); + streamSync.execute(stream); for (int i = 0; i < numElements; i++) { assertEquals(4.0, x.getArrayElement(i).asFloat(), 0.01); @@ -307,6 +319,8 @@ public void useDefaultAttachedStreamTest() { streamAttach.execute(stream, x, 0x01); configuredSquareKernel.execute(x, numElements); + streamSync.execute(stream); + for (int i = 0; i < numElements; i++) { assertEquals(16.0, x.getArrayElement(i).asFloat(), 0.01); } @@ -316,6 +330,9 @@ public void useDefaultAttachedStreamTest() { Value configuredSquareKernel2 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); configuredSquareKernel2.execute(x, numElements); + Value deviceSync = context.eval("grcuda", "cudaDeviceSynchronize"); + deviceSync.execute(); + for (int i = 0; i < numElements; i++) { assertEquals(256, x.getArrayElement(i).asFloat(), 0.01); } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index db84fb5b..d1a9d48d 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,17 +1,10 @@ package com.nvidia.grcuda.test.gpu; -import com.nvidia.grcuda.NoneValue; -import com.nvidia.grcuda.gpu.ArgumentType; -import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.ExecutionDAG; -import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; -import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; -import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; -import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; -import com.nvidia.grcuda.gpu.computation.dependency.DefaultDependencyComputationBuilder; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; -import com.nvidia.grcuda.gpu.stream.CUDAStream; -import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; +import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextTest; +import com.nvidia.grcuda.test.mock.KernelExecutionTest; +import com.nvidia.grcuda.test.mock.MockArgument; import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; @@ -20,7 +13,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; -import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -29,76 +21,6 @@ public class ExecutionDAGTest { - /** - * Mock class to test the DAG execution; - */ - public static class KernelExecutionTest extends GrCUDAComputationalElement { -// public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { -// super(grCUDAExecutionContext, args.stream() -// .map(a -> new ComputationArgumentWithValue(ArgumentType.POINTER, true, false, a)) -// .collect(Collectors.toList())); -// } - - public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { - super(grCUDAExecutionContext, args); - } - - @Override - public Object execute() { return NoneValue.get(); } - - @Override - public boolean canUseStream() { return true; } - - @Override - public void associateArraysToStreamImpl() { } - } - - public static class MockArgument extends ComputationArgumentWithValue { - public MockArgument(Object value) { - super(ArgumentType.POINTER, true, false, value); - } - - public MockArgument(Object value, boolean isConst) { - super(ArgumentType.POINTER, true, isConst, value); - } - - public MockArgument(Object value, boolean isConst, boolean isArray) { - super(ArgumentType.POINTER, isArray, isConst, value); - } - } - - /** - * Mock class to test the GrCUDAExecutionContextTest, it has a null CUDARuntime; - */ - public static class GrCUDAExecutionContextTest extends GrCUDAExecutionContext { - public GrCUDAExecutionContextTest() { - super(null, null, - new GrCUDAStreamManagerTest(null), new DefaultDependencyComputationBuilder()); - } - - public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { - return new PrePascalArrayStreamAssociation(); - } - } - - public static class GrCUDAStreamManagerTest extends GrCUDAStreamManager { - GrCUDAStreamManagerTest(CUDARuntime runtime) { super(runtime); } - - int numStreams = 0; - - @Override - public CUDAStream createStream() { - CUDAStream newStream = new CUDAStream(0, numStreams++); - streams.add(newStream); - return newStream; - } - - @Override - public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { - - } - } - @Test public void executionDAGConstructorTest() { ExecutionDAG dag = new ExecutionDAG(); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java new file mode 100644 index 00000000..76c8706e --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -0,0 +1,296 @@ +package com.nvidia.grcuda.test.gpu.executioncontext; + +import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.computation.dependency.WithConstDependencyComputationBuilder; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; +import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextTest; +import com.nvidia.grcuda.test.mock.KernelExecutionTest; +import com.nvidia.grcuda.test.mock.MockArgument; +import com.oracle.truffle.api.interop.UnsupportedTypeException; +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Value; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class WithConstDependencyComputationTest { + + @Test + public void addVertexToDAGTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); + // Create two mock kernel executions; + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1, true), new MockArgument(2))).schedule(); + + ExecutionDAG dag = context.getDag(); + + assertEquals(1, dag.getNumVertices()); + assertEquals(0, dag.getNumEdges()); + assertEquals(1, dag.getFrontier().size()); + assertTrue(dag.getFrontier().get(0).isFrontier()); + assertTrue(dag.getFrontier().get(0).isStart()); + + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1, true), new MockArgument(3))).schedule(); + + assertEquals(2, dag.getNumVertices()); + assertEquals(0, dag.getNumEdges()); + assertEquals(2, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(dag.getVertices().get(0), dag.getFrontier().get(0)); + assertEquals(dag.getVertices().get(1), dag.getFrontier().get(1)); + assertTrue(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(1).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertTrue(dag.getVertices().get(1).isStart()); + // Check that no children or parents are present; + assertEquals(0, dag.getVertices().get(0).getChildVertices().size()); + assertEquals(0, dag.getVertices().get(1).getParentVertices().size()); + } + + + @Test + public void dependencyPipelineSimpleMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); + // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, + // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), + // and kernel 4 (argument "3" is active); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1, true))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1, true))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(4, dag.getNumVertices()); + assertEquals(3, dag.getNumEdges()); + assertEquals(2, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3))), + new HashSet<>(dag.getFrontier())); + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertTrue(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertFalse(dag.getVertices().get(2).isStart()); + assertTrue(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + // Check if the third vertex is a child of first and second; + assertEquals(2, dag.getVertices().get(2).getParents().size()); + assertEquals(new HashSet<>(dag.getVertices().get(2).getParentVertices()), + new HashSet<>(Arrays.asList(dag.getVertices().get(0), dag.getVertices().get(1)))); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(0).getChildVertices().get(0)); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(1).getChildVertices().get(0)); + // Check if the fourth vertex is a child of the third; + assertEquals(1, dag.getVertices().get(3).getParents().size()); + assertEquals(1, dag.getVertices().get(2).getChildren().size()); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(3).getParentVertices().get(0)); + assertEquals(dag.getVertices().get(3), dag.getVertices().get(2).getChildVertices().get(0)); + } + + @Test + public void forkedComputationTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); + + // A(1) --> B(1R) + // \-> C(1R) + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1, true))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1, true))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(3, dag.getNumVertices()); + assertEquals(2, dag.getNumEdges()); +// assertEquals(2, dag.getFrontier().size()); + +// assertFalse(dag.getVertices().get(0).isFrontier()); +// assertTrue(dag.getVertices().get(0).isStart()); +// assertTrue(dag.getVertices().get(1).isFrontier()); +// assertFalse(dag.getVertices().get(1).isStart()); +// assertTrue(dag.getVertices().get(2).isFrontier()); +// assertTrue(dag.getVertices().get(2).isStart()); +// +// assertEquals(dag.getVertices().get(0), dag.getVertices().get(1).getParentVertices().get(0)); +// assertEquals(0, dag.getVertices().get(2).getParentVertices().size()); +// assertFalse(dag.getVertices().get(2).getParentVertices().contains(dag.getVertices().get(1))); +// assertFalse(dag.getVertices().get(1).getChildVertices().contains(dag.getVertices().get(2))); + + // Add a fourth computation that depends on both B and C, and depends on both; + // A(1) -> B(1R) -> D(1) + // C(1R) / + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + assertEquals(4, dag.getNumVertices()); + assertEquals(3, dag.getNumEdges()); + assertEquals(1, dag.getFrontier().size()); + } + + @Test + public void complexFrontierMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); + + // A(1R,2) -> B(1) -> D(1R,3) + // \----> C(2R) \----> E(1R,4) -> F(4) + // The final frontier is composed by C(2), D(1, 3), E(1), F(4); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2, true))).schedule(); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(3))).schedule(); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(4))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(6, dag.getNumVertices()); + assertEquals(5, dag.getNumEdges()); + assertEquals(4, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3), dag.getVertices().get(4), dag.getVertices().get(5))), + new HashSet<>(dag.getFrontier())); + + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertFalse(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertFalse(dag.getVertices().get(2).isStart()); + assertTrue(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + assertTrue(dag.getVertices().get(4).isFrontier()); + assertFalse(dag.getVertices().get(4).isStart()); + assertTrue(dag.getVertices().get(5).isFrontier()); + assertFalse(dag.getVertices().get(5).isStart()); + // Check that D is a child of B and C and D are not connected; + assertEquals(dag.getVertices().get(1), dag.getVertices().get(3).getParentVertices().get(0)); + assertFalse(dag.getVertices().get(3).getParentVertices().contains(dag.getVertices().get(2))); + assertFalse(dag.getVertices().get(2).getChildVertices().contains(dag.getVertices().get(3))); + } + + private static final int NUM_THREADS_PER_BLOCK = 128; + + private static final String SQUARE_KERNEL = + "extern \"C\" __global__ void square(const float* x, float *y, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " y[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + + private static final String DIFF_KERNEL = + "extern \"C\" __global__ void diff(const float* x, const float* y, float* z, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " z[idx] = x[idx] - y[idx];\n" + + " }\n" + + "}"; + + private static final String REDUCE_KERNEL = + "extern \"C\" __global__ void reduce(const float *x, float *res, int n) {\n" + + " __shared__ float cache[" + NUM_THREADS_PER_BLOCK + "];\n" + + " int i = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (i < n) {\n" + + " cache[threadIdx.x] = x[i];\n" + + " }\n" + + " __syncthreads();\n" + + " i = " + NUM_THREADS_PER_BLOCK + " / 2;\n" + + " while (i > 0) {\n" + + " if (threadIdx.x < i) {\n" + + " cache[threadIdx.x] += cache[threadIdx.x + i];\n" + + " }\n" + + " __syncthreads();\n" + + " i /= 2;\n" + + " }\n" + + " if (threadIdx.x == 0) {\n" + + " atomicAdd(res, cache[0]);\n" + + " }\n" + + "}"; + + @Test + public void dependencyPipelineSimpleTest() { + + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + + final int numElements = 10; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); + + assertNotNull(squareKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, y, numElements); + configuredSquareKernel.execute(x, z, numElements); + + // Verify the output; + assertEquals(4.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineSimple2Test() { + + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + + // FIXME: this test fails randomly with small values (< 100000, more or less), + // but the same computation doesn't fail in Graalpython. + final int numElements = 100000; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value w = deviceArrayConstructor.execute("float", numElements); + Value res = deviceArrayConstructor.execute("float", 1); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 1.0 / (i + 1)); + } + res.setArrayElement(0, 0.0); + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "const pointer, const pointer, pointer, sint32"); + Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "const pointer, pointer, sint32"); + assertNotNull(squareKernel); + assertNotNull(diffKernel); + assertNotNull(reduceKernel); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, y, numElements); + configuredSquareKernel.execute(x, z, numElements); + configuredDiffKernel.execute(y, z, w, numElements); + configuredReduceKernel.execute(w, res, numElements); + + // Verify the output; + float resScalar = res.getArrayElement(0).asFloat(); + assertEquals(-4.93, resScalar, 0.01); + } + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 4d49a6dd..a0393554 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -2,7 +2,9 @@ import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; -import com.nvidia.grcuda.test.gpu.ExecutionDAGTest; +import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextTest; +import com.nvidia.grcuda.test.mock.KernelExecutionTest; +import com.nvidia.grcuda.test.mock.MockArgument; import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.junit.Test; @@ -14,17 +16,17 @@ public class GrCUDAStreamManagerTest { @Test public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new ExecutionDAGTest.GrCUDAExecutionContextTest(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(1))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(2))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, - Arrays.asList(new ExecutionDAGTest.MockArgument(1), - new ExecutionDAGTest.MockArgument(2), - new ExecutionDAGTest.MockArgument(3))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(3))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), + new MockArgument(2), + new MockArgument(3))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(3))).schedule(); ExecutionDAG dag = context.getDag(); @@ -38,20 +40,20 @@ public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { @Test public void streamSelectionMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new ExecutionDAGTest.GrCUDAExecutionContextTest(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // \----> C(2) // The final frontier is composed by C(2), D(3), E(1), F(4); - new ExecutionDAGTest.KernelExecutionTest(context, - Arrays.asList(new ExecutionDAGTest.MockArgument(1), new ExecutionDAGTest.MockArgument(2))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(1))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(2))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, - Arrays.asList(new ExecutionDAGTest.MockArgument(1), new ExecutionDAGTest.MockArgument(2))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, - Arrays.asList(new ExecutionDAGTest.MockArgument(1), new ExecutionDAGTest.MockArgument(4))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(4))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(4))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); ExecutionDAG dag = context.getDag(); @@ -67,20 +69,20 @@ public void streamSelectionMockTest() throws UnsupportedTypeException { @Test public void streamSelection2MockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new ExecutionDAGTest.GrCUDAExecutionContextTest(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); // A(1,2) -> B(1) -> D(1,3) // \----> C(2) // E(4) -> F(4, 5) - new ExecutionDAGTest.KernelExecutionTest(context, - Arrays.asList(new ExecutionDAGTest.MockArgument(1), new ExecutionDAGTest.MockArgument(2))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(1))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(2))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, - Arrays.asList(new ExecutionDAGTest.MockArgument(1), new ExecutionDAGTest.MockArgument(3))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, Collections.singletonList(new ExecutionDAGTest.MockArgument(4))).schedule(); - new ExecutionDAGTest.KernelExecutionTest(context, - Arrays.asList(new ExecutionDAGTest.MockArgument(4), new ExecutionDAGTest.MockArgument(5))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(4), new MockArgument(5))).schedule(); ExecutionDAG dag = context.getDag(); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextTest.java new file mode 100644 index 00000000..9ec070f0 --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextTest.java @@ -0,0 +1,37 @@ +package com.nvidia.grcuda.test.mock; + +import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; +import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; +import com.nvidia.grcuda.gpu.computation.dependency.DefaultDependencyComputationBuilder; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; + +/** + * Mock class to test the GrCUDAExecutionContextTest, it has a null CUDARuntime; + */ +public class GrCUDAExecutionContextTest extends GrCUDAExecutionContext { + + public GrCUDAExecutionContextTest(boolean syncStream) { + super(null, null, + new GrCUDAStreamManagerTest(null, syncStream), new DefaultDependencyComputationBuilder()); + } + + public GrCUDAExecutionContextTest() { + super(null, null, + new GrCUDAStreamManagerTest(null), new DefaultDependencyComputationBuilder()); + } + + public GrCUDAExecutionContextTest(DependencyComputationBuilder dependencyBuilder) { + super(null, null, + new GrCUDAStreamManagerTest(null), dependencyBuilder); + } + + public GrCUDAExecutionContextTest(DependencyComputationBuilder dependencyBuilder, boolean syncStream) { + super(null, null, + new GrCUDAStreamManagerTest(null, syncStream), dependencyBuilder); + } + + public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { + return new PrePascalArrayStreamAssociation(); + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java new file mode 100644 index 00000000..37da5e5c --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java @@ -0,0 +1,44 @@ +package com.nvidia.grcuda.test.mock; + +import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; + +public class GrCUDAStreamManagerTest extends GrCUDAStreamManager { + GrCUDAStreamManagerTest(CUDARuntime runtime, boolean syncParents) { + super(runtime); + this.syncParents = syncParents; + } + + GrCUDAStreamManagerTest(CUDARuntime runtime) { + this(runtime, false); + } + + int numStreams = 0; + + final boolean syncParents; + + @Override + public CUDAStream createStream() { + CUDAStream newStream = new CUDAStream(0, numStreams++); + streams.add(newStream); + this.activeComputationsPerStream.put(newStream, 0); + return newStream; + } + + @Override + public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { + if (syncParents) { + vertex.getParentComputations().forEach(c -> { + // Synchronize computations that are not yet finished and can use streams; + if (!c.isComputationFinished() && c.canUseStream()) { + // Set the parent computations as finished; + c.setComputationFinished(); + // Decrement the active computation count; + decrementComputationCount(c.getStream()); + } + }); + } + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionTest.java new file mode 100644 index 00000000..6e8d878b --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionTest.java @@ -0,0 +1,28 @@ +package com.nvidia.grcuda.test.mock; + +import com.nvidia.grcuda.NoneValue; +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; + +import java.util.List; + +/** + * Mock class to test the DAG execution; + */ +public class KernelExecutionTest extends GrCUDAComputationalElement { + + public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { + super(grCUDAExecutionContext, args); + } + + @Override + public Object execute() { return NoneValue.get(); } + + @Override + public boolean canUseStream() { return true; } + + @Override + public void associateArraysToStreamImpl() { } +} + diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MockArgument.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MockArgument.java new file mode 100644 index 00000000..93534618 --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MockArgument.java @@ -0,0 +1,18 @@ +package com.nvidia.grcuda.test.mock; + +import com.nvidia.grcuda.gpu.ArgumentType; +import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; + +public class MockArgument extends ComputationArgumentWithValue { + public MockArgument(Object value) { + super(ArgumentType.POINTER, true, false, value); + } + + public MockArgument(Object value, boolean isConst) { + super(ArgumentType.POINTER, true, isConst, value); + } + + public MockArgument(Object value, boolean isConst, boolean isArray) { + super(ArgumentType.POINTER, isArray, isConst, value); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java index c8c9f218..8281515d 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ConfiguredKernel.java @@ -63,7 +63,12 @@ Object execute(Object[] arguments, @CachedLibrary(limit = "3") InteropLibrary doubleAccess) throws UnsupportedTypeException, ArityException { kernel.incrementLaunchCount(); try (KernelArguments args = kernel.createKernelArguments(arguments, int32Access, int64Access, doubleAccess)) { - new KernelExecution(this, args).schedule(); + // If using a manually specified stream, do not schedule it automatically, but execute it immediately; + if (!config.useCustomStream()) { + new KernelExecution(this, args).schedule(); + } else { + kernel.getGrCUDAExecutionContext().getCudaRuntime().cuLaunchKernel(kernel, config, args, config.getStream()); + } } return this; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index 4abb1ebe..bb417cf0 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -38,7 +38,7 @@ public DAGVertex append(GrCUDAComputationalElement kernel) { ////////////////////////////// // For each vertex in the frontier, compute dependencies of the vertex; - for (DAGVertex frontierVertex : frontier) { + for (DAGVertex frontierVertex : cleanedFrontier()) { Collection dependencies = computeDependencies(frontierVertex, newVertex); if (dependencies.size() > 0) { // Create a new edge between the two vertices (book-keeping is automatic); @@ -46,7 +46,7 @@ public DAGVertex append(GrCUDAComputationalElement kernel) { } } // Remove from the frontier vertices that no longer belong to it; - frontier = frontier.stream().filter(DAGVertex::isFrontier).collect(Collectors.toList()); + frontier = cleanedFrontier(); // Add the new vertex to the frontier if it has no children; if (newVertex.isFrontier()) { frontier.add(newVertex); @@ -75,7 +75,17 @@ public int getNumEdges() { } public List getFrontier() { - return frontier; + return cleanedFrontier(); + } + + /** + * Ensure that the internal representation of the frontier is up-to-date. + * Whether a vertex is part of the frontier can change dynamically (e.g. if a vertex computation is over), + * and we have to ensure that the "cached" internal frontier is up-to-date every time it is accessed; + * @return the updated DAG frontier + */ + private List cleanedFrontier() { + return frontier.stream().filter(DAGVertex::isFrontier).collect(Collectors.toList()); } @Override diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java index b20341fc..835475d3 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java @@ -19,8 +19,6 @@ public class WithConstDependencyComputation extends DependencyComputation { @Override public List computeDependencies(GrCUDAComputationalElement other) { List dependencies = new ArrayList<>(); - // FIXME: the active argument set could be something else, e.g. a collection? - // it might make sense to have different types depending on how dependencies are computed; List newArgumentSet = new ArrayList<>(); for (ComputationArgumentWithValue arg : activeArgumentSet) { boolean dependencyFound = false; @@ -29,6 +27,11 @@ public List computeDependencies(GrCUDAComputationa if (arg.equals(otherArg) && !(arg.isConst() && otherArg.isConst())) { dependencies.add(arg); dependencyFound = true; + // If the other argument is const, the current argument must be added to newArgumentSet + // as it could cause other dependencies in the future; + if (otherArg.isConst()) { + newArgumentSet.add(arg); + } break; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 37ec8ca6..e1e72be6 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -4,7 +4,9 @@ import com.nvidia.grcuda.gpu.ExecutionDAG; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class GrCUDAStreamManager { @@ -15,10 +17,15 @@ public class GrCUDAStreamManager { /** * Reference to the CUDA runtime that manages the streams; */ - protected CUDARuntime runtime; + protected final CUDARuntime runtime; + /** + * Track how many active computations each stream has, excluding the default stream; + */ + protected final Map activeComputationsPerStream; public GrCUDAStreamManager(CUDARuntime runtime) { this.runtime = runtime; + this.activeComputationsPerStream = new HashMap<>(); } /** @@ -27,8 +34,8 @@ public GrCUDAStreamManager(CUDARuntime runtime) { * @param vertex an input computation for which we want to assign a stream */ public void assignStream(ExecutionDAG.DAGVertex vertex) { - // If it has a manually specified stream, use it. If the computation cannot use customized streams, return immediately; - if (!vertex.getComputation().useManuallySpecifiedStream() && vertex.getComputation().canUseStream()) { + // If the computation cannot use customized streams, return immediately; + if (vertex.getComputation().canUseStream()) { CUDAStream stream; if (vertex.isStart()) { // Else, if the computation doesn't have parents, provide a new stream to it; @@ -43,6 +50,8 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { } // Set the stream; vertex.getComputation().setStream(stream); + // Update the computation counter; + incrementComputationCount(stream); // Associate all the arrays in the computation to the selected stream, // to enable CPU accesses on managed memory arrays currently not being used by the GPU. // This is required as on pre-Pascal GPUs all unified memory pages are locked by the GPU while code is running on the GPU, @@ -62,10 +71,12 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { vertex.getParentComputations().forEach(c -> { // Synchronize computations that are not yet finished and can use streams; if (!c.isComputationFinished() && c.canUseStream()) { - System.out.println("--\tsync stream " + c.getStream().getStreamNumber() + " by " + vertex.getComputation()); + System.out.println("--\tsync stream " + c.getStream() + " by " + vertex.getComputation()); runtime.cudaStreamSynchronize(c.getStream()); // Set the parent computations as finished; c.setComputationFinished(); + // Decrement the active computation count; + decrementComputationCount(c.getStream()); } }); } @@ -76,6 +87,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { public CUDAStream createStream() { CUDAStream newStream = runtime.cudaStreamCreate(streams.size()); streams.add(newStream); + this.activeComputationsPerStream.put(newStream, 0); return newStream; } @@ -86,10 +98,25 @@ public int getNumberOfStreams() { return streams.size(); } + protected void incrementComputationCount(CUDAStream stream) { + this.activeComputationsPerStream.put(stream, this.activeComputationsPerStream.get(stream) + 1); + } + + protected void decrementComputationCount(CUDAStream stream) { + int count = this.activeComputationsPerStream.get(stream) - 1; + if (count < 0) { + throw new RuntimeException("stream " + stream + "has negative current computation count: " + count); + } + // TODO: keep set of "free" streams; + this.activeComputationsPerStream.put(stream, count); + } + /** * Cleanup and deallocate the streams managed by this manager; */ public void cleanup() { streams.forEach(runtime::cudaStreamDestroy); + activeComputationsPerStream.clear(); + streams.clear(); } } From 4a1d8d08ecf20ec247caa93081dd18332e0981c6 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 3 May 2020 13:15:26 +0200 Subject: [PATCH 048/236] fixed inconsistency in frontier computation, added tests for synced streams --- .../grcuda/test/gpu/ExecutionDAGTest.java | 77 ++++++++++++++ .../WithConstDependencyComputationTest.java | 68 ++++++++---- .../gpu/stream/GrCUDAStreamManagerTest.java | 100 +++++++++++++++++- .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 11 +- .../gpu/stream/GrCUDAStreamManager.java | 5 +- 5 files changed, 231 insertions(+), 30 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index d1a9d48d..a3fa1055 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -144,6 +144,45 @@ public void complexFrontierMockTest() throws UnsupportedTypeException { assertFalse(dag.getVertices().get(5).isStart()); } + @Test + public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(true); + + // This time, simulate the synchronization process between kernels; + // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) + // C(2) + // The final frontier is composed by C(2) F(4); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(4))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(6, dag.getNumVertices()); + assertEquals(4, dag.getNumEdges()); + assertEquals(2, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(5))), + new HashSet<>(dag.getFrontier())); + + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertFalse(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertTrue(dag.getVertices().get(2).isStart()); + assertFalse(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + assertFalse(dag.getVertices().get(4).isFrontier()); + assertFalse(dag.getVertices().get(4).isStart()); + assertTrue(dag.getVertices().get(5).isFrontier()); + assertFalse(dag.getVertices().get(5).isStart()); + } + private static final int NUM_THREADS_PER_BLOCK = 128; private static final String SQUARE_KERNEL = @@ -259,4 +298,42 @@ public void dependencyPipelineSimple2Test() { assertEquals(-4.93, resScalar, 0.01); } } + + /** + * In this test, 2 kernels that operates on "x" executes concurrently. + * The read on "y" has to sync on the stream where the second kernel is running, although that kernel doesn't use "y". + * This is due to the pre-Pascal limitations on managed memory accesses, + * and the inability to access an array while it is being used by a running kernel; + */ + @Test + public void dependencyPipelineSimple3Test() { + + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + + final int numElements = 100000; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 1.0 / (i + 1)); + } + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); + assertNotNull(squareKernel); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, y, numElements); + configuredSquareKernel.execute(x, z, numElements); + + // Verify the output; + assertEquals(4.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); + } + } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java index 76c8706e..388cbc71 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -1,27 +1,9 @@ package com.nvidia.grcuda.test.gpu.executioncontext; -import com.nvidia.grcuda.gpu.ExecutionDAG; -import com.nvidia.grcuda.gpu.computation.dependency.WithConstDependencyComputationBuilder; -import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; -import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextTest; -import com.nvidia.grcuda.test.mock.KernelExecutionTest; -import com.nvidia.grcuda.test.mock.MockArgument; -import com.oracle.truffle.api.interop.UnsupportedTypeException; -import org.graalvm.polyglot.Context; -import org.graalvm.polyglot.Value; -import org.junit.Test; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - public class WithConstDependencyComputationTest { + /** + @Test public void addVertexToDAGTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); @@ -178,6 +160,48 @@ public void complexFrontierMockTest() throws UnsupportedTypeException { assertFalse(dag.getVertices().get(2).getChildVertices().contains(dag.getVertices().get(3))); } + @Test + public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); + + // A(1R,2) -> B(1) -> D(1R,3) + // C(2R) E(1R,4) -> F(4) + // The final frontier is composed by C(2), D(1, 3), F(4); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2, true))).schedule(); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(3))).schedule(); + new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(4))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(6, dag.getNumVertices()); + assertEquals(3, dag.getNumEdges()); + assertEquals(3, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3), dag.getVertices().get(5))), + new HashSet<>(dag.getFrontier())); + + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertFalse(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertTrue(dag.getVertices().get(2).isStart()); + assertFalse(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + assertTrue(dag.getVertices().get(4).isFrontier()); + assertTrue(dag.getVertices().get(4).isStart()); + assertTrue(dag.getVertices().get(5).isFrontier()); + assertFalse(dag.getVertices().get(5).isStart()); + // Check that D is a child of B, and C and D are not connected; + assertEquals(dag.getVertices().get(1), dag.getVertices().get(3).getParentVertices().get(0)); + assertFalse(dag.getVertices().get(3).getParentVertices().contains(dag.getVertices().get(2))); + assertFalse(dag.getVertices().get(2).getChildVertices().contains(dag.getVertices().get(3))); + } + private static final int NUM_THREADS_PER_BLOCK = 128; private static final String SQUARE_KERNEL = @@ -249,13 +273,12 @@ public void dependencyPipelineSimpleTest() { } } + @Test public void dependencyPipelineSimple2Test() { try (Context context = Context.newBuilder().allowAllAccess(true).build()) { - // FIXME: this test fails randomly with small values (< 100000, more or less), - // but the same computation doesn't fail in Graalpython. final int numElements = 100000; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); @@ -293,4 +316,5 @@ public void dependencyPipelineSimple2Test() { assertEquals(-4.93, resScalar, 0.01); } } + **/ } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index a0393554..9cbd7f06 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -36,6 +36,8 @@ public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { assertEquals(1, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); + assertEquals(3, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(0).getComputation().getStream())); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(1).getComputation().getStream())); } @Test @@ -50,7 +52,7 @@ public void streamSelectionMockTest() throws UnsupportedTypeException { new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); + Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(4))).schedule(); new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); @@ -65,6 +67,7 @@ public void streamSelectionMockTest() throws UnsupportedTypeException { assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(5).getComputation().getStream().getStreamNumber()); + assertEquals(6, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(0).getComputation().getStream())); } @Test @@ -84,7 +87,6 @@ public void streamSelection2MockTest() throws UnsupportedTypeException { new KernelExecutionTest(context, Arrays.asList(new MockArgument(4), new MockArgument(5))).schedule(); - ExecutionDAG dag = context.getDag(); // Check that kernels have been given the right stream; @@ -95,5 +97,99 @@ public void streamSelection2MockTest() throws UnsupportedTypeException { assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); assertEquals(1, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); assertEquals(1, dag.getVertices().get(5).getComputation().getStream().getStreamNumber()); + assertEquals(4, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(0).getComputation().getStream())); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(4).getComputation().getStream())); + } + + @Test + public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(true); + // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, + // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), + // and kernel 4 (argument "3" is active); + // A(1) -> C(1, 2, 3) -> D(3) + // B(2) / + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), + new MockArgument(2), + new MockArgument(3))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(3))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check that kernels have been given the right stream; + assertEquals(2, context.getStreamManager().getNumberOfStreams()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(3).getComputation().getStream())); + assertEquals(0, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(1).getComputation().getStream())); + } + + @Test + public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(true); + + // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) + // C(2) + // The final frontier is composed by C(2), D(3), E(1), F(4); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(4))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check that kernels have been given the right stream; + assertEquals(2, context.getDag().getFrontier().size()); + assertEquals(2, context.getStreamManager().getNumberOfStreams()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(5).getComputation().getStream().getStreamNumber()); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(5).getComputation().getStream())); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(2).getComputation().getStream())); + } + + @Test + public void streamSelection2WithSyncMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(true); + + // A(1,2) -> B(1) -> D(1,3) + // C(2) + // E(4) -> F(4, 5) + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); + new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + new KernelExecutionTest(context, + Arrays.asList(new MockArgument(4), new MockArgument(5))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check that kernels have been given the right stream; + assertEquals(3, context.getStreamManager().getNumberOfStreams()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); + assertEquals(2, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); + assertEquals(2, dag.getVertices().get(5).getComputation().getStream().getStreamNumber()); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(0).getComputation().getStream())); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(2).getComputation().getStream())); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(4).getComputation().getStream())); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index bb417cf0..f9d562e2 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -38,7 +38,7 @@ public DAGVertex append(GrCUDAComputationalElement kernel) { ////////////////////////////// // For each vertex in the frontier, compute dependencies of the vertex; - for (DAGVertex frontierVertex : cleanedFrontier()) { + for (DAGVertex frontierVertex : cleanFrontier()) { Collection dependencies = computeDependencies(frontierVertex, newVertex); if (dependencies.size() > 0) { // Create a new edge between the two vertices (book-keeping is automatic); @@ -46,7 +46,7 @@ public DAGVertex append(GrCUDAComputationalElement kernel) { } } // Remove from the frontier vertices that no longer belong to it; - frontier = cleanedFrontier(); + frontier = cleanFrontier(); // Add the new vertex to the frontier if it has no children; if (newVertex.isFrontier()) { frontier.add(newVertex); @@ -75,7 +75,7 @@ public int getNumEdges() { } public List getFrontier() { - return cleanedFrontier(); + return cleanFrontier(); } /** @@ -84,8 +84,9 @@ public List getFrontier() { * and we have to ensure that the "cached" internal frontier is up-to-date every time it is accessed; * @return the updated DAG frontier */ - private List cleanedFrontier() { - return frontier.stream().filter(DAGVertex::isFrontier).collect(Collectors.toList()); + private List cleanFrontier() { + frontier = frontier.stream().filter(DAGVertex::isFrontier).collect(Collectors.toList()); + return frontier; } @Override diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index e1e72be6..ee383913 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -61,7 +61,6 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { } } - /** * Given a computation, synchronize all its parent streams. The caller thread will be blocked until all the * computations on the parents streams are finished; @@ -98,6 +97,10 @@ public int getNumberOfStreams() { return streams.size(); } + public int getNumActiveComputationsOnStream(CUDAStream stream) { + return this.activeComputationsPerStream.get(stream); + } + protected void incrementComputationCount(CUDAStream stream) { this.activeComputationsPerStream.put(stream, this.activeComputationsPerStream.get(stream) + 1); } From ab611574a4d70784c35078937f08caf89db838f6 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 3 May 2020 16:38:05 +0200 Subject: [PATCH 049/236] tracking active comptuations for each stream --- .../grcuda/test/gpu/ExecutionDAGTest.java | 19 ++++++---- .../test/mock/GrCUDAStreamManagerTest.java | 6 ++-- .../nvidia/grcuda/array/AbstractArray.java | 15 ++++++++ .../com/nvidia/grcuda/gpu/CUDARuntime.java | 6 ++++ .../computation/DeviceArrayReadExecution.java | 2 +- .../DeviceArrayWriteExecution.java | 2 +- .../gpu/stream/GrCUDAStreamManager.java | 36 +++++++++++-------- 7 files changed, 61 insertions(+), 25 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index a3fa1055..9c8b8f6b 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -193,6 +193,14 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { " }" + "}\n"; + private static final String SQUARE_2_KERNEL = + "extern \"C\" __global__ void square(const float* x, float *y, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " y[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + private static final String DIFF_KERNEL = "extern \"C\" __global__ void diff(float* x, float* y, float* z, int n) {\n" + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + @@ -300,8 +308,7 @@ public void dependencyPipelineSimple2Test() { } /** - * In this test, 2 kernels that operates on "x" executes concurrently. - * The read on "y" has to sync on the stream where the second kernel is running, although that kernel doesn't use "y". + * The read on "y" has to sync on the stream where the kernel is running, although that kernel doesn't use "y". * This is due to the pre-Pascal limitations on managed memory accesses, * and the inability to access an array while it is being used by a running kernel; */ @@ -318,21 +325,21 @@ public void dependencyPipelineSimple3Test() { Value z = deviceArrayConstructor.execute("float", numElements); for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 1.0 / (i + 1)); + x.setArrayElement(i, 2.0); } + y.setArrayElement(0, 0); Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); + Value squareKernel = buildkernel.execute(SQUARE_2_KERNEL, "square", "const pointer, pointer, sint32"); assertNotNull(squareKernel); Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); // Perform the computation; - configuredSquareKernel.execute(x, y, numElements); configuredSquareKernel.execute(x, z, numElements); // Verify the output; - assertEquals(4.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(0.0, y.getArrayElement(0).asFloat(), 0.1); assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java index 37da5e5c..8a1c5a55 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java @@ -5,6 +5,8 @@ import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; +import java.util.HashSet; + public class GrCUDAStreamManagerTest extends GrCUDAStreamManager { GrCUDAStreamManagerTest(CUDARuntime runtime, boolean syncParents) { super(runtime); @@ -23,7 +25,7 @@ public class GrCUDAStreamManagerTest extends GrCUDAStreamManager { public CUDAStream createStream() { CUDAStream newStream = new CUDAStream(0, numStreams++); streams.add(newStream); - this.activeComputationsPerStream.put(newStream, 0); + this.activeComputationsPerStream.put(newStream, new HashSet<>()); return newStream; } @@ -36,7 +38,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { // Set the parent computations as finished; c.setComputationFinished(); // Decrement the active computation count; - decrementComputationCount(c.getStream()); + removeActiveComputation(c); } }); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 8b35d4c3..0f062133 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -2,6 +2,8 @@ import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.DefaultStream; import com.oracle.truffle.api.interop.InteropLibrary; import com.oracle.truffle.api.interop.InvalidArrayIndexException; import com.oracle.truffle.api.interop.TruffleObject; @@ -31,6 +33,11 @@ public abstract class AbstractArray implements TruffleObject { * Used to avoid multiple registration; */ private boolean registeredInContext = false; + /** + * Keep track of whether this array is attached to a specific stream that limits its visibility. + * By default, every array is attached to the {@link DefaultStream}; + */ + private CUDAStream streamMapping = new DefaultStream(); /** * Tracks whether the last operation done on the native memory underlying this array is a read/write operation @@ -71,6 +78,14 @@ public AbstractGrCUDAExecutionContext getGrCUDAExecutionContext() { return grCUDAExecutionContext; } + public CUDAStream getStreamMapping() { + return streamMapping; + } + + public void setStreamMapping(CUDAStream streamMapping) { + this.streamMapping = streamMapping; + } + // Implementation of InteropLibrary @ExportMessage diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 77e0ba19..c52730f9 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -347,6 +347,10 @@ public void cudaStreamAttachMemAsync(CUDAStream stream, AbstractArray array) { try { Object callable = CUDARuntimeFunction.CUDA_STREAMATTACHMEMASYNC.getSymbol(this); int flag = stream.isDefaultStream() ? MEM_ATTACH_GLOBAL : MEM_ATTACH_SINGLE; + + // Book-keeping of the stream attachment within the array; + array.setStreamMapping(stream); + Object result = INTEROP.execute(callable, stream.getRawPointer(), array.getPointer(), 0, flag); checkCUDAReturnCode(result, "cudaStreamAttachMemAsync"); } catch (InteropException e) { @@ -610,6 +614,8 @@ public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException @TruffleBoundary public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, UnsupportedTypeException, InteropException { + // TODO: update CUDAStream attachment if arguments are device array and cuda stream (or global stream) + long streamAddr; long arrayAddr; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java index 863a1712..77c0c20e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayReadExecution.java @@ -28,6 +28,6 @@ public String toString() { // return "DeviceArrayReadExecution(" + // "array=" + array + // ", index=" + index + ")"; - return "array read on " + System.identityHashCode(array) + "; index=" + index; + return "array read on " + System.identityHashCode(array) + "; index=" + index + "; stream=" + getStream().getStreamNumber(); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java index ffdd2fb2..818c11de 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/DeviceArrayWriteExecution.java @@ -39,6 +39,6 @@ public String toString() { // ", index=" + index + // ", value=" + value + // ")"; - return "array write on " + System.identityHashCode(array) + "; index=" + index + "; value=" + value; + return "array write on " + System.identityHashCode(array) + "; index=" + index + "; value=" + value + "; stream=" + getStream().getStreamNumber(); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index ee383913..b5ff2770 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -2,11 +2,14 @@ import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; public class GrCUDAStreamManager { @@ -19,9 +22,9 @@ public class GrCUDAStreamManager { */ protected final CUDARuntime runtime; /** - * Track how many active computations each stream has, excluding the default stream; + * Track the active computations each stream has, excluding the default stream; */ - protected final Map activeComputationsPerStream; + protected final Map> activeComputationsPerStream; public GrCUDAStreamManager(CUDARuntime runtime) { this.runtime = runtime; @@ -51,7 +54,7 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { // Set the stream; vertex.getComputation().setStream(stream); // Update the computation counter; - incrementComputationCount(stream); + addActiveComputation(vertex.getComputation()); // Associate all the arrays in the computation to the selected stream, // to enable CPU accesses on managed memory arrays currently not being used by the GPU. // This is required as on pre-Pascal GPUs all unified memory pages are locked by the GPU while code is running on the GPU, @@ -67,15 +70,22 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { * @param vertex a computation whose parents should be synchronized */ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { + + // TODO: activeCompSet deve tenere set di comp. Devo assicurarmi di rimuovere gli elementi dal set!!! + // Devo poi costruire una list di comp da syncare. Innanziuttuto i parent. + // Poi posso avere che la comp ritorna uno stream aggiuntivo + // Aggiugno tutte le comp associate allo stream alla lista di cose da syncare + // Se lo stream è default, invece, faccio una device sync e tolgo tutte le values dalla mappa + vertex.getParentComputations().forEach(c -> { // Synchronize computations that are not yet finished and can use streams; - if (!c.isComputationFinished() && c.canUseStream()) { + if (c.canUseStream() && !c.isComputationFinished()) { System.out.println("--\tsync stream " + c.getStream() + " by " + vertex.getComputation()); runtime.cudaStreamSynchronize(c.getStream()); // Set the parent computations as finished; c.setComputationFinished(); // Decrement the active computation count; - decrementComputationCount(c.getStream()); + removeActiveComputation(c); } }); } @@ -86,7 +96,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { public CUDAStream createStream() { CUDAStream newStream = runtime.cudaStreamCreate(streams.size()); streams.add(newStream); - this.activeComputationsPerStream.put(newStream, 0); + this.activeComputationsPerStream.put(newStream, new HashSet<>()); return newStream; } @@ -98,20 +108,16 @@ public int getNumberOfStreams() { } public int getNumActiveComputationsOnStream(CUDAStream stream) { - return this.activeComputationsPerStream.get(stream); + return this.activeComputationsPerStream.get(stream).size(); } - protected void incrementComputationCount(CUDAStream stream) { - this.activeComputationsPerStream.put(stream, this.activeComputationsPerStream.get(stream) + 1); + protected void addActiveComputation(GrCUDAComputationalElement computation) { + this.activeComputationsPerStream.get(computation.getStream()).add(computation); } - protected void decrementComputationCount(CUDAStream stream) { - int count = this.activeComputationsPerStream.get(stream) - 1; - if (count < 0) { - throw new RuntimeException("stream " + stream + "has negative current computation count: " + count); - } + protected void removeActiveComputation(GrCUDAComputationalElement computation) { // TODO: keep set of "free" streams; - this.activeComputationsPerStream.put(stream, count); + this.activeComputationsPerStream.get(computation.getStream()).remove(computation); } /** From c2c9e05fa60dc399574b9c92c34490f5cb002636 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 6 May 2020 12:36:20 +0200 Subject: [PATCH 050/236] removed sync if no computation is active; moved default stream to singleton --- .../grcuda/test/gpu/ExecutionDAGTest.java | 2 +- .../nvidia/grcuda/array/AbstractArray.java | 5 +- .../grcuda/array/MultiDimDeviceArrayView.java | 20 ++++++++ .../com/nvidia/grcuda/gpu/CUDARuntime.java | 36 +++++++++----- .../grcuda/gpu/KernelConfigBuilder.java | 2 +- .../gpu/computation/ArrayAccessExecution.java | 6 +++ .../ArrayStreamArchitecturePolicy.java | 9 +++- .../GrCUDAComputationalElement.java | 26 +++++++++- .../PostPascalArrayStreamAssociation.java | 10 ++++ .../PrePascalArrayStreamAssociation.java | 16 +++++++ .../grcuda/gpu/stream/DefaultStream.java | 6 ++- .../gpu/stream/GrCUDAStreamManager.java | 47 ++++++++++++++++--- 12 files changed, 160 insertions(+), 25 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 9c8b8f6b..1d2d36a5 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -327,7 +327,7 @@ public void dependencyPipelineSimple3Test() { for (int i = 0; i < numElements; ++i) { x.setArrayElement(i, 2.0); } - y.setArrayElement(0, 0); +// y.setArrayElement(0, 0); Value buildkernel = context.eval("grcuda", "buildkernel"); Value squareKernel = buildkernel.execute(SQUARE_2_KERNEL, "square", "const pointer, pointer, sint32"); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 0f062133..8e03e6b5 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -37,7 +37,7 @@ public abstract class AbstractArray implements TruffleObject { * Keep track of whether this array is attached to a specific stream that limits its visibility. * By default, every array is attached to the {@link DefaultStream}; */ - private CUDAStream streamMapping = new DefaultStream(); + protected CUDAStream streamMapping = DefaultStream.get(); /** * Tracks whether the last operation done on the native memory underlying this array is a read/write operation @@ -121,6 +121,7 @@ public void setLastComputationArrayAccess(boolean lastComputationArrayAccess) { public abstract long getPointer(); - // TODO: equals must be smarter than checking memory address, as a MultiDimView should be considered as part of its parent + // TODO: equals must be smarter than checking memory address, as a MultiDimView should be considered as part of its parent, + // similarly to what "isLastComputationArrayAccess" is doing. // The hash instead should be different. We might also not touch equals, and have another method "isPartOf" } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java index 49ed8262..0bc61665 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java @@ -30,6 +30,7 @@ import com.nvidia.grcuda.gpu.computation.MultiDimDeviceArrayViewReadExecution; import com.nvidia.grcuda.gpu.computation.MultiDimDeviceArrayViewWriteExecution; +import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Cached.Shared; @@ -88,6 +89,25 @@ public void setLastComputationArrayAccess(boolean lastComputationArrayAccess) { this.mdDeviceArray.setLastComputationArrayAccess(lastComputationArrayAccess); } + /** + * Propagate the stream mapping to the parent array, so other temporary views are aware of this mapping; + * @param streamMapping the stream to which this array is associated + */ + @Override + public void setStreamMapping(CUDAStream streamMapping) { + this.mdDeviceArray.setStreamMapping(streamMapping); + this.streamMapping = streamMapping; + } + + /** + * Return the parent stream mapping, to guarantee that all views have the same mapping; + * @return the stream to which this array is associated + */ + @Override + public CUDAStream getStreamMapping() { + return this.mdDeviceArray.getStreamMapping(); + } + @Override public String toString() { return String.format("MultiDimDeviceArrayView(dim=%d, offset=%d, stride=%d)\n", diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index c52730f9..7081da95 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -35,6 +35,7 @@ import com.nvidia.grcuda.NoneValue; import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.array.DeviceArray; +import com.nvidia.grcuda.array.MultiDimDeviceArray; import com.nvidia.grcuda.functions.CUDAFunction; import com.nvidia.grcuda.gpu.UnsafeHelper.Integer32Object; import com.nvidia.grcuda.gpu.UnsafeHelper.Integer64Object; @@ -43,6 +44,7 @@ import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.DefaultStream; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; @@ -614,25 +616,22 @@ public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException @TruffleBoundary public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, UnsupportedTypeException, InteropException { - // TODO: update CUDAStream attachment if arguments are device array and cuda stream (or global stream) - - long streamAddr; - long arrayAddr; - + Object streamObj; + Object arrayObj; final int MEM_ATTACH_SINGLE = 0x04; final int MEM_ATTACH_GLOBAL = 0x01; int flag = MEM_ATTACH_SINGLE; if (args.length == 1) { - arrayAddr = extractArrayPointer(args[0]); - streamAddr = 0; // Use default stream; + arrayObj = args[0]; + streamObj = DefaultStream.get(); flag = MEM_ATTACH_GLOBAL; } else if (args.length == 2) { - streamAddr = extractStreamPointer(args[0]); - arrayAddr = extractArrayPointer(args[1]); + streamObj = args[0]; + arrayObj = args[1]; } else if (args.length == 3) { - streamAddr = extractStreamPointer(args[0]); - arrayAddr = extractArrayPointer(args[1]); + streamObj = args[0]; + arrayObj = args[1]; if (args[2] instanceof Integer) { flag = ((Integer) args[2]); } else { @@ -643,11 +642,24 @@ public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException throw ArityException.create(3, args.length); } + // Extract pointers; + long streamAddr; + long arrayAddr; + streamAddr = extractStreamPointer(streamObj); + arrayAddr = extractArrayPointer(arrayObj); + // If using the default stream (0 address) use the "cudaMemAttachGlobal" flag; if (streamAddr == 0) { flag = MEM_ATTACH_GLOBAL; } + // Track the association between the stream and the array, if possible; + if (streamObj instanceof CUDAStream) { + if (arrayObj instanceof AbstractArray) { + ((AbstractArray) arrayObj).setStreamMapping((CUDAStream) streamObj); + } + } + // Always set "size" to 0 to cover the entire array; callSymbol(cudaRuntime, streamAddr, arrayAddr, 0, flag); return NoneValue.get(); @@ -677,6 +689,8 @@ long extractArrayPointer(Object array) { return ((LittleEndianNativeArrayView) array).getStartAddress(); } else if (array instanceof DeviceArray) { return ((DeviceArray) array).getPointer(); + } else if (array instanceof MultiDimDeviceArray) { + return ((MultiDimDeviceArray) array).getPointer(); } else { throw new GrCUDAException("expected GPUPointer or LittleEndianNativeArrayView or DeviceArray"); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfigBuilder.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfigBuilder.java index 6fb866a8..6230fcf2 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfigBuilder.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelConfigBuilder.java @@ -8,7 +8,7 @@ public class KernelConfigBuilder { private final Dim3 gridSize; private final Dim3 blockSize; private int dynamicSharedMemoryBytes = 0; - private CUDAStream stream = new DefaultStream(); + private CUDAStream stream = DefaultStream.get(); private boolean useCustomStream = false; KernelConfigBuilder(Dim3 gridSize, Dim3 blockSize) { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java index 1819da72..a9f726d3 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayAccessExecution.java @@ -2,6 +2,9 @@ import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.stream.CUDAStream; + +import java.util.Optional; /** * Abstract class that wraps all computational elements representing accesses on managed memory by the CPU; @@ -20,4 +23,7 @@ public ArrayAccessExecution(AbstractGrCUDAExecutionContext grCUDAExecutionContex public void updateIsComputationArrayAccess() { this.array.setLastComputationArrayAccess(isComputationArrayAccess); } + + @Override + protected Optional additionalStreamDependencyImpl() { return Optional.of(array.getStreamMapping()); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayStreamArchitecturePolicy.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayStreamArchitecturePolicy.java index d40dd186..c6fefaab 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayStreamArchitecturePolicy.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayStreamArchitecturePolicy.java @@ -1,5 +1,10 @@ package com.nvidia.grcuda.gpu.computation; +import com.nvidia.grcuda.gpu.stream.CUDAStream; + +import java.util.Optional; +import java.util.concurrent.Callable; + /** * GPUs with pre-Pascal architecture or older, with compute capability < 6.0, * require to exclusively associate a managed memory array to a single stream to provide @@ -8,5 +13,7 @@ * The array association function will be done only if the available GPU has compute capability < 6.0; */ public interface ArrayStreamArchitecturePolicy { - void execute(Runnable callable); + void execute(Runnable runnable); + + Optional execute(Callable> callable); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index fbd8c0eb..83b15c05 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -10,6 +10,7 @@ import java.util.Collection; import java.util.List; +import java.util.Optional; /** * Basic class that represents GrCUDA computations, @@ -31,7 +32,7 @@ public abstract class GrCUDAComputationalElement { * Subclasses can keep an internal reference to the stream, e.g. if it can be manually modified by the user, * but it is required to keep that value consistent to this one if it is modified; */ - private CUDAStream stream = new DefaultStream(); + private CUDAStream stream = DefaultStream.get(); /** * Keep track of whether this computation has already been executed, and represents a "dead" vertex in the DAG. * Computations that are already executed will not be considered when computing dependencies; @@ -182,6 +183,29 @@ public Collection computeDependencies(GrCUDAComput return this.dependencyComputation.computeDependencies(other); } + /** + * Compute and return an additional stream dependency used by this computation. + * This function is used by {@link com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager} to synchronize streams + * that might not be directly used by this computation, but that have to be synchronized for this computation + * to take place correctly. For example, in pre-Pascal GPUs it is required to ensure that no kernel is running if + * the array accessed is visible to the global stream. + * The actual invocation is wrapped by a {@link ArrayStreamArchitecturePolicy}, + * as the invocation depends on the GPU architecture; + * @return An additional stream to synchronize + */ + public final Optional additionalStreamDependency() { + return grCUDAExecutionContext.getArrayStreamArchitecturePolicy().execute(this::additionalStreamDependencyImpl); + } + + /** + * Actual implementation of {@link GrCUDAComputationalElement#additionalStreamDependency}, it can be overridden + * by concrete computations to provide additional streams for synchronization; + * @return An additional stream to synchronize + */ + protected Optional additionalStreamDependencyImpl() { + return Optional.empty(); + } + /** * The default initializer will simply store all the arguments, * and consider each of them in the dependency computations; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PostPascalArrayStreamAssociation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PostPascalArrayStreamAssociation.java index a14436f2..1bd44e8c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PostPascalArrayStreamAssociation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PostPascalArrayStreamAssociation.java @@ -1,5 +1,10 @@ package com.nvidia.grcuda.gpu.computation; +import com.nvidia.grcuda.gpu.stream.CUDAStream; + +import java.util.Optional; +import java.util.concurrent.Callable; + /** * GPUs with Pascal architecture or newer (e.g. Tesla P100), with compute capability >= 6.0, * do not require to exclusively associate a managed memory array to a single stream to provide @@ -12,4 +17,9 @@ public class PostPascalArrayStreamAssociation implements ArrayStreamArchitecture public void execute(Runnable callable) { } + + @Override + public Optional execute(Callable> callable) { + return Optional.empty(); + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PrePascalArrayStreamAssociation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PrePascalArrayStreamAssociation.java index fb3c4617..e07a3cef 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PrePascalArrayStreamAssociation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/PrePascalArrayStreamAssociation.java @@ -1,5 +1,11 @@ package com.nvidia.grcuda.gpu.computation; +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.DefaultStream; + +import java.util.Optional; +import java.util.concurrent.Callable; + /** * GPUs with pre-Pascal architecture or older, with compute capability < 6.0, * require to exclusively associate a managed memory array to a single stream to provide @@ -12,4 +18,14 @@ public class PrePascalArrayStreamAssociation implements ArrayStreamArchitectureP public void execute(Runnable runnable) { runnable.run(); } + + @Override + public Optional execute(Callable> callable) { + try { + return callable.call(); + } catch(Exception e) { + System.out.println("WARNING: failed to compute stream dependency, returning default stream"); + return Optional.of(DefaultStream.get()); + } + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java index 12a86d04..00644885 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java @@ -3,11 +3,15 @@ public class DefaultStream extends CUDAStream { static final int DEFAULT_STREAM_NUMBER = 0; + + private static final DefaultStream defaultStream = new DefaultStream(); - public DefaultStream() { + private DefaultStream() { super(0, DEFAULT_STREAM_NUMBER); } + public static DefaultStream get() { return defaultStream; } + @Override public boolean isDefaultStream() { return true; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index b5ff2770..23af3c8a 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -9,6 +9,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; public class GrCUDAStreamManager { @@ -71,16 +72,48 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { */ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { - // TODO: activeCompSet deve tenere set di comp. Devo assicurarmi di rimuovere gli elementi dal set!!! - // Devo poi costruire una list di comp da syncare. Innanziuttuto i parent. - // Poi posso avere che la comp ritorna uno stream aggiuntivo - // Aggiugno tutte le comp associate allo stream alla lista di cose da syncare - // Se lo stream è default, invece, faccio una device sync e tolgo tutte le values dalla mappa + // FIXME: if I write on array x, launch K(Y) then read(x), the last comp on x is array access, so no sync is done!!! - vertex.getParentComputations().forEach(c -> { + // Skip syncing if no computation is active; + if (!activeComputationsPerStream.isEmpty()) { + Set computationsToSync = new HashSet<>(vertex.getParentComputations()); + + // Retrieve an additional stream dependency from the kernel, if required; + Optional additionalStream = vertex.getComputation().additionalStreamDependency(); + if (additionalStream.isPresent()) { + // If we require synchronization on the default stream, perform it in a specialized way; + if (additionalStream.get().isDefaultStream()) { + System.out.println("--\tsync stream " + additionalStream.get() + " by " + vertex.getComputation()); + // Synchronize the device; + runtime.cudaDeviceSynchronize(); + // All computations are now finished; + activeComputationsPerStream.keySet().forEach(s -> { + activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished); + activeComputationsPerStream.put(s, new HashSet<>()); + }); + } else { + // Else add the computations related to the additional streams to the set and sync it; + computationsToSync.addAll(activeComputationsPerStream.get(additionalStream.get())); + syncParentStreamsImpl(computationsToSync, vertex.getComputation()); + } + } else { + syncParentStreamsImpl(computationsToSync, vertex.getComputation()); + } + } + } + + /** + * Synchronize a list of computations on their streams; + * @param computationsToSync a list of computations whose streams should be synced + * @param computationThatSyncs the computation that triggered the syncing process + */ + private void syncParentStreamsImpl( + Set computationsToSync, + GrCUDAComputationalElement computationThatSyncs) { + computationsToSync.forEach(c -> { // Synchronize computations that are not yet finished and can use streams; if (c.canUseStream() && !c.isComputationFinished()) { - System.out.println("--\tsync stream " + c.getStream() + " by " + vertex.getComputation()); + System.out.println("--\tsync stream " + c.getStream() + " by " + computationThatSyncs); runtime.cudaStreamSynchronize(c.getStream()); // Set the parent computations as finished; c.setComputationFinished(); From b2a421aed2b3a8e75f5e34958ec32ff4f31931f7 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 6 May 2020 13:33:08 +0200 Subject: [PATCH 051/236] updated naming of mock test classes --- .../grcuda/test/gpu/ExecutionDAGTest.java | 57 ++++----- .../gpu/stream/GrCUDAStreamManagerTest.java | 118 +++++++++--------- .../{MockArgument.java => ArgumentMock.java} | 8 +- ...t.java => GrCUDAExecutionContextMock.java} | 18 +-- ...Test.java => GrCUDAStreamManagerMock.java} | 6 +- ...tionTest.java => KernelExecutionMock.java} | 4 +- .../gpu/stream/GrCUDAStreamManager.java | 12 +- 7 files changed, 111 insertions(+), 112 deletions(-) rename projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/{MockArgument.java => ArgumentMock.java} (61%) rename projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/{GrCUDAExecutionContextTest.java => GrCUDAExecutionContextMock.java} (63%) rename projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/{GrCUDAStreamManagerTest.java => GrCUDAStreamManagerMock.java} (87%) rename projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/{KernelExecutionTest.java => KernelExecutionMock.java} (84%) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 1d2d36a5..2d9d7181 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -2,9 +2,9 @@ import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; -import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextTest; -import com.nvidia.grcuda.test.mock.KernelExecutionTest; -import com.nvidia.grcuda.test.mock.MockArgument; +import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; +import com.nvidia.grcuda.test.mock.KernelExecutionMock; +import com.nvidia.grcuda.test.mock.ArgumentMock; import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; @@ -33,10 +33,10 @@ public void executionDAGConstructorTest() { @Test public void addVertexToDAGTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(); // Create two mock kernel executions; - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(2), new MockArgument(3))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2), new ArgumentMock(3))).schedule(); ExecutionDAG dag = context.getDag(); @@ -46,8 +46,8 @@ public void addVertexToDAGTest() throws UnsupportedTypeException { assertTrue(dag.getFrontier().get(0).isFrontier()); assertTrue(dag.getFrontier().get(0).isStart()); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(2), new MockArgument(3))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2), new ArgumentMock(3))).schedule(); assertEquals(2, dag.getNumVertices()); assertEquals(1, dag.getNumEdges()); @@ -66,15 +66,15 @@ public void addVertexToDAGTest() throws UnsupportedTypeException { @Test public void dependencyPipelineSimpleMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(2), new MockArgument(3))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(3))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(3))).schedule(); ExecutionDAG dag = context.getDag(); @@ -108,17 +108,17 @@ public void dependencyPipelineSimpleMockTest() throws UnsupportedTypeException { @Test public void complexFrontierMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // \----> C(2) // The final frontier is composed by C(2), D(3), E(1), F(4); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(4))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); ExecutionDAG dag = context.getDag(); @@ -146,18 +146,18 @@ public void complexFrontierMockTest() throws UnsupportedTypeException { @Test public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(true); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(true); // This time, simulate the synchronization process between kernels; // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // C(2) // The final frontier is composed by C(2) F(4); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1), new MockArgument(4))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); ExecutionDAG dag = context.getDag(); @@ -327,6 +327,7 @@ public void dependencyPipelineSimple3Test() { for (int i = 0; i < numElements; ++i) { x.setArrayElement(i, 2.0); } + // FIXME: if I write on array x, launch K(Y) then read(x), the last comp on x is array access, so no sync is done!!! // y.setArrayElement(0, 0); Value buildkernel = context.eval("grcuda", "buildkernel"); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 9cbd7f06..9cd2c74c 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -2,9 +2,9 @@ import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; -import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextTest; -import com.nvidia.grcuda.test.mock.KernelExecutionTest; -import com.nvidia.grcuda.test.mock.MockArgument; +import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; +import com.nvidia.grcuda.test.mock.KernelExecutionMock; +import com.nvidia.grcuda.test.mock.ArgumentMock; import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.junit.Test; @@ -16,17 +16,17 @@ public class GrCUDAStreamManagerTest { @Test public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), - new MockArgument(2), - new MockArgument(3))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(3))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), + new ArgumentMock(2), + new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(3))).schedule(); ExecutionDAG dag = context.getDag(); @@ -42,20 +42,20 @@ public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { @Test public void streamSelectionMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // \----> C(2) // The final frontier is composed by C(2), D(3), E(1), F(4); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(4))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); ExecutionDAG dag = context.getDag(); @@ -72,20 +72,20 @@ public void streamSelectionMockTest() throws UnsupportedTypeException { @Test public void streamSelection2MockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(); // A(1,2) -> B(1) -> D(1,3) // \----> C(2) // E(4) -> F(4, 5) - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(4), new MockArgument(5))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(4), new ArgumentMock(5))).schedule(); ExecutionDAG dag = context.getDag(); @@ -103,19 +103,19 @@ public void streamSelection2MockTest() throws UnsupportedTypeException { @Test public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(true); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(true); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); // A(1) -> C(1, 2, 3) -> D(3) // B(2) / - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), - new MockArgument(2), - new MockArgument(3))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(3))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), + new ArgumentMock(2), + new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(3))).schedule(); ExecutionDAG dag = context.getDag(); @@ -131,20 +131,20 @@ public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeExcept @Test public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(true); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(true); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // C(2) // The final frontier is composed by C(2), D(3), E(1), F(4); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(4))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); ExecutionDAG dag = context.getDag(); @@ -163,20 +163,20 @@ public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { @Test public void streamSelection2WithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(true); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(true); // A(1,2) -> B(1) -> D(1,3) // C(2) // E(4) -> F(4, 5) - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(3))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(4), new MockArgument(5))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(4), new ArgumentMock(5))).schedule(); ExecutionDAG dag = context.getDag(); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MockArgument.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/ArgumentMock.java similarity index 61% rename from projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MockArgument.java rename to projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/ArgumentMock.java index 93534618..d1316af6 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MockArgument.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/ArgumentMock.java @@ -3,16 +3,16 @@ import com.nvidia.grcuda.gpu.ArgumentType; import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; -public class MockArgument extends ComputationArgumentWithValue { - public MockArgument(Object value) { +public class ArgumentMock extends ComputationArgumentWithValue { + public ArgumentMock(Object value) { super(ArgumentType.POINTER, true, false, value); } - public MockArgument(Object value, boolean isConst) { + public ArgumentMock(Object value, boolean isConst) { super(ArgumentType.POINTER, true, isConst, value); } - public MockArgument(Object value, boolean isConst, boolean isArray) { + public ArgumentMock(Object value, boolean isConst, boolean isArray) { super(ArgumentType.POINTER, isArray, isConst, value); } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java similarity index 63% rename from projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextTest.java rename to projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java index 9ec070f0..8ca92a74 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java @@ -9,26 +9,26 @@ /** * Mock class to test the GrCUDAExecutionContextTest, it has a null CUDARuntime; */ -public class GrCUDAExecutionContextTest extends GrCUDAExecutionContext { +public class GrCUDAExecutionContextMock extends GrCUDAExecutionContext { - public GrCUDAExecutionContextTest(boolean syncStream) { + public GrCUDAExecutionContextMock(boolean syncStream) { super(null, null, - new GrCUDAStreamManagerTest(null, syncStream), new DefaultDependencyComputationBuilder()); + new GrCUDAStreamManagerMock(null, syncStream), new DefaultDependencyComputationBuilder()); } - public GrCUDAExecutionContextTest() { + public GrCUDAExecutionContextMock() { super(null, null, - new GrCUDAStreamManagerTest(null), new DefaultDependencyComputationBuilder()); + new GrCUDAStreamManagerMock(null), new DefaultDependencyComputationBuilder()); } - public GrCUDAExecutionContextTest(DependencyComputationBuilder dependencyBuilder) { + public GrCUDAExecutionContextMock(DependencyComputationBuilder dependencyBuilder) { super(null, null, - new GrCUDAStreamManagerTest(null), dependencyBuilder); + new GrCUDAStreamManagerMock(null), dependencyBuilder); } - public GrCUDAExecutionContextTest(DependencyComputationBuilder dependencyBuilder, boolean syncStream) { + public GrCUDAExecutionContextMock(DependencyComputationBuilder dependencyBuilder, boolean syncStream) { super(null, null, - new GrCUDAStreamManagerTest(null, syncStream), dependencyBuilder); + new GrCUDAStreamManagerMock(null, syncStream), dependencyBuilder); } public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java similarity index 87% rename from projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java rename to projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index 8a1c5a55..774e0f94 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -7,13 +7,13 @@ import java.util.HashSet; -public class GrCUDAStreamManagerTest extends GrCUDAStreamManager { - GrCUDAStreamManagerTest(CUDARuntime runtime, boolean syncParents) { +public class GrCUDAStreamManagerMock extends GrCUDAStreamManager { + GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents) { super(runtime); this.syncParents = syncParents; } - GrCUDAStreamManagerTest(CUDARuntime runtime) { + GrCUDAStreamManagerMock(CUDARuntime runtime) { this(runtime, false); } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java similarity index 84% rename from projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionTest.java rename to projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java index 6e8d878b..0f7c09aa 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java @@ -10,9 +10,9 @@ /** * Mock class to test the DAG execution; */ -public class KernelExecutionTest extends GrCUDAComputationalElement { +public class KernelExecutionMock extends GrCUDAComputationalElement { - public KernelExecutionTest(GrCUDAExecutionContext grCUDAExecutionContext, List args) { + public KernelExecutionMock(GrCUDAExecutionContext grCUDAExecutionContext, List args) { super(grCUDAExecutionContext, args); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 23af3c8a..633dcea2 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -25,11 +25,10 @@ public class GrCUDAStreamManager { /** * Track the active computations each stream has, excluding the default stream; */ - protected final Map> activeComputationsPerStream; + protected final Map> activeComputationsPerStream = new HashMap<>(); public GrCUDAStreamManager(CUDARuntime runtime) { this.runtime = runtime; - this.activeComputationsPerStream = new HashMap<>(); } /** @@ -71,7 +70,6 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { * @param vertex a computation whose parents should be synchronized */ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { - // FIXME: if I write on array x, launch K(Y) then read(x), the last comp on x is array access, so no sync is done!!! // Skip syncing if no computation is active; @@ -129,7 +127,7 @@ private void syncParentStreamsImpl( public CUDAStream createStream() { CUDAStream newStream = runtime.cudaStreamCreate(streams.size()); streams.add(newStream); - this.activeComputationsPerStream.put(newStream, new HashSet<>()); + activeComputationsPerStream.put(newStream, new HashSet<>()); return newStream; } @@ -141,16 +139,16 @@ public int getNumberOfStreams() { } public int getNumActiveComputationsOnStream(CUDAStream stream) { - return this.activeComputationsPerStream.get(stream).size(); + return activeComputationsPerStream.get(stream).size(); } protected void addActiveComputation(GrCUDAComputationalElement computation) { - this.activeComputationsPerStream.get(computation.getStream()).add(computation); + activeComputationsPerStream.get(computation.getStream()).add(computation); } protected void removeActiveComputation(GrCUDAComputationalElement computation) { // TODO: keep set of "free" streams; - this.activeComputationsPerStream.get(computation.getStream()).remove(computation); + activeComputationsPerStream.get(computation.getStream()).remove(computation); } /** From 5af8cb770ba2e898701e1659a465ab0b0ce19ee7 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 6 May 2020 15:51:34 +0200 Subject: [PATCH 052/236] added more tests for const dependency streams --- .../WithConstDependencyComputationTest.java | 256 ++++++++++++++---- .../gpu/stream/GrCUDAStreamManager.java | 1 + 2 files changed, 208 insertions(+), 49 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java index 388cbc71..6ed0dcc2 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -1,15 +1,33 @@ package com.nvidia.grcuda.test.gpu.executioncontext; -public class WithConstDependencyComputationTest { +import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.computation.dependency.WithConstDependencyComputationBuilder; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; +import com.nvidia.grcuda.test.mock.ArgumentMock; +import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; +import com.nvidia.grcuda.test.mock.KernelExecutionMock; +import com.oracle.truffle.api.interop.UnsupportedTypeException; +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Value; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; - /** +public class WithConstDependencyComputationTest { @Test public void addVertexToDAGTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(new WithConstDependencyComputationBuilder()); // Create two mock kernel executions; - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1, true), new MockArgument(2))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); ExecutionDAG dag = context.getDag(); @@ -19,8 +37,8 @@ public void addVertexToDAGTest() throws UnsupportedTypeException { assertTrue(dag.getFrontier().get(0).isFrontier()); assertTrue(dag.getFrontier().get(0).isStart()); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1, true), new MockArgument(3))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(3))).schedule(); assertEquals(2, dag.getNumVertices()); assertEquals(0, dag.getNumEdges()); @@ -40,15 +58,17 @@ public void addVertexToDAGTest() throws UnsupportedTypeException { @Test public void dependencyPipelineSimpleMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(new WithConstDependencyComputationBuilder()); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1, true))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1, true))).schedule(); - new KernelExecutionTest(context, - Arrays.asList(new MockArgument(1), new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2))).schedule(); + // A(1r) -> C(1, 2) -> D(2) + // B(1r) -/ + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1, true))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1, true))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); ExecutionDAG dag = context.getDag(); @@ -82,37 +102,37 @@ public void dependencyPipelineSimpleMockTest() throws UnsupportedTypeException { @Test public void forkedComputationTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(new WithConstDependencyComputationBuilder()); // A(1) --> B(1R) // \-> C(1R) - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1, true))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1, true))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1, true))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1, true))).schedule(); ExecutionDAG dag = context.getDag(); // Check the DAG structure; assertEquals(3, dag.getNumVertices()); assertEquals(2, dag.getNumEdges()); -// assertEquals(2, dag.getFrontier().size()); - -// assertFalse(dag.getVertices().get(0).isFrontier()); -// assertTrue(dag.getVertices().get(0).isStart()); -// assertTrue(dag.getVertices().get(1).isFrontier()); -// assertFalse(dag.getVertices().get(1).isStart()); -// assertTrue(dag.getVertices().get(2).isFrontier()); -// assertTrue(dag.getVertices().get(2).isStart()); -// -// assertEquals(dag.getVertices().get(0), dag.getVertices().get(1).getParentVertices().get(0)); -// assertEquals(0, dag.getVertices().get(2).getParentVertices().size()); -// assertFalse(dag.getVertices().get(2).getParentVertices().contains(dag.getVertices().get(1))); -// assertFalse(dag.getVertices().get(1).getChildVertices().contains(dag.getVertices().get(2))); + assertEquals(2, dag.getFrontier().size()); + + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertTrue(dag.getVertices().get(1).isFrontier()); + assertFalse(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertTrue(dag.getVertices().get(2).isStart()); + + assertEquals(dag.getVertices().get(0), dag.getVertices().get(1).getParentVertices().get(0)); + assertEquals(0, dag.getVertices().get(2).getParentVertices().size()); + assertFalse(dag.getVertices().get(2).getParentVertices().contains(dag.getVertices().get(1))); + assertFalse(dag.getVertices().get(1).getChildVertices().contains(dag.getVertices().get(2))); // Add a fourth computation that depends on both B and C, and depends on both; // A(1) -> B(1R) -> D(1) // C(1R) / - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); assertEquals(4, dag.getNumVertices()); assertEquals(3, dag.getNumEdges()); assertEquals(1, dag.getFrontier().size()); @@ -120,17 +140,17 @@ public void forkedComputationTest() throws UnsupportedTypeException { @Test public void complexFrontierMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(new WithConstDependencyComputationBuilder()); // A(1R,2) -> B(1) -> D(1R,3) // \----> C(2R) \----> E(1R,4) -> F(4) // The final frontier is composed by C(2), D(1, 3), E(1), F(4); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2, true))).schedule(); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(3))).schedule(); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(4))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2, true))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); ExecutionDAG dag = context.getDag(); @@ -162,17 +182,17 @@ public void complexFrontierMockTest() throws UnsupportedTypeException { @Test public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextTest(new WithConstDependencyComputationBuilder()); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(new WithConstDependencyComputationBuilder()); // A(1R,2) -> B(1) -> D(1R,3) // C(2R) E(1R,4) -> F(4) // The final frontier is composed by C(2), D(1, 3), F(4); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(2))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(1))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(2, true))).schedule(); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(3))).schedule(); - new KernelExecutionTest(context, Arrays.asList(new MockArgument(1, true), new MockArgument(4))).schedule(); - new KernelExecutionTest(context, Collections.singletonList(new MockArgument(4))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2, true))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); ExecutionDAG dag = context.getDag(); @@ -212,6 +232,14 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { " }" + "}\n"; + private static final String SQUARE_INPLACE_KERNEL = + "extern \"C\" __global__ void square(float* x, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " x[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + private static final String DIFF_KERNEL = "extern \"C\" __global__ void diff(const float* x, const float* y, float* z, int n) {\n" + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + @@ -220,6 +248,14 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { " }\n" + "}"; + private static final String DIFF_SINGLE_KERNEL = + "extern \"C\" __global__ void diff(const float* x, float* z, float val, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " z[idx] = x[idx] - val;\n" + + " }\n" + + "}"; + private static final String REDUCE_KERNEL = "extern \"C\" __global__ void reduce(const float *x, float *res, int n) {\n" + " __shared__ float cache[" + NUM_THREADS_PER_BLOCK + "];\n" + @@ -244,7 +280,41 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { @Test public void dependencyPipelineSimpleTest() { - try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + + final int numElements = 10; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); + + assertNotNull(squareKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, y, numElements); + configuredSquareKernel.execute(x, z, numElements); + + // Verify the output; + assertEquals(4.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineReadXTest() { + + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { final int numElements = 10; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; @@ -267,9 +337,98 @@ public void dependencyPipelineSimpleTest() { configuredSquareKernel.execute(x, y, numElements); configuredSquareKernel.execute(x, z, numElements); + // Read the array x before syncing the computation. Depending on the GPU, this might sync the device; + assertEquals(2.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(2.0, x.getArrayElement(numElements - 1).asFloat(), 0.1); + // Verify the output; assertEquals(4.0, y.getArrayElement(0).asFloat(), 0.1); assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineSplitComputationTest() { + // Test a computation of form A(1) --> B(1r, 2) + // \-> C(1r, 3) + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + + final int numElements = 10; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_INPLACE_KERNEL, "square", "pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_SINGLE_KERNEL, "diff", "const pointer, pointer, float, sint32"); + + assertNotNull(squareKernel); + assertNotNull(diffKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + configuredDiffKernel.execute(x, y, 1.0, numElements); + configuredDiffKernel.execute(x, z, 1.0, numElements); + + // Verify the output; + assertEquals(3.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(3.0, z.getArrayElement(0).asFloat(), 0.1); + assertEquals(3.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); + assertEquals(3.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); + assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineDiamondTest() { + // Test a computation of form A(1) --> B(1r, 2) -> D(1) + // \-> C(1r, 3) -/ + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + + final int numElements = 10; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_INPLACE_KERNEL, "square", "pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_SINGLE_KERNEL, "diff", "const pointer, pointer, float, sint32"); + + assertNotNull(squareKernel); + assertNotNull(diffKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + configuredDiffKernel.execute(x, y, 1.0, numElements); + configuredDiffKernel.execute(x, z, 1.0, numElements); + configuredSquareKernel.execute(x, numElements); + + // Verify the output; + assertEquals(16.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(16.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(3.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(3.0, z.getArrayElement(0).asFloat(), 0.1); + assertEquals(3.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); + assertEquals(3.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); } } @@ -277,7 +436,7 @@ public void dependencyPipelineSimpleTest() { @Test public void dependencyPipelineSimple2Test() { - try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { final int numElements = 100000; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; @@ -313,8 +472,7 @@ public void dependencyPipelineSimple2Test() { // Verify the output; float resScalar = res.getArrayElement(0).asFloat(); - assertEquals(-4.93, resScalar, 0.01); + assertEquals(0, resScalar, 0.01); } } - **/ } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 633dcea2..91e9722f 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -91,6 +91,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { }); } else { // Else add the computations related to the additional streams to the set and sync it; + System.out.println("--\tsyncing additional stream " + additionalStream.get() + "..."); computationsToSync.addAll(activeComputationsPerStream.get(additionalStream.get())); syncParentStreamsImpl(computationsToSync, vertex.getComputation()); } From f61757fd487545c0a077c3c3ea9fa32667954a7a Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 6 May 2020 19:48:57 +0200 Subject: [PATCH 053/236] added lifo stream retrieval policy, added option to specify policy --- .../test/mock/GrCUDAStreamManagerMock.java | 3 +- .../src/com/nvidia/grcuda/GrCUDAContext.java | 22 +++++ .../src/com/nvidia/grcuda/GrCUDAOptions.java | 2 + .../com/nvidia/grcuda/gpu/CUDARuntime.java | 4 + .../executioncontext/ExecutionPolicyEnum.java | 2 +- .../gpu/stream/GrCUDAStreamManager.java | 96 +++++++++++++++++-- .../grcuda/gpu/stream/RetrieveStream.java | 32 +++++++ .../gpu/stream/RetrieveStreamPolicyEnum.java | 16 ++++ 8 files changed, 168 insertions(+), 9 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStream.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStreamPolicyEnum.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index 774e0f94..8af4a7c9 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -4,12 +4,13 @@ import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; +import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; import java.util.HashSet; public class GrCUDAStreamManagerMock extends GrCUDAStreamManager { GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents) { - super(runtime); + super(runtime, RetrieveStreamPolicyEnum.ALWAYS_NEW); this.syncParents = syncParents; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index 7dff79cf..819c027e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -47,6 +47,7 @@ import com.nvidia.grcuda.gpu.executioncontext.ExecutionPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.SyncGrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.TruffleLanguage.Env; @@ -64,6 +65,7 @@ public final class GrCUDAContext { public static final ExecutionPolicyEnum DEFAULT_EXECUTION_POLICY = ExecutionPolicyEnum.DEFAULT; public static final DependencyPolicyEnum DEFAULT_DEPENDENCY_POLICY = DependencyPolicyEnum.DEFAULT; + public static final RetrieveStreamPolicyEnum DEFAULT_RETRIEVE_STREAM_POLICY = RetrieveStreamPolicyEnum.LIFO; private static final String ROOT_NAMESPACE = "CU"; @@ -73,6 +75,7 @@ public final class GrCUDAContext { private final ArrayList disposables = new ArrayList<>(); private final AtomicInteger moduleId = new AtomicInteger(0); private volatile boolean cudaInitialized = false; + private final RetrieveStreamPolicyEnum retrieveStreamPolicy; // this is used to look up pre-existing call targets for "map" operations, see MapArrayNode private final ConcurrentHashMap, CallTarget> uncachedMapCallTargets = new ConcurrentHashMap<>(); @@ -80,6 +83,9 @@ public final class GrCUDAContext { public GrCUDAContext(Env env) { this.env = env; + // Retrieve the stream retrieval policy; + retrieveStreamPolicy = parseRetrieveStreamPolicy(env.getOptions().get(GrCUDAOptions.RetrieveStreamPolicy)); + // Retrieve the dependency computation policy; DependencyPolicyEnum dependencyPolicy = parseDependencyPolicy(env.getOptions().get(GrCUDAOptions.DependencyPolicy)); System.out.println("-- using " + dependencyPolicy.getName() + " dependency policy"); @@ -177,6 +183,10 @@ public ConcurrentHashMap, CallTarget> getMapCallTargets() { return uncachedMapCallTargets; } + public RetrieveStreamPolicyEnum getRetrieveStreamPolicy() { + return retrieveStreamPolicy; + } + /** * Compute the maximum number of concurrent threads that can be spawned by GrCUDA. * This value is usually smaller or equal than the number of logical CPU threads available on the machine. @@ -215,6 +225,18 @@ private static DependencyPolicyEnum parseDependencyPolicy(String policyString) { } } + @TruffleBoundary + private static RetrieveStreamPolicyEnum parseRetrieveStreamPolicy(String policyString) { + switch(policyString) { + case "lifo": + return RetrieveStreamPolicyEnum.LIFO; + case "always_new": + return RetrieveStreamPolicyEnum.ALWAYS_NEW; + default: + return GrCUDAContext.DEFAULT_RETRIEVE_STREAM_POLICY; + } + } + /** * Cleanup the GrCUDA context at the end of the execution; */ diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java index 5c5f3b65..6a14094c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java @@ -60,4 +60,6 @@ private GrCUDAOptions() { @Option(category = OptionCategory.USER, help = "Chose how data dependencies between GrCUDA computations are computed", stability = OptionStability.EXPERIMENTAL) // public static final OptionKey DependencyPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_DEPENDENCY_POLICY.getName()); + @Option(category = OptionCategory.USER, help = "Chose how streams for new GrCUDA computations are provided", stability = OptionStability.EXPERIMENTAL) // + public static final OptionKey RetrieveStreamPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_RETRIEVE_STREAM_POLICY.getName()); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 7081da95..ba303065 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -130,6 +130,10 @@ public CUDARuntime(GrCUDAContext context, Env env) { // using this slow/uncached instance since all calls are non-critical private static final InteropLibrary INTEROP = InteropLibrary.getFactory().getUncached(); + public GrCUDAContext getContext() { + return context; + } + interface CallSupport { String getName(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java index dc9ec62e..4583e528 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java @@ -10,7 +10,7 @@ public enum ExecutionPolicyEnum { this.name = name; } - public String getName() { + public final String getName() { return name; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 91e9722f..7a7f010d 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -4,12 +4,15 @@ import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import java.util.ArrayDeque; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Queue; import java.util.Set; public class GrCUDAStreamManager { @@ -27,8 +30,25 @@ public class GrCUDAStreamManager { */ protected final Map> activeComputationsPerStream = new HashMap<>(); + private final RetrieveStream retrieveStream; + + // TODO: tests on the 2 retrieve stream policies, with extra tests on LIFO; public GrCUDAStreamManager(CUDARuntime runtime) { + this(runtime, runtime.getContext().getRetrieveStreamPolicy()); + } + + public GrCUDAStreamManager(CUDARuntime runtime, RetrieveStreamPolicyEnum retrieveStreamPolicyEnum) { this.runtime = runtime; + switch(retrieveStreamPolicyEnum) { + case LIFO: + this.retrieveStream = new LifoRetrieveStream(); + break; + case ALWAYS_NEW: + this.retrieveStream = new AlwaysNewRetrieveStream(); + break; + default: + this.retrieveStream = new LifoRetrieveStream(); + } } /** @@ -37,13 +57,13 @@ public GrCUDAStreamManager(CUDARuntime runtime) { * @param vertex an input computation for which we want to assign a stream */ public void assignStream(ExecutionDAG.DAGVertex vertex) { + // If the computation cannot use customized streams, return immediately; if (vertex.getComputation().canUseStream()) { CUDAStream stream; if (vertex.isStart()) { // Else, if the computation doesn't have parents, provide a new stream to it; - // TODO: can we do better? E.g. re-use a stream that is not being used - stream = createStream(); + stream = retrieveStream.retrieve(); } else { // Else, compute the streams used by the parent computations. // If more than one stream is available, keep the first; @@ -73,6 +93,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { // FIXME: if I write on array x, launch K(Y) then read(x), the last comp on x is array access, so no sync is done!!! // Skip syncing if no computation is active; + // FIXME: this doesn't check if streams are empty! it works only at the very start if (!activeComputationsPerStream.isEmpty()) { Set computationsToSync = new HashSet<>(vertex.getParentComputations()); @@ -85,10 +106,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { // Synchronize the device; runtime.cudaDeviceSynchronize(); // All computations are now finished; - activeComputationsPerStream.keySet().forEach(s -> { - activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished); - activeComputationsPerStream.put(s, new HashSet<>()); - }); + resetActiveComputationState(); } else { // Else add the computations related to the additional streams to the set and sync it; System.out.println("--\tsyncing additional stream " + additionalStream.get() + "..."); @@ -147,9 +165,29 @@ protected void addActiveComputation(GrCUDAComputationalElement computation) { activeComputationsPerStream.get(computation.getStream()).add(computation); } + /** + * Remove a computation from the map that associates streams to their active computations, + * and mark the stream as free if no other computations are active on the stream; + * @param computation a computation that is no longer active + */ protected void removeActiveComputation(GrCUDAComputationalElement computation) { - // TODO: keep set of "free" streams; activeComputationsPerStream.get(computation.getStream()).remove(computation); + // If this stream doesn't have any computation associated to it, it's free to use; + if (activeComputationsPerStream.get(computation.getStream()).isEmpty()) { + retrieveStream.update(computation.getStream()); + } + } + + /** + * Reset the association between streams and computations. All computations are finished, and all streams are free; + */ + private void resetActiveComputationState() { + activeComputationsPerStream.keySet().forEach(s -> { + activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished); + activeComputationsPerStream.put(s, new HashSet<>()); + }); + // All streams are free; + retrieveStream.update(streams); } /** @@ -158,6 +196,50 @@ protected void removeActiveComputation(GrCUDAComputationalElement computation) { public void cleanup() { streams.forEach(runtime::cudaStreamDestroy); activeComputationsPerStream.clear(); + retrieveStream.cleanup(); streams.clear(); } + + /** + * By default, create a new stream every time; + */ + private class AlwaysNewRetrieveStream extends RetrieveStream { + + @Override + public CUDAStream retrieve() { + return createStream(); + } + } + + /** + * Keep a queue of free (currently not utilized) streams, and retrieve the oldest one added to the queue; + */ + private class LifoRetrieveStream extends RetrieveStream { + + /** + * Keep a queue of free streams; + */ + private final Queue freeStreams = new ArrayDeque<>(); + + @Override + void update(CUDAStream stream) { + freeStreams.add(stream); + } + + @Override + void update(Collection streams) { + freeStreams.addAll(streams); + } + + @Override + CUDAStream retrieve() { + if (freeStreams.isEmpty()) { + // Create a new stream if none is available; + return createStream(); + } else { + // Get the first stream available, and remove it from the list of free streams; + return freeStreams.poll(); + } + } + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStream.java new file mode 100644 index 00000000..b3c0933d --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStream.java @@ -0,0 +1,32 @@ +package com.nvidia.grcuda.gpu.stream; + +import java.util.Collection; + +/** + * This abstract class defines how a {@link GrCUDAStreamManager} + * will assign a {@link CUDAStream} to a {@link com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement} + * that has no dependency on active computations. + * For example, it could create a new stream or provide an existing stream that is currently not used; + */ +public abstract class RetrieveStream { + abstract CUDAStream retrieve(); + + /** + * Initialize the class with the provided stream, + * for example a new stream that can be provided by {@link RetrieveStream#retrieve()} + * @param stream a stream that should be associated to the class + */ + void update(CUDAStream stream) { } + + /** + * Initialize the class with the provided streams, + * for example new streams that can be provided by {@link RetrieveStream#retrieve()} + * @param streams a stream that should be associated to the class + */ + void update(Collection streams) { } + + /** + * Cleanup the internal state of the class, if required; + */ + void cleanup() { } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStreamPolicyEnum.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStreamPolicyEnum.java new file mode 100644 index 00000000..b4c3f059 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStreamPolicyEnum.java @@ -0,0 +1,16 @@ +package com.nvidia.grcuda.gpu.stream; + +public enum RetrieveStreamPolicyEnum { + LIFO("lifo"), + ALWAYS_NEW("always_new"); + + private final String name; + + RetrieveStreamPolicyEnum(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} From 30556b691e938ddb0d365be2acd558097b573d67 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 6 May 2020 20:00:43 +0200 Subject: [PATCH 054/236] fixed empty computation map not being tracked correctly --- .../gpu/stream/GrCUDAStreamManagerTest.java | 5 ++++- .../test/mock/GrCUDAStreamManagerMock.java | 10 +++++++-- .../gpu/stream/GrCUDAStreamManager.java | 22 ++++++++++++++----- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 9cd2c74c..284b0fe4 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -3,6 +3,7 @@ import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; +import com.nvidia.grcuda.test.mock.GrCUDAStreamManagerMock; import com.nvidia.grcuda.test.mock.KernelExecutionMock; import com.nvidia.grcuda.test.mock.ArgumentMock; import com.oracle.truffle.api.interop.UnsupportedTypeException; @@ -12,6 +13,7 @@ import java.util.Collections; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; public class GrCUDAStreamManagerTest { @Test @@ -126,7 +128,8 @@ public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeExcept assertEquals(0, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(3).getComputation().getStream())); - assertEquals(0, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(1).getComputation().getStream())); + // The stream has no active computation; + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(1).getComputation().getStream())); } @Test diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index 8af4a7c9..4598f87f 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -2,11 +2,13 @@ import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; -import java.util.HashSet; +import java.util.Map; +import java.util.Set; public class GrCUDAStreamManagerMock extends GrCUDAStreamManager { GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents) { @@ -26,7 +28,7 @@ public class GrCUDAStreamManagerMock extends GrCUDAStreamManager { public CUDAStream createStream() { CUDAStream newStream = new CUDAStream(0, numStreams++); streams.add(newStream); - this.activeComputationsPerStream.put(newStream, new HashSet<>()); +// this.activeComputationsPerStream.put(newStream, new HashSet<>()); return newStream; } @@ -44,4 +46,8 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { }); } } + + public Map> getActiveComputationsMap() { + return this.activeComputationsPerStream; + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 7a7f010d..c31b8854 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -146,7 +146,7 @@ private void syncParentStreamsImpl( public CUDAStream createStream() { CUDAStream newStream = runtime.cudaStreamCreate(streams.size()); streams.add(newStream); - activeComputationsPerStream.put(newStream, new HashSet<>()); +// activeComputationsPerStream.put(newStream, new HashSet<>()); return newStream; } @@ -162,7 +162,13 @@ public int getNumActiveComputationsOnStream(CUDAStream stream) { } protected void addActiveComputation(GrCUDAComputationalElement computation) { - activeComputationsPerStream.get(computation.getStream()).add(computation); + CUDAStream stream = computation.getStream(); + // Start tracking the stream if it wasn't already tracked; + if (!activeComputationsPerStream.containsKey(stream)) { + activeComputationsPerStream.put(stream, new HashSet<>()); + } + // Associate the computation to the stream; + activeComputationsPerStream.get(stream).add(computation); } /** @@ -171,10 +177,12 @@ protected void addActiveComputation(GrCUDAComputationalElement computation) { * @param computation a computation that is no longer active */ protected void removeActiveComputation(GrCUDAComputationalElement computation) { - activeComputationsPerStream.get(computation.getStream()).remove(computation); + CUDAStream stream = computation.getStream(); + activeComputationsPerStream.get(stream).remove(computation); // If this stream doesn't have any computation associated to it, it's free to use; - if (activeComputationsPerStream.get(computation.getStream()).isEmpty()) { - retrieveStream.update(computation.getStream()); + if (activeComputationsPerStream.get(stream).isEmpty()) { + activeComputationsPerStream.remove(stream); + retrieveStream.update(stream); } } @@ -184,8 +192,10 @@ protected void removeActiveComputation(GrCUDAComputationalElement computation) { private void resetActiveComputationState() { activeComputationsPerStream.keySet().forEach(s -> { activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished); - activeComputationsPerStream.put(s, new HashSet<>()); +// activeComputationsPerStream.put(s, new HashSet<>()); }); + // Streams don't have any active computation; + activeComputationsPerStream.clear(); // All streams are free; retrieveStream.update(streams); } From c1ced1aad5ccbd9f66cce8a59a732702dd7bfcc0 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 7 May 2020 10:40:59 +0200 Subject: [PATCH 055/236] added tests for retrive stream policies --- .../gpu/stream/GrCUDAStreamManagerTest.java | 64 ++++++++++++++++--- .../nvidia/grcuda/test/mock/ArgumentMock.java | 5 ++ .../test/mock/GrCUDAExecutionContextMock.java | 5 +- .../GrCUDAExecutionContextMockBuilder.java | 31 +++++++++ .../test/mock/GrCUDAStreamManagerMock.java | 7 +- .../grcuda/test/mock/KernelExecutionMock.java | 8 +++ .../grcuda/test/mock/SyncExecutionMock.java | 40 ++++++++++++ 7 files changed, 149 insertions(+), 11 deletions(-) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/SyncExecutionMock.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 284b0fe4..31a1fb43 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -2,23 +2,47 @@ import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; -import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; +import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; +import com.nvidia.grcuda.test.mock.ArgumentMock; +import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMockBuilder; import com.nvidia.grcuda.test.mock.GrCUDAStreamManagerMock; import com.nvidia.grcuda.test.mock.KernelExecutionMock; -import com.nvidia.grcuda.test.mock.ArgumentMock; +import com.nvidia.grcuda.test.mock.SyncExecutionMock; import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +@RunWith(Parameterized.class) public class GrCUDAStreamManagerTest { + /** + * Tests are executed for each of the {@link com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum} values; + * @return the current stream policy + */ + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[][]{ + {RetrieveStreamPolicyEnum.ALWAYS_NEW}, + {RetrieveStreamPolicyEnum.LIFO}, + }); + } + + private final RetrieveStreamPolicyEnum policy; + + public GrCUDAStreamManagerTest(RetrieveStreamPolicyEnum policy) { + this.policy = policy; + } + @Test public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveStreamPolicy(this.policy).build(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); @@ -44,7 +68,7 @@ public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { @Test public void streamSelectionMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // \----> C(2) @@ -74,7 +98,7 @@ public void streamSelectionMockTest() throws UnsupportedTypeException { @Test public void streamSelection2MockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) // \----> C(2) @@ -105,7 +129,7 @@ public void streamSelection2MockTest() throws UnsupportedTypeException { @Test public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(true); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveStreamPolicy(this.policy).build(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); @@ -134,7 +158,7 @@ public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeExcept @Test public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(true); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // C(2) @@ -166,7 +190,7 @@ public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { @Test public void streamSelection2WithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(true); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) // C(2) @@ -195,4 +219,28 @@ public void streamSelection2WithSyncMockTest() throws UnsupportedTypeException { assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(2).getComputation().getStream())); assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(4).getComputation().getStream())); } + + @Test + public void generateManyStreamsTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveStreamPolicy(this.policy).build(); + + // Create 2 parallel branches on dependent computations, and check that the total amount of streams created is what is expected; + int numLoops = 10; + for (int i = 0; i < numLoops * 2; i+=2) { + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(i))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(i + 1))).schedule(); + // Sync point; + new SyncExecutionMock(context, Arrays.asList(new ArgumentMock(i), new ArgumentMock(i + 1))).schedule(); + } + + ExecutionDAG dag = context.getDag(); + // Check that kernels have been given the right stream; + int numStreams = this.policy == RetrieveStreamPolicyEnum.LIFO ? 2 : numLoops * 2; + int streamCheck1 = this.policy == RetrieveStreamPolicyEnum.LIFO ? 0 : numLoops * 2 - 2; + int streamCheck2 = this.policy == RetrieveStreamPolicyEnum.LIFO ? 1 : numLoops * 2 - 1; + + assertEquals(numStreams, context.getStreamManager().getNumberOfStreams()); + assertEquals(streamCheck1, dag.getVertices().get(numLoops * 3 - 3).getComputation().getStream().getStreamNumber()); + assertEquals(streamCheck2, dag.getVertices().get(numLoops * 3 - 2).getComputation().getStream().getStreamNumber()); + } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/ArgumentMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/ArgumentMock.java index d1316af6..6f4f4b55 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/ArgumentMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/ArgumentMock.java @@ -15,4 +15,9 @@ public ArgumentMock(Object value, boolean isConst) { public ArgumentMock(Object value, boolean isConst, boolean isArray) { super(ArgumentType.POINTER, isArray, isConst, value); } + + @Override + public String toString() { + return this.getArgumentValue().toString() + (isArray ? "" : " - scalar") + (isConst ? " - const" : ""); + } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java index 8ca92a74..492d8b15 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java @@ -5,6 +5,7 @@ import com.nvidia.grcuda.gpu.computation.dependency.DefaultDependencyComputationBuilder; import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; /** * Mock class to test the GrCUDAExecutionContextTest, it has a null CUDARuntime; @@ -26,9 +27,9 @@ public GrCUDAExecutionContextMock(DependencyComputationBuilder dependencyBuilder new GrCUDAStreamManagerMock(null), dependencyBuilder); } - public GrCUDAExecutionContextMock(DependencyComputationBuilder dependencyBuilder, boolean syncStream) { + public GrCUDAExecutionContextMock(DependencyComputationBuilder dependencyBuilder, boolean syncStream, RetrieveStreamPolicyEnum retrieveStreamPolicy) { super(null, null, - new GrCUDAStreamManagerMock(null, syncStream), dependencyBuilder); + new GrCUDAStreamManagerMock(null, syncStream, retrieveStreamPolicy), dependencyBuilder); } public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java new file mode 100644 index 00000000..dbb19f95 --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java @@ -0,0 +1,31 @@ +package com.nvidia.grcuda.test.mock; + +import com.nvidia.grcuda.gpu.computation.dependency.DefaultDependencyComputationBuilder; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; +import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; + +public class GrCUDAExecutionContextMockBuilder { + + boolean syncStream = false; + DependencyComputationBuilder dependencyComputationBuilder = new DefaultDependencyComputationBuilder(); + RetrieveStreamPolicyEnum retrieveStreamPolicy = RetrieveStreamPolicyEnum.LIFO; + + public GrCUDAExecutionContextMock build() { + return new GrCUDAExecutionContextMock(dependencyComputationBuilder, syncStream, retrieveStreamPolicy); + } + + public GrCUDAExecutionContextMockBuilder setSyncStream(boolean syncStream) { + this.syncStream = syncStream; + return this; + } + + public GrCUDAExecutionContextMockBuilder setDependencyComputationBuilder(DependencyComputationBuilder dependencyComputationBuilder) { + this.dependencyComputationBuilder = dependencyComputationBuilder; + return this; + } + + public GrCUDAExecutionContextMockBuilder setRetrieveStreamPolicy(RetrieveStreamPolicyEnum retrieveStreamPolicy) { + this.retrieveStreamPolicy = retrieveStreamPolicy; + return this; + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index 4598f87f..f1da6ee2 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -11,6 +11,12 @@ import java.util.Set; public class GrCUDAStreamManagerMock extends GrCUDAStreamManager { + + GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents, RetrieveStreamPolicyEnum retrieveStreamPolicy) { + super(runtime, retrieveStreamPolicy); + this.syncParents = syncParents; + } + GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents) { super(runtime, RetrieveStreamPolicyEnum.ALWAYS_NEW); this.syncParents = syncParents; @@ -28,7 +34,6 @@ public class GrCUDAStreamManagerMock extends GrCUDAStreamManager { public CUDAStream createStream() { CUDAStream newStream = new CUDAStream(0, numStreams++); streams.add(newStream); -// this.activeComputationsPerStream.put(newStream, new HashSet<>()); return newStream; } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java index 0f7c09aa..4ed9aa6c 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java @@ -6,6 +6,7 @@ import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import java.util.List; +import java.util.stream.Collectors; /** * Mock class to test the DAG execution; @@ -24,5 +25,12 @@ public KernelExecutionMock(GrCUDAExecutionContext grCUDAExecutionContext, List Date: Thu, 7 May 2020 12:55:44 +0200 Subject: [PATCH 056/236] const arrays are kept on default stream --- .../grcuda/test/gpu/ExecutionDAGTest.java | 33 ++++++++++++++++++- .../WithConstDependencyComputationTest.java | 7 ++-- .../nvidia/grcuda/array/AbstractArray.java | 16 ++++----- .../gpu/computation/KernelExecution.java | 6 ++-- .../DefaultDependencyComputation.java | 6 ++++ .../dependency/DependencyComputation.java | 12 +++++++ .../WithConstDependencyComputation.java | 6 ++++ .../AbstractGrCUDAExecutionContext.java | 7 ++++ .../GrCUDAExecutionContext.java | 5 +++ .../SyncGrCUDAExecutionContext.java | 9 +++++ .../gpu/stream/GrCUDAStreamManager.java | 25 +++++++++----- 11 files changed, 108 insertions(+), 24 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 2d9d7181..9df51326 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -315,6 +315,37 @@ public void dependencyPipelineSimple2Test() { @Test public void dependencyPipelineSimple3Test() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + + final int numElements = 100000; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_2_KERNEL, "square", "const pointer, pointer, sint32"); + assertNotNull(squareKernel); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, z, numElements); + + // Verify the output; + assertEquals(0.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineSimple4Test() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { final int numElements = 100000; @@ -328,7 +359,7 @@ public void dependencyPipelineSimple3Test() { x.setArrayElement(i, 2.0); } // FIXME: if I write on array x, launch K(Y) then read(x), the last comp on x is array access, so no sync is done!!! -// y.setArrayElement(0, 0); + y.setArrayElement(0, 0); Value buildkernel = context.eval("grcuda", "buildkernel"); Value squareKernel = buildkernel.execute(SQUARE_2_KERNEL, "square", "const pointer, pointer, sint32"); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java index 6ed0dcc2..6079b34b 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -316,7 +316,7 @@ public void dependencyPipelineReadXTest() { try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { - final int numElements = 10; + final int numElements = 100; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); Value x = deviceArrayConstructor.execute("float", numElements); @@ -338,8 +338,9 @@ public void dependencyPipelineReadXTest() { configuredSquareKernel.execute(x, z, numElements); // Read the array x before syncing the computation. Depending on the GPU, this might sync the device; - assertEquals(2.0, x.getArrayElement(0).asFloat(), 0.1); - assertEquals(2.0, x.getArrayElement(numElements - 1).asFloat(), 0.1); + for (int i = 0; i < numElements; ++i) { + assertEquals(2.0, x.getArrayElement(i).asFloat(), 0.1); + } // Verify the output; assertEquals(4.0, y.getArrayElement(0).asFloat(), 0.1); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 8e03e6b5..24413604 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -86,6 +86,14 @@ public void setStreamMapping(CUDAStream streamMapping) { this.streamMapping = streamMapping; } + public boolean isLastComputationArrayAccess() { return isLastComputationArrayAccess; } + + public void setLastComputationArrayAccess(boolean lastComputationArrayAccess) { + isLastComputationArrayAccess = lastComputationArrayAccess; + } + + public abstract long getPointer(); + // Implementation of InteropLibrary @ExportMessage @@ -113,14 +121,6 @@ boolean isArrayElementReadable(long index) { @ExportMessage public abstract long getArraySize(); - public boolean isLastComputationArrayAccess() { return isLastComputationArrayAccess; } - - public void setLastComputationArrayAccess(boolean lastComputationArrayAccess) { - isLastComputationArrayAccess = lastComputationArrayAccess; - } - - public abstract long getPointer(); - // TODO: equals must be smarter than checking memory address, as a MultiDimView should be considered as part of its parent, // similarly to what "isLastComputationArrayAccess" is doing. // The hash instead should be different. We might also not touch equals, and have another method "isPartOf" diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index 03f88245..e4aba3c4 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -81,10 +81,10 @@ public CUDAStream getStream() { @Override public void associateArraysToStreamImpl() { - for (Object o : this.args.getOriginalArgs()) { - if (o instanceof AbstractArray) { + for (ComputationArgumentWithValue a : args.getKernelArgumentWithValues()) { + if (this.getDependencyComputation().keepArgument(a)) { // Attach the array to the stream, synchronously; - grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(this.getStream(), (AbstractArray) o); + grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(this.getStream(), (AbstractArray) a.getArgumentValue()); } } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java index 751f5abb..e28cfc6b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java @@ -1,5 +1,6 @@ package com.nvidia.grcuda.gpu.computation.dependency; +import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.computation.InitializeArgumentList; @@ -45,4 +46,9 @@ public List computeDependencies(GrCUDAComputationa // Return the list of arguments that created dependencies with the new computation; return new ArrayList<>(dependencies); } + + @Override + public boolean keepArgument(ComputationArgumentWithValue arg) { + return arg.getArgumentValue() instanceof AbstractArray; + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java index a2a2ba25..db281197 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java @@ -33,4 +33,16 @@ public abstract class DependencyComputation { public Collection getActiveArgumentSet() { return activeArgumentSet; } + + /** + * Provide an additional, optional filter used by dependency computations. + * The filter defines if and how arguments can be used in user-defined {@link GrCUDAComputationalElement} + * whose behaviour is influenced by how dependencies are computed. + * For example, a filter could keep only non-const array arguments, and ignore the others; + * @param arg an argument to analyse + * @return if this argument should be kept or not for the user-defined computation + */ + public boolean keepArgument(ComputationArgumentWithValue arg) { + return true; + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java index 835475d3..ddbc3eff 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java @@ -1,5 +1,6 @@ package com.nvidia.grcuda.gpu.computation.dependency; +import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; @@ -45,4 +46,9 @@ public List computeDependencies(GrCUDAComputationa // Return the list of arguments that created dependencies with the new computation; return dependencies; } + + @Override + public boolean keepArgument(ComputationArgumentWithValue arg) { + return (arg.getArgumentValue() instanceof AbstractArray) && !arg.isConst(); + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java index cb6aaed9..d7248a3e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java @@ -97,6 +97,13 @@ public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { return cudaRuntime.getArrayStreamArchitecturePolicy(); } + /** + * Check if any computation is currently marked as active, and is running on a stream managed by this context. + * If so, scheduling of new computations is likely to require synchronizations of some sort; + * @return if any computation is considered active on a stream managed by this context + */ + public abstract boolean isAnyComputationActive(); + /** * Delete internal structures that require manual cleanup operations; */ diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java index cb73c3d8..279453d4 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java @@ -62,6 +62,11 @@ public Object registerExecution(GrCUDAComputationalElement computation) throws U // } } + @Override + public boolean isAnyComputationActive() { + return this.streamManager.isAnyComputationActive(); + } + public GrCUDAStreamManager getStreamManager() { return streamManager; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java index b85c5101..64f6887b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java @@ -40,4 +40,13 @@ public Object registerExecution(GrCUDAComputationalElement computation) throws U return result; } + + /** + * All computations are synchronous, and atomic; + * @return false + */ + @Override + public boolean isAnyComputationActive() { + return false; + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index c31b8854..c537f34e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -32,7 +32,6 @@ public class GrCUDAStreamManager { private final RetrieveStream retrieveStream; - // TODO: tests on the 2 retrieve stream policies, with extra tests on LIFO; public GrCUDAStreamManager(CUDARuntime runtime) { this(runtime, runtime.getContext().getRetrieveStreamPolicy()); } @@ -91,26 +90,29 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { */ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { // FIXME: if I write on array x, launch K(Y) then read(x), the last comp on x is array access, so no sync is done!!! + // We can have a function in context called "is any computation running" that checks if the map is empty, and call it from array accesses + // Also add test for it! // Skip syncing if no computation is active; - // FIXME: this doesn't check if streams are empty! it works only at the very start - if (!activeComputationsPerStream.isEmpty()) { + System.out.println("--\tSYNC REQUEST by " + vertex.getComputation()); + if (this.isAnyComputationActive()) { Set computationsToSync = new HashSet<>(vertex.getParentComputations()); // Retrieve an additional stream dependency from the kernel, if required; Optional additionalStream = vertex.getComputation().additionalStreamDependency(); if (additionalStream.isPresent()) { + CUDAStream stream = additionalStream.get(); // If we require synchronization on the default stream, perform it in a specialized way; - if (additionalStream.get().isDefaultStream()) { - System.out.println("--\tsync stream " + additionalStream.get() + " by " + vertex.getComputation()); + if (stream.isDefaultStream()) { + System.out.println("--\tsync stream " + stream + " by " + vertex.getComputation()); // Synchronize the device; runtime.cudaDeviceSynchronize(); // All computations are now finished; resetActiveComputationState(); } else { // Else add the computations related to the additional streams to the set and sync it; - System.out.println("--\tsyncing additional stream " + additionalStream.get() + "..."); - computationsToSync.addAll(activeComputationsPerStream.get(additionalStream.get())); + System.out.println("--\tsyncing additional stream " + stream + "..."); + computationsToSync.addAll(activeComputationsPerStream.get(stream)); syncParentStreamsImpl(computationsToSync, vertex.getComputation()); } } else { @@ -146,7 +148,6 @@ private void syncParentStreamsImpl( public CUDAStream createStream() { CUDAStream newStream = runtime.cudaStreamCreate(streams.size()); streams.add(newStream); -// activeComputationsPerStream.put(newStream, new HashSet<>()); return newStream; } @@ -161,6 +162,13 @@ public int getNumActiveComputationsOnStream(CUDAStream stream) { return activeComputationsPerStream.get(stream).size(); } + /** + * Check if any computation is currently marked as active, and is running on a stream. + * If so, scheduling of new computations is likely to require synchronizations of some sort; + * @return if any computation is considered active on a stream + */ + public boolean isAnyComputationActive() { return !this.activeComputationsPerStream.isEmpty(); } + protected void addActiveComputation(GrCUDAComputationalElement computation) { CUDAStream stream = computation.getStream(); // Start tracking the stream if it wasn't already tracked; @@ -192,7 +200,6 @@ protected void removeActiveComputation(GrCUDAComputationalElement computation) { private void resetActiveComputationState() { activeComputationsPerStream.keySet().forEach(s -> { activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished); -// activeComputationsPerStream.put(s, new HashSet<>()); }); // Streams don't have any active computation; activeComputationsPerStream.clear(); From f31b03963c4e898e30b06e6681c77032f28eacab Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 7 May 2020 14:04:38 +0200 Subject: [PATCH 057/236] fixed host array access skipping sync if the array is on global stream and another kernel is running --- .../src/com/nvidia/grcuda/array/AbstractArray.java | 12 +++++++++++- .../src/com/nvidia/grcuda/array/DeviceArray.java | 4 ++-- .../nvidia/grcuda/array/MultiDimDeviceArrayView.java | 4 ++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 24413604..1a1437c5 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -45,7 +45,7 @@ public abstract class AbstractArray implements TruffleObject { * for array accesses that are immediately following the last one, as they are performed synchronously and there is no * reason to explicitly model them in the {@link com.nvidia.grcuda.gpu.ExecutionDAG}; */ - private boolean isLastComputationArrayAccess = false; + private boolean isLastComputationArrayAccess = true; public ElementType getElementType() { return elementType; @@ -94,6 +94,16 @@ public void setLastComputationArrayAccess(boolean lastComputationArrayAccess) { public abstract long getPointer(); + /** + * Check if this array can be accessed by the host (read/write) without having to schedule a {@link com.nvidia.grcuda.gpu.computation.ArrayAccessExecution}. + * This is possible if the last computation on this array was also a host array access, + * and the array is not exposed on the default stream while other GPU computations are running. + * @return if this array can be accessed by the host without scheduling a computation + */ + protected boolean canSkipScheduling() { + return this.isLastComputationArrayAccess() && !(this.streamMapping.isDefaultStream() && grCUDAExecutionContext.isAnyComputationActive()); + } + // Implementation of InteropLibrary @ExportMessage diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index 69ad95ab..49744f93 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -175,7 +175,7 @@ Object readArrayElement(long index, throw InvalidArrayIndexException.create(index); } try { - if (this.isLastComputationArrayAccess()) { + if (this.canSkipScheduling()) { // Fast path, skip the DAG scheduling; return readArrayElementImpl(index, elementTypeProfile); } else { @@ -214,7 +214,7 @@ public void writeArrayElement(long index, Object value, CompilerDirectives.transferToInterpreter(); throw InvalidArrayIndexException.create(index); } - if (this.isLastComputationArrayAccess()) { + if (this.canSkipScheduling()) { // Fast path, skip the DAG scheduling; writeArrayElementImpl(index, value, valueLibrary, elementTypeProfile); } else { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java index 0bc61665..61f5ea28 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java @@ -155,7 +155,7 @@ Object readArrayElement(long index, throw InvalidArrayIndexException.create(index); } try { - if (this.isLastComputationArrayAccess()) { + if (this.canSkipScheduling()) { // Fast path, skip the DAG scheduling; return readArrayElementImpl(index, elementTypeProfile); } else { @@ -201,7 +201,7 @@ void writeArrayElement(long index, Object value, CompilerDirectives.transferToInterpreter(); throw InvalidArrayIndexException.create(index); } - if (this.isLastComputationArrayAccess()) { + if (this.canSkipScheduling()) { // Fast path, skip the DAG scheduling; writeArrayElementImpl(index, value, valueLibrary, elementTypeProfile); } else { From 558b19caebcc9ba290c8f737c2db06a6519aceb3 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 7 May 2020 18:08:00 +0200 Subject: [PATCH 058/236] added new tests for sync const dag --- .../WithConstDependencyComputationTest.java | 224 ++++++++++++++++-- 1 file changed, 206 insertions(+), 18 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java index 6079b34b..32e3ee51 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -5,6 +5,7 @@ import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.test.mock.ArgumentMock; import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; +import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMockBuilder; import com.nvidia.grcuda.test.mock.KernelExecutionMock; import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.graalvm.polyglot.Context; @@ -115,26 +116,26 @@ public void forkedComputationTest() throws UnsupportedTypeException { // Check the DAG structure; assertEquals(3, dag.getNumVertices()); assertEquals(2, dag.getNumEdges()); - assertEquals(2, dag.getFrontier().size()); + assertEquals(3, dag.getFrontier().size()); - assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isFrontier()); assertTrue(dag.getVertices().get(0).isStart()); assertTrue(dag.getVertices().get(1).isFrontier()); assertFalse(dag.getVertices().get(1).isStart()); assertTrue(dag.getVertices().get(2).isFrontier()); - assertTrue(dag.getVertices().get(2).isStart()); + assertFalse(dag.getVertices().get(2).isStart()); assertEquals(dag.getVertices().get(0), dag.getVertices().get(1).getParentVertices().get(0)); - assertEquals(0, dag.getVertices().get(2).getParentVertices().size()); + assertEquals(1, dag.getVertices().get(2).getParentVertices().size()); assertFalse(dag.getVertices().get(2).getParentVertices().contains(dag.getVertices().get(1))); assertFalse(dag.getVertices().get(1).getChildVertices().contains(dag.getVertices().get(2))); // Add a fourth computation that depends on both B and C, and depends on both; // A(1) -> B(1R) -> D(1) - // C(1R) / + // \- C(1R) / new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); assertEquals(4, dag.getNumVertices()); - assertEquals(3, dag.getNumEdges()); + assertEquals(4, dag.getNumEdges()); assertEquals(1, dag.getFrontier().size()); } @@ -144,7 +145,7 @@ public void complexFrontierMockTest() throws UnsupportedTypeException { // A(1R,2) -> B(1) -> D(1R,3) // \----> C(2R) \----> E(1R,4) -> F(4) - // The final frontier is composed by C(2), D(1, 3), E(1), F(4); + // The final frontier is composed by A(2), B(1), C(2), D(1, 3), E(1), F(4); new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2, true))).schedule(); @@ -157,14 +158,13 @@ public void complexFrontierMockTest() throws UnsupportedTypeException { // Check the DAG structure; assertEquals(6, dag.getNumVertices()); assertEquals(5, dag.getNumEdges()); - assertEquals(4, dag.getFrontier().size()); + assertEquals(6, dag.getFrontier().size()); // Check updates to frontier and start status; - assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3), dag.getVertices().get(4), dag.getVertices().get(5))), - new HashSet<>(dag.getFrontier())); + assertEquals(new HashSet<>(dag.getVertices()), new HashSet<>(dag.getFrontier())); - assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isFrontier()); assertTrue(dag.getVertices().get(0).isStart()); - assertFalse(dag.getVertices().get(1).isFrontier()); + assertTrue(dag.getVertices().get(1).isFrontier()); assertFalse(dag.getVertices().get(1).isStart()); assertTrue(dag.getVertices().get(2).isFrontier()); assertFalse(dag.getVertices().get(2).isStart()); @@ -180,13 +180,149 @@ public void complexFrontierMockTest() throws UnsupportedTypeException { assertFalse(dag.getVertices().get(2).getChildVertices().contains(dag.getVertices().get(3))); } + @Test + public void complexFrontier2MockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() + .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).build(); + + // A(1R,2) -> B(1) -> D(1R,3) ---------> G(1,3,4) + // \- C(2R) \- E(1R,4) --/--> F(4) -/ + // The final frontier is composed by A(2), C(2R), G(1, 3, 4); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2, true))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(3), new ArgumentMock(4))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(7, dag.getNumVertices()); + assertEquals(8, dag.getNumEdges()); + assertEquals(3, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(0), dag.getVertices().get(2), dag.getVertices().get(6))), + new HashSet<>(dag.getFrontier())); + + assertTrue(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertFalse(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertFalse(dag.getVertices().get(2).isStart()); + assertFalse(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + assertFalse(dag.getVertices().get(4).isFrontier()); + assertFalse(dag.getVertices().get(4).isStart()); + assertFalse(dag.getVertices().get(5).isFrontier()); + assertFalse(dag.getVertices().get(5).isStart()); + assertTrue(dag.getVertices().get(6).isFrontier()); + assertFalse(dag.getVertices().get(5).isStart()); + // Check that D is a child of B and C and D are not connected; + assertEquals(dag.getVertices().get(1), dag.getVertices().get(3).getParentVertices().get(0)); + assertFalse(dag.getVertices().get(3).getParentVertices().contains(dag.getVertices().get(2))); + assertFalse(dag.getVertices().get(2).getChildVertices().contains(dag.getVertices().get(3))); + // Check that D and E are not connected; + assertFalse(dag.getVertices().get(4).getParentVertices().contains(dag.getVertices().get(3))); + assertFalse(dag.getVertices().get(3).getChildVertices().contains(dag.getVertices().get(4))); + // Check that G is child exactly of D and F; + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(3), dag.getVertices().get(5))), new HashSet<>(dag.getVertices().get(6).getParentVertices())); + } + + @Test + public void dependencyPipelineSimpleWithSyncMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() + .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).setSyncStream(true).build(); + // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, + // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), + // and kernel 4 (argument "3" is active); + // A(1r) -> C(1, 2) -> D(2) + // B(1r) -/ + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1, true))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1, true))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(4, dag.getNumVertices()); + assertEquals(3, dag.getNumEdges()); + assertEquals(1, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(new HashSet<>(Collections.singletonList(dag.getVertices().get(3))), + new HashSet<>(dag.getFrontier())); + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertTrue(dag.getVertices().get(1).isStart()); + assertFalse(dag.getVertices().get(2).isFrontier()); + assertFalse(dag.getVertices().get(2).isStart()); + assertTrue(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + // Check if the third vertex is a child of first and second; + assertEquals(2, dag.getVertices().get(2).getParents().size()); + assertEquals(new HashSet<>(dag.getVertices().get(2).getParentVertices()), + new HashSet<>(Arrays.asList(dag.getVertices().get(0), dag.getVertices().get(1)))); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(0).getChildVertices().get(0)); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(1).getChildVertices().get(0)); + // Check if the fourth vertex is a child of the third; + assertEquals(1, dag.getVertices().get(3).getParents().size()); + assertEquals(1, dag.getVertices().get(2).getChildren().size()); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(3).getParentVertices().get(0)); + assertEquals(dag.getVertices().get(3), dag.getVertices().get(2).getChildVertices().get(0)); + } + + @Test + public void forkedComputationWithSyncTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() + .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).setSyncStream(true).build(); + + // A(1) --> B(1R) + // C(1R) + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1, true))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1, true))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(3, dag.getNumVertices()); + assertEquals(1, dag.getNumEdges()); + assertEquals(2, dag.getFrontier().size()); + + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertTrue(dag.getVertices().get(1).isFrontier()); + assertFalse(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertTrue(dag.getVertices().get(2).isStart()); + + assertEquals(dag.getVertices().get(0), dag.getVertices().get(1).getParentVertices().get(0)); + assertEquals(0, dag.getVertices().get(2).getParentVertices().size()); + assertFalse(dag.getVertices().get(2).getParentVertices().contains(dag.getVertices().get(1))); + assertFalse(dag.getVertices().get(1).getChildVertices().contains(dag.getVertices().get(2))); + + // Add a fourth computation that depends on both B and C, and depends on both; + // A(1) -> B(1R) -> D(1) + // C(1R) / + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + assertEquals(4, dag.getNumVertices()); + assertEquals(3, dag.getNumEdges()); + assertEquals(1, dag.getFrontier().size()); + } + @Test public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(new WithConstDependencyComputationBuilder()); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() + .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).setSyncStream(true).build(); // A(1R,2) -> B(1) -> D(1R,3) - // C(2R) E(1R,4) -> F(4) - // The final frontier is composed by C(2), D(1, 3), F(4); + // C(2R) E(1R,4) -> F(4) + // The final frontier is composed by C(2R), D(1R, 3), F(4); new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2, true))).schedule(); @@ -210,16 +346,68 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { assertFalse(dag.getVertices().get(1).isStart()); assertTrue(dag.getVertices().get(2).isFrontier()); assertTrue(dag.getVertices().get(2).isStart()); - assertFalse(dag.getVertices().get(3).isFrontier()); + assertTrue(dag.getVertices().get(3).isFrontier()); assertFalse(dag.getVertices().get(3).isStart()); - assertTrue(dag.getVertices().get(4).isFrontier()); + assertFalse(dag.getVertices().get(4).isFrontier()); assertTrue(dag.getVertices().get(4).isStart()); assertTrue(dag.getVertices().get(5).isFrontier()); assertFalse(dag.getVertices().get(5).isStart()); - // Check that D is a child of B, and C and D are not connected; + // Check that D is a child of B and C and D are not connected; + assertEquals(dag.getVertices().get(1), dag.getVertices().get(3).getParentVertices().get(0)); + assertFalse(dag.getVertices().get(3).getParentVertices().contains(dag.getVertices().get(2))); + assertFalse(dag.getVertices().get(2).getChildVertices().contains(dag.getVertices().get(3))); + // Check that D and E are not connected; + assertFalse(dag.getVertices().get(4).getParentVertices().contains(dag.getVertices().get(3))); + assertFalse(dag.getVertices().get(3).getChildVertices().contains(dag.getVertices().get(4))); + } + + @Test + public void complexFrontier2WithSyncMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() + .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).setSyncStream(true).build(); + + // A(1R,2) -> B(1) -> D(1R,3) ---------> G(1, 3, 4) + // C(2R) E(1R,4) -> F(4) -/ + // The final frontier is composed by C(2R), G(1, 3, 4); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2, true))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(3), new ArgumentMock(4))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(7, dag.getNumVertices()); + assertEquals(5, dag.getNumEdges()); + assertEquals(2, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(6))), + new HashSet<>(dag.getFrontier())); + + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertFalse(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertTrue(dag.getVertices().get(2).isStart()); + assertFalse(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + assertFalse(dag.getVertices().get(4).isFrontier()); + assertTrue(dag.getVertices().get(4).isStart()); + assertFalse(dag.getVertices().get(5).isFrontier()); + assertFalse(dag.getVertices().get(5).isStart()); + // Check that D is a child of B and C and D are not connected; assertEquals(dag.getVertices().get(1), dag.getVertices().get(3).getParentVertices().get(0)); assertFalse(dag.getVertices().get(3).getParentVertices().contains(dag.getVertices().get(2))); assertFalse(dag.getVertices().get(2).getChildVertices().contains(dag.getVertices().get(3))); + // Check that D and E are not connected; + assertFalse(dag.getVertices().get(4).getParentVertices().contains(dag.getVertices().get(3))); + assertFalse(dag.getVertices().get(3).getChildVertices().contains(dag.getVertices().get(4))); + // Check that G is child exactly of D and F; + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(3), dag.getVertices().get(5))), new HashSet<>(dag.getVertices().get(6).getParentVertices())); } private static final int NUM_THREADS_PER_BLOCK = 128; From 4efe7fbfac909726b15fb8fa6627da9639c23584 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 8 May 2020 13:54:26 +0200 Subject: [PATCH 059/236] removed unnecessary dependencies in DAG creation --- .../WithConstDependencyComputationTest.java | 7 ++- .../com/nvidia/grcuda/gpu/ExecutionDAG.java | 52 ++++++++++++++++++- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java index 32e3ee51..48153052 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -186,7 +186,7 @@ public void complexFrontier2MockTest() throws UnsupportedTypeException { .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).build(); // A(1R,2) -> B(1) -> D(1R,3) ---------> G(1,3,4) - // \- C(2R) \- E(1R,4) --/--> F(4) -/ + // \- C(2R) \- E(1R,4) ----> F(4) -/ // The final frontier is composed by A(2), C(2R), G(1, 3, 4); new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); @@ -200,7 +200,7 @@ public void complexFrontier2MockTest() throws UnsupportedTypeException { // Check the DAG structure; assertEquals(7, dag.getNumVertices()); - assertEquals(8, dag.getNumEdges()); + assertEquals(7, dag.getNumEdges()); assertEquals(3, dag.getFrontier().size()); // Check updates to frontier and start status; assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(0), dag.getVertices().get(2), dag.getVertices().get(6))), @@ -229,6 +229,9 @@ public void complexFrontier2MockTest() throws UnsupportedTypeException { assertFalse(dag.getVertices().get(3).getChildVertices().contains(dag.getVertices().get(4))); // Check that G is child exactly of D and F; assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(3), dag.getVertices().get(5))), new HashSet<>(dag.getVertices().get(6).getParentVertices())); + // Check that E and G are not connected; + assertFalse(dag.getVertices().get(6).getParentVertices().contains(dag.getVertices().get(4))); + assertFalse(dag.getVertices().get(4).getChildVertices().contains(dag.getVertices().get(6))); } @Test diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java index f9d562e2..86a55df3 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java @@ -4,9 +4,15 @@ import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.oracle.truffle.api.interop.TruffleObject; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Queue; +import java.util.Set; import java.util.stream.Collectors; /** @@ -38,13 +44,29 @@ public DAGVertex append(GrCUDAComputationalElement kernel) { ////////////////////////////// // For each vertex in the frontier, compute dependencies of the vertex; + + // Collect the vertices from which there are dependencies; + Map> dependentVerticesMap = new HashMap<>(); + List dependentVertices = new ArrayList<>(); for (DAGVertex frontierVertex : cleanFrontier()) { Collection dependencies = computeDependencies(frontierVertex, newVertex); if (dependencies.size() > 0) { - // Create a new edge between the two vertices (book-keeping is automatic); - new DAGEdge(frontierVertex, newVertex, dependencies); + dependentVerticesMap.put(frontierVertex, dependencies); + dependentVertices.add(frontierVertex); } } + + // Filter dependencies that are unnecessary. For example, + // if a computation C depends on computations A and B, and B depends on A; + dependentVertices = dependentVertices.stream() + .filter(v -> keepDependency(v, dependentVerticesMap.keySet())).collect(Collectors.toList()); + + // Create new edges; + for (DAGVertex dependentVertex : dependentVertices) { + // Create a new edge between the two vertices (book-keeping is automatic); + new DAGEdge(dependentVertex, newVertex, dependentVerticesMap.get(dependentVertex)); + } + // Remove from the frontier vertices that no longer belong to it; frontier = cleanFrontier(); // Add the new vertex to the frontier if it has no children; @@ -58,6 +80,32 @@ private Collection computeDependencies(DAGVertex s return startVertex.getComputation().computeDependencies(endVertex.getComputation()); } + /** + * Determine if a vertex should really be a dependency, given a set of possible dependencies. + * The vertex is not going to be a dependency if any of its children is included in the dependency set; + * @param vertex a vertex we want to possibly filter, if it's an unnecessary dependency + * @param dependentVertices a list of possible dependencies + * @return if the vertex should be kept in the dependencies + */ + private boolean keepDependency(DAGVertex vertex, Set dependentVertices) { + // Perform a BFS starting from the children of "vertex"; + Queue queue = new ArrayDeque<>(vertex.getChildVertices()); + Set visitedVertices = new HashSet<>(); + + while (!queue.isEmpty()) { + DAGVertex currentVertex = queue.poll(); + // If the current vertex is in the set of candidate dependencies, we can filter it out; + if (dependentVertices.contains(currentVertex)) { + return false; + } else if (!visitedVertices.contains(currentVertex)) { + // Add children to the queue, but only if the current vertex hasn't been seen yet; + visitedVertices.add(currentVertex); + queue.addAll(currentVertex.getChildVertices()); + } + } + return true; + } + public List getVertices() { return vertices; } From 57246de5c93e9adfbaff4cef07fdf4492e8e93e3 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 9 May 2020 10:36:31 +0200 Subject: [PATCH 060/236] added strategy to handle redundant dependencies based on dependency computation chosen; added bench6 --- .../grcuda/test/gpu/ExecutionDAGTest.java | 5 +- .../WithConstDependencyComputationTest.java | 22 +-- .../gpu/stream/GrCUDAStreamManagerTest.java | 2 +- .../test/mock/GrCUDAExecutionContextMock.java | 15 +- .../GrCUDAExecutionContextMockBuilder.java | 11 +- .../test/mock/GrCUDAStreamManagerMock.java | 2 +- .../src/com/nvidia/grcuda/GrCUDAContext.java | 17 +- .../nvidia/grcuda/array/AbstractArray.java | 3 +- .../AbstractGrCUDAExecutionContext.java | 25 ++- .../{ => executioncontext}/ExecutionDAG.java | 85 +++++--- .../GrCUDAExecutionContext.java | 15 +- .../gpu/executioncontext/KeepDependency.java | 14 ++ .../SyncGrCUDAExecutionContext.java | 10 +- .../gpu/stream/GrCUDAStreamManager.java | 4 +- .../python/benchmark/bench/bench_5.py | 184 ++++++++++++++++++ .../python/benchmark/benchmark_main.py | 4 + 16 files changed, 324 insertions(+), 94 deletions(-) rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/{ => executioncontext}/ExecutionDAG.java (79%) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/KeepDependency.java create mode 100644 projects/resources/python/benchmark/bench/bench_5.py diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 9df51326..61f430cb 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -1,6 +1,7 @@ package com.nvidia.grcuda.test.gpu; -import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; +import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; import com.nvidia.grcuda.test.mock.KernelExecutionMock; @@ -23,7 +24,7 @@ public class ExecutionDAGTest { @Test public void executionDAGConstructorTest() { - ExecutionDAG dag = new ExecutionDAG(); + ExecutionDAG dag = new ExecutionDAG(DependencyPolicyEnum.DEFAULT); assertTrue(dag.getVertices().isEmpty()); assertTrue(dag.getEdges().isEmpty()); assertTrue(dag.getFrontier().isEmpty()); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java index 48153052..2cad1d3a 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -1,7 +1,7 @@ package com.nvidia.grcuda.test.gpu.executioncontext; -import com.nvidia.grcuda.gpu.ExecutionDAG; -import com.nvidia.grcuda.gpu.computation.dependency.WithConstDependencyComputationBuilder; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; +import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.test.mock.ArgumentMock; import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; @@ -25,7 +25,7 @@ public class WithConstDependencyComputationTest { @Test public void addVertexToDAGTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(new WithConstDependencyComputationBuilder()); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.WITH_CONST); // Create two mock kernel executions; new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); @@ -59,7 +59,7 @@ public void addVertexToDAGTest() throws UnsupportedTypeException { @Test public void dependencyPipelineSimpleMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(new WithConstDependencyComputationBuilder()); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.WITH_CONST); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); @@ -103,7 +103,7 @@ public void dependencyPipelineSimpleMockTest() throws UnsupportedTypeException { @Test public void forkedComputationTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(new WithConstDependencyComputationBuilder()); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.WITH_CONST); // A(1) --> B(1R) // \-> C(1R) @@ -141,7 +141,7 @@ public void forkedComputationTest() throws UnsupportedTypeException { @Test public void complexFrontierMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(new WithConstDependencyComputationBuilder()); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.WITH_CONST); // A(1R,2) -> B(1) -> D(1R,3) // \----> C(2R) \----> E(1R,4) -> F(4) @@ -183,7 +183,7 @@ public void complexFrontierMockTest() throws UnsupportedTypeException { @Test public void complexFrontier2MockTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() - .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).build(); + .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).build(); // A(1R,2) -> B(1) -> D(1R,3) ---------> G(1,3,4) // \- C(2R) \- E(1R,4) ----> F(4) -/ @@ -237,7 +237,7 @@ public void complexFrontier2MockTest() throws UnsupportedTypeException { @Test public void dependencyPipelineSimpleWithSyncMockTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() - .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).setSyncStream(true).build(); + .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).setSyncStream(true).build(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); @@ -282,7 +282,7 @@ public void dependencyPipelineSimpleWithSyncMockTest() throws UnsupportedTypeExc @Test public void forkedComputationWithSyncTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() - .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).setSyncStream(true).build(); + .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).setSyncStream(true).build(); // A(1) --> B(1R) // C(1R) @@ -321,7 +321,7 @@ public void forkedComputationWithSyncTest() throws UnsupportedTypeException { @Test public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() - .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).setSyncStream(true).build(); + .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).setSyncStream(true).build(); // A(1R,2) -> B(1) -> D(1R,3) // C(2R) E(1R,4) -> F(4) @@ -367,7 +367,7 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { @Test public void complexFrontier2WithSyncMockTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() - .setDependencyComputationBuilder(new WithConstDependencyComputationBuilder()).setSyncStream(true).build(); + .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).setSyncStream(true).build(); // A(1R,2) -> B(1) -> D(1R,3) ---------> G(1, 3, 4) // C(2R) E(1R,4) -> F(4) -/ diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 31a1fb43..d1de0747 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -1,6 +1,6 @@ package com.nvidia.grcuda.test.gpu.stream; -import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; import com.nvidia.grcuda.test.mock.ArgumentMock; diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java index 492d8b15..eea54ad3 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java @@ -2,8 +2,7 @@ import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; -import com.nvidia.grcuda.gpu.computation.dependency.DefaultDependencyComputationBuilder; -import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; @@ -14,22 +13,22 @@ public class GrCUDAExecutionContextMock extends GrCUDAExecutionContext { public GrCUDAExecutionContextMock(boolean syncStream) { super(null, null, - new GrCUDAStreamManagerMock(null, syncStream), new DefaultDependencyComputationBuilder()); + new GrCUDAStreamManagerMock(null, syncStream), DependencyPolicyEnum.DEFAULT); } public GrCUDAExecutionContextMock() { super(null, null, - new GrCUDAStreamManagerMock(null), new DefaultDependencyComputationBuilder()); + new GrCUDAStreamManagerMock(null), DependencyPolicyEnum.DEFAULT); } - public GrCUDAExecutionContextMock(DependencyComputationBuilder dependencyBuilder) { + public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy) { super(null, null, - new GrCUDAStreamManagerMock(null), dependencyBuilder); + new GrCUDAStreamManagerMock(null), dependencyPolicy); } - public GrCUDAExecutionContextMock(DependencyComputationBuilder dependencyBuilder, boolean syncStream, RetrieveStreamPolicyEnum retrieveStreamPolicy) { + public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy, boolean syncStream, RetrieveStreamPolicyEnum retrieveStreamPolicy) { super(null, null, - new GrCUDAStreamManagerMock(null, syncStream, retrieveStreamPolicy), dependencyBuilder); + new GrCUDAStreamManagerMock(null, syncStream, retrieveStreamPolicy), dependencyPolicy); } public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java index dbb19f95..eabbf01b 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java @@ -1,17 +1,16 @@ package com.nvidia.grcuda.test.mock; -import com.nvidia.grcuda.gpu.computation.dependency.DefaultDependencyComputationBuilder; -import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; public class GrCUDAExecutionContextMockBuilder { boolean syncStream = false; - DependencyComputationBuilder dependencyComputationBuilder = new DefaultDependencyComputationBuilder(); + DependencyPolicyEnum dependencyPolicy = DependencyPolicyEnum.DEFAULT; RetrieveStreamPolicyEnum retrieveStreamPolicy = RetrieveStreamPolicyEnum.LIFO; public GrCUDAExecutionContextMock build() { - return new GrCUDAExecutionContextMock(dependencyComputationBuilder, syncStream, retrieveStreamPolicy); + return new GrCUDAExecutionContextMock(dependencyPolicy, syncStream, retrieveStreamPolicy); } public GrCUDAExecutionContextMockBuilder setSyncStream(boolean syncStream) { @@ -19,8 +18,8 @@ public GrCUDAExecutionContextMockBuilder setSyncStream(boolean syncStream) { return this; } - public GrCUDAExecutionContextMockBuilder setDependencyComputationBuilder(DependencyComputationBuilder dependencyComputationBuilder) { - this.dependencyComputationBuilder = dependencyComputationBuilder; + public GrCUDAExecutionContextMockBuilder setDependencyPolicy(DependencyPolicyEnum dependencyPolicy) { + this.dependencyPolicy = dependencyPolicy; return this; } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index f1da6ee2..d11e663a 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -1,7 +1,7 @@ package com.nvidia.grcuda.test.mock; import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index 819c027e..118ad7ae 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -89,17 +89,6 @@ public GrCUDAContext(Env env) { // Retrieve the dependency computation policy; DependencyPolicyEnum dependencyPolicy = parseDependencyPolicy(env.getOptions().get(GrCUDAOptions.DependencyPolicy)); System.out.println("-- using " + dependencyPolicy.getName() + " dependency policy"); - DependencyComputationBuilder dependencyBuilder; - switch (dependencyPolicy) { - case WITH_CONST: - dependencyBuilder = new WithConstDependencyComputationBuilder(); - break; - case DEFAULT: - dependencyBuilder = new DefaultDependencyComputationBuilder(); - break; - default: - dependencyBuilder = new DefaultDependencyComputationBuilder(); - } // Retrieve the execution policy; ExecutionPolicyEnum executionPolicy = parseExecutionPolicy(env.getOptions().get(GrCUDAOptions.ExecutionPolicy)); @@ -107,13 +96,13 @@ public GrCUDAContext(Env env) { System.out.println("-- using " + executionPolicy.getName() + " execution policy"); switch (executionPolicy) { case SYNC: - this.grCUDAExecutionContext = new SyncGrCUDAExecutionContext(this, env, dependencyBuilder); + this.grCUDAExecutionContext = new SyncGrCUDAExecutionContext(this, env, dependencyPolicy); break; case DEFAULT: - this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env ,dependencyBuilder); + this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env ,dependencyPolicy); break; default: - this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env, dependencyBuilder); + this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env, dependencyPolicy); } Namespace namespace = new Namespace(ROOT_NAMESPACE); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 1a1437c5..1f308642 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -2,6 +2,7 @@ import com.nvidia.grcuda.ElementType; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.DefaultStream; import com.oracle.truffle.api.interop.InteropLibrary; @@ -43,7 +44,7 @@ public abstract class AbstractArray implements TruffleObject { * Tracks whether the last operation done on the native memory underlying this array is a read/write operation * handled by the CPU. If so, we can avoid creating {@link com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement} * for array accesses that are immediately following the last one, as they are performed synchronously and there is no - * reason to explicitly model them in the {@link com.nvidia.grcuda.gpu.ExecutionDAG}; + * reason to explicitly model them in the {@link ExecutionDAG}; */ private boolean isLastComputationArrayAccess = true; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java index d7248a3e..518502bd 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/AbstractGrCUDAExecutionContext.java @@ -3,11 +3,13 @@ import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.Kernel; import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.computation.dependency.DefaultDependencyComputationBuilder; import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; +import com.nvidia.grcuda.gpu.computation.dependency.WithConstDependencyComputationBuilder; import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.interop.UnsupportedTypeException; @@ -39,21 +41,30 @@ public abstract class AbstractGrCUDAExecutionContext { /** * Reference to the computational DAG that represents dependencies between computations; */ - protected final ExecutionDAG dag = new ExecutionDAG(); + protected final ExecutionDAG dag; /** * Reference to how dependencies between computational elements are computed within this execution context; */ private final DependencyComputationBuilder dependencyBuilder; - public AbstractGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyComputationBuilder dependencyBuilder) { - this.cudaRuntime = new CUDARuntime(context, env); - this.dependencyBuilder = dependencyBuilder; + public AbstractGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyPolicyEnum dependencyPolicy) { + this(new CUDARuntime(context, env), dependencyPolicy); } - public AbstractGrCUDAExecutionContext(CUDARuntime cudaRuntime, DependencyComputationBuilder dependencyBuilder) { + public AbstractGrCUDAExecutionContext(CUDARuntime cudaRuntime, DependencyPolicyEnum dependencyPolicy) { this.cudaRuntime = cudaRuntime; - this.dependencyBuilder = dependencyBuilder; + switch (dependencyPolicy) { + case WITH_CONST: + this.dependencyBuilder = new WithConstDependencyComputationBuilder(); + break; + case DEFAULT: + this.dependencyBuilder = new DefaultDependencyComputationBuilder(); + break; + default: + this.dependencyBuilder = new DefaultDependencyComputationBuilder(); + } + this.dag = new ExecutionDAG(dependencyPolicy); } /** diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionDAG.java similarity index 79% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionDAG.java index 86a55df3..ed5fadd8 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/ExecutionDAG.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionDAG.java @@ -1,7 +1,8 @@ -package com.nvidia.grcuda.gpu; +package com.nvidia.grcuda.gpu.executioncontext; import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.oracle.truffle.api.interop.TruffleObject; import java.util.ArrayDeque; @@ -24,12 +25,26 @@ public class ExecutionDAG implements TruffleObject { private final List vertices = new ArrayList<>(); private final List edges = new ArrayList<>(); + private final KeepDependency keepDependency; /** * Current frontier of the DAG, i.e. vertices with no children. */ private List frontier = new ArrayList<>(); + public ExecutionDAG(DependencyPolicyEnum dependencyPolicy) { + switch (dependencyPolicy) { + case WITH_CONST: + this.keepDependency = new WithConstKeepDependency(); + break; + case DEFAULT: + this.keepDependency = new DefaultKeepDependency(); + break; + default: + this.keepDependency = new DefaultKeepDependency(); + } + } + /** * Add a new computation to the graph, and compute its dependencies. * @param kernel a kernel computation, containing kernel configuration and input arguments @@ -59,7 +74,8 @@ public DAGVertex append(GrCUDAComputationalElement kernel) { // Filter dependencies that are unnecessary. For example, // if a computation C depends on computations A and B, and B depends on A; dependentVertices = dependentVertices.stream() - .filter(v -> keepDependency(v, dependentVerticesMap.keySet())).collect(Collectors.toList()); + .filter(v -> keepDependency.keepDependency(v, dependentVerticesMap.keySet())) + .collect(Collectors.toList()); // Create new edges; for (DAGVertex dependentVertex : dependentVertices) { @@ -80,32 +96,6 @@ private Collection computeDependencies(DAGVertex s return startVertex.getComputation().computeDependencies(endVertex.getComputation()); } - /** - * Determine if a vertex should really be a dependency, given a set of possible dependencies. - * The vertex is not going to be a dependency if any of its children is included in the dependency set; - * @param vertex a vertex we want to possibly filter, if it's an unnecessary dependency - * @param dependentVertices a list of possible dependencies - * @return if the vertex should be kept in the dependencies - */ - private boolean keepDependency(DAGVertex vertex, Set dependentVertices) { - // Perform a BFS starting from the children of "vertex"; - Queue queue = new ArrayDeque<>(vertex.getChildVertices()); - Set visitedVertices = new HashSet<>(); - - while (!queue.isEmpty()) { - DAGVertex currentVertex = queue.poll(); - // If the current vertex is in the set of candidate dependencies, we can filter it out; - if (dependentVertices.contains(currentVertex)) { - return false; - } else if (!visitedVertices.contains(currentVertex)) { - // Add children to the queue, but only if the current vertex hasn't been seen yet; - visitedVertices.add(currentVertex); - queue.addAll(currentVertex.getChildVertices()); - } - } - return true; - } - public List getVertices() { return vertices; } @@ -146,6 +136,45 @@ public String toString() { ')'; } + /** + * By default, keep all dependencies; + */ + private static class DefaultKeepDependency implements KeepDependency { + @Override + public boolean keepDependency(DAGVertex vertex, Set dependentVertices) { + return true; + } + } + + private static class WithConstKeepDependency implements KeepDependency { + /** + * Determine if a vertex should really be a dependency, given a set of possible dependencies. + * The vertex is not going to be a dependency if any of its children is included in the dependency set; + * @param vertex a vertex we want to possibly filter, if it's an unnecessary dependency + * @param dependentVertices a list of possible dependencies + * @return if the vertex should be kept in the dependencies + */ + @Override + public boolean keepDependency(DAGVertex vertex, Set dependentVertices) { + // Perform a BFS starting from the children of "vertex"; + Queue queue = new ArrayDeque<>(vertex.getChildVertices()); + Set visitedVertices = new HashSet<>(); + + while (!queue.isEmpty()) { + DAGVertex currentVertex = queue.poll(); + // If the current vertex is in the set of candidate dependencies, we can filter it out; + if (dependentVertices.contains(currentVertex)) { + return false; + } else if (!visitedVertices.contains(currentVertex)) { + // Add children to the queue, but only if the current vertex hasn't been seen yet; + visitedVertices.add(currentVertex); + queue.addAll(currentVertex.getChildVertices()); + } + } + return true; + } + } + /** * Simple vertex class used to encapsulate {@link GrCUDAComputationalElement}. */ diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java index 279453d4..160bc950 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java @@ -3,9 +3,8 @@ import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAThreadManager; import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; -import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.interop.UnsupportedTypeException; @@ -26,16 +25,16 @@ public class GrCUDAExecutionContext extends AbstractGrCUDAExecutionContext { */ private final GrCUDAThreadManager threadManager; - public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyComputationBuilder dependencyBuilder) { - this(new CUDARuntime(context, env), new GrCUDAThreadManager(context), dependencyBuilder); + public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyPolicyEnum dependencyPolicy) { + this(new CUDARuntime(context, env), new GrCUDAThreadManager(context), dependencyPolicy); } - public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, DependencyComputationBuilder dependencyBuilder) { - this(cudaRuntime, threadManager, new GrCUDAStreamManager(cudaRuntime), dependencyBuilder); + public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, DependencyPolicyEnum dependencyPolicy) { + this(cudaRuntime, threadManager, new GrCUDAStreamManager(cudaRuntime), dependencyPolicy); } - public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, GrCUDAStreamManager streamManager, DependencyComputationBuilder dependencyBuilder) { - super(cudaRuntime, dependencyBuilder); + public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, GrCUDAStreamManager streamManager, DependencyPolicyEnum dependencyPolicy) { + super(cudaRuntime, dependencyPolicy); this.threadManager = threadManager; this.streamManager = streamManager; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/KeepDependency.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/KeepDependency.java new file mode 100644 index 00000000..34db1b21 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/KeepDependency.java @@ -0,0 +1,14 @@ +package com.nvidia.grcuda.gpu.executioncontext; + +import java.util.Set; + +public interface KeepDependency { + /** + * Determine if a vertex should really be a dependency, given a set of possible dependencies. + * The vertex is not going to be a dependency if any of its children is included in the dependency set; + * @param vertex a vertex we want to possibly filter, if it's an unnecessary dependency + * @param dependentVertices a list of possible dependencies + * @return if the vertex should be kept in the dependencies + */ + boolean keepDependency(ExecutionDAG.DAGVertex vertex, Set dependentVertices); +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java index 64f6887b..9727260b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/SyncGrCUDAExecutionContext.java @@ -3,7 +3,7 @@ import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; -import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.interop.UnsupportedTypeException; @@ -12,12 +12,12 @@ */ public class SyncGrCUDAExecutionContext extends AbstractGrCUDAExecutionContext { - public SyncGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyComputationBuilder dependencyBuilder) { - super(context, env, dependencyBuilder); + public SyncGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyPolicyEnum dependencyPolicy) { + super(context, env, dependencyPolicy); } - public SyncGrCUDAExecutionContext(CUDARuntime cudaRuntime, DependencyComputationBuilder dependencyBuilder) { - super(cudaRuntime, dependencyBuilder); + public SyncGrCUDAExecutionContext(CUDARuntime cudaRuntime, DependencyPolicyEnum dependencyPolicy) { + super(cudaRuntime, dependencyPolicy); } /** diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index c537f34e..ab366935 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -1,7 +1,7 @@ package com.nvidia.grcuda.gpu.stream; import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.ExecutionDAG; +import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import java.util.ArrayDeque; @@ -94,7 +94,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { // Also add test for it! // Skip syncing if no computation is active; - System.out.println("--\tSYNC REQUEST by " + vertex.getComputation()); +// System.out.println("--\tSYNC REQUEST by " + vertex.getComputation()); if (this.isAnyComputationActive()) { Set computationsToSync = new HashSet<>(vertex.getParentComputations()); diff --git a/projects/resources/python/benchmark/bench/bench_5.py b/projects/resources/python/benchmark/bench/bench_5.py new file mode 100644 index 00000000..1fd20fbd --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_5.py @@ -0,0 +1,184 @@ +# coding=utf-8 +import polyglot +import time +import numpy as np +from random import random, randint, seed + +from benchmark import Benchmark, time_phase +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_THREADS_PER_BLOCK = 128 + +SQUARE_KERNEL = """ + extern "C" __global__ void square(const float* x, float* y, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + y[idx] = x[idx] * x[idx]; + } + } + """ + +COMPUTE_KERNEL = """ + extern "C" __global__ void compute(const float* x, float *y, int n) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + y[i] = logf(1.0 + cosf(x[i]) * cosf(x[i]) + sinf(x[i]) * sinf(x[i])); + } + } + """ + +REDUCE_KERNEL = """ + extern "C" __global__ void reduce(const float *x, const float *y, float *res, int n) { + __shared__ float cache[%d]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + cache[threadIdx.x] = x[i] + y[i]; + } + __syncthreads(); + + // Perform tree reduction; + i = %d / 2; + while (i > 0) { + if (threadIdx.x < i) { + cache[threadIdx.x] += cache[threadIdx.x + i]; + } + __syncthreads(); + i /= 2; + } + if (threadIdx.x == 0) { + atomicAdd(res, cache[0]); + } + } + """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + +############################## +############################## + + +class Benchmark5(Benchmark): + """ + Compute a complex pipeline of kernels, doing mock computations, and using read-only arguments; + ┌─> B(const Y, R1) ───────────────────┐ + A: (const X, Y) ─┤ ├─> E(const R1, const R2, R) + └─> C(const Y, Z) ─> D(const Z, R2) ──┘ + """ + + def __init__(self, benchmark: BenchmarkResult): + super().__init__("b5", benchmark) + self.size = 0 + self.x = None + self.y = None + self.z = None + self.r1 = None + self.r2 = None + self.r = None + self.num_blocks = 0 + self.kernel_a = None + self.kernel_b = None + self.kernel_c = None + self.kernel_d = None + self.kernel_e = None + self.cpu_result = None + + @time_phase("allocation") + def alloc(self, size: int): + self.size = size + self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + # Allocate vectors; + self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.y = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.z = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.r1 = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.r2 = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.r = polyglot.eval(language="grcuda", string=f"float[1]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + self.kernel_a = build_kernel(SQUARE_KERNEL, "square", "const pointer, pointer, sint32") + self.kernel_b = build_kernel(COMPUTE_KERNEL, "compute", "const pointer, pointer, sint32") + self.kernel_c = build_kernel(SQUARE_KERNEL, "square", "const pointer, pointer, sint32") + self.kernel_d = build_kernel(COMPUTE_KERNEL, "compute", "const pointer, pointer, sint32") + self.kernel_e = build_kernel(REDUCE_KERNEL, "reduce", "const pointer, const pointer, pointer, sint32") + + @time_phase("initialization") + def init(self): + self.random_seed = randint(0, 10000000) + seed(self.random_seed) + for i in range(self.size): + if self.benchmark.random_init: + self.x[i] = random() + else: + self.x[i] = 1 / (i + 1) + + def execute(self) -> object: + # This must be reset at every execution; + self.r[0] = 0 + + # A. + start = time.time() + self.kernel_a(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.y, self.size) + end = time.time() + self.benchmark.add_phase({"name": "kernel_a", "time_sec": end - start}) + + # B. + start = time.time() + self.kernel_b(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.r1, self.size) + end = time.time() + self.benchmark.add_phase({"name": "kernel_b", "time_sec": end - start}) + + # C, D. + start = time.time() + self.kernel_c(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.z, self.size) + self.kernel_d(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.z, self.r2, self.size) + end = time.time() + self.benchmark.add_phase({"name": "kernel_c_d", "time_sec": end - start}) + + # E. + start = time.time() + self.kernel_e(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.r1, self.r2, self.r, self.size) + end = time.time() + self.benchmark.add_phase({"name": "kernel_e", "time_sec": end - start}) + + # Read the result; + start = time.time() + result = self.r[0] + end = time.time() + self.benchmark.add_phase({"name": "read_result", "time_sec": end - start}) + + self.benchmark.add_to_benchmark("gpu_result", result) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tgpu result: {result:.4f}") + + return result + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + # Recompute the CPU result only if necessary; + start = time.time() + if self.current_iter == 0 or reinit: + # Re-initialize the random number generator with the same seed as the GPU to generate the same values; + seed(self.random_seed) + if self.benchmark.random_init: + x_g = np.zeros(self.size) + for i in range(self.size): + x_g[i] = random() + else: + x_g = 1 / np.linspace(1, self.size, self.size) + + x_g = x_g**2 + r1 = np.log(1 + np.sin(x_g)**2 + np.cos(x_g)**2) + r2 = np.log(1 + np.sin(x_g**2) ** 2 + np.cos(x_g**2) ** 2) + self.cpu_result = np.sum(r1 + r2) + + cpu_time = time.time() - start + difference = np.abs(self.cpu_result - gpu_result) + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", difference) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tcpu result: {self.cpu_result:.4f}, " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") + + diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index f1e94a92..05994a54 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -5,6 +5,7 @@ from bench.bench_2 import Benchmark2 from bench.bench_3 import Benchmark3 from bench.bench_4 import Benchmark4 +from bench.bench_5 import Benchmark5 from benchmark_result import BenchmarkResult ############################## @@ -16,6 +17,7 @@ "b2": Benchmark2, "b3": Benchmark3, "b4": Benchmark4, + "b5": Benchmark5, } num_elem = { @@ -23,6 +25,7 @@ "b2": [100], "b3": [100], "b4": [100], + "b5": [100], } policies = { @@ -30,6 +33,7 @@ "b2": ["default"], "b3": ["default"], "b4": ["default"], + "b5": ["default"], } ############################## From 6b5f7031df3a777591dcac19b846459f4fecf324 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 9 May 2020 18:58:14 +0200 Subject: [PATCH 061/236] adding complex ensemble benchmark --- .../python/benchmark/bench/bench_6.py | 385 ++++++++++++++++++ .../resources/python/benchmark/benchmark.py | 13 +- .../python/benchmark/benchmark_main.py | 4 + .../python/other/data/nb_class_log_prior.csv | 5 + .../python/other/data/nb_feat_log_prob.csv | 5 + .../python/other/data/ridge_coeff.csv | 5 + .../python/other/data/ridge_intercept.csv | 5 + .../resources/python/other/train_ensemble.py | 116 ++++++ 8 files changed, 537 insertions(+), 1 deletion(-) create mode 100644 projects/resources/python/benchmark/bench/bench_6.py create mode 100644 projects/resources/python/other/data/nb_class_log_prior.csv create mode 100644 projects/resources/python/other/data/nb_feat_log_prob.csv create mode 100644 projects/resources/python/other/data/ridge_coeff.csv create mode 100644 projects/resources/python/other/data/ridge_intercept.csv create mode 100755 projects/resources/python/other/train_ensemble.py diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py new file mode 100644 index 00000000..c3923cc6 --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -0,0 +1,385 @@ +# coding=utf-8 +import polyglot +import time +import numpy as np +from random import random, randint, seed + +from benchmark import Benchmark, time_phase +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_THREADS_PER_BLOCK = 1024 + +NB_KERNEL = """ + extern "C" __global__ void nb_1(const int* x, const float* y, float* z, int size, int n_feat, int n_classes) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < size) { + for (int j = 0; j < n_classes; j++) { + for (int q = 0; q < n_feat; q++) { + z[i * n_classes + j] += x[i * n_feat + q] * y[j * n_feat + q]; + } + } + } + } + + extern "C" __global__ void nb_2(const float* x, float* y, int n_row_x, int n_col_x) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n_row_x) { + float curr_max = x[i * n_col_x]; + for (int j = 0; j < n_col_x; j++) { + curr_max = fmaxf(curr_max, x[i * n_col_x + j]); + } + y[i] = curr_max; + } + } + + extern "C" __global__ void nb_3(const float* x, const float* y, float* z, int n_row_x, int n_col_x) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + float sum = 0; + if (i < n_row_x) { + for (int j = 0; j < n_col_x; j++) { + sum += expf(x[i * n_col_x + j] - y[i]); + } + z[i] = logf(sum) + y[i]; + } + } + + extern "C" __global__ void nb_4(float* x, float* y, int n_row_x, int n_col_x) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n_row_x) { + for (int j = 0; j < n_col_x; j++) { + x[i * n_col_x + j] = expf(x[i * n_col_x + j] - y[i]); + } + } + } + """ + +RR_KERNEL = """ + extern "C" __global__ void rr_1(const int* x, float *y, int n_row_x, int n_col_x) { + int j = blockIdx.x * blockDim.x + threadIdx.x; + if (j < n_col_x) { + float feature_mean = 0; + float sum_sq = 0; + // Compute mean and variance; + for (int i = 0; i < n_row_x; i++) { + feature_mean += x[j * n_row_x + i]; + sum_sq += x[j * n_row_x + i] * x[j * n_row_x + i]; + } + feature_mean /= n_row_x; + float std = sqrtf(sum_sq / n_row_x - feature_mean * feature_mean); + + // Update values; + for (int i = 0; i < n_row_x; i++) { + y[j * n_row_x + i] = ((float) x[j * n_row_x + i] - feature_mean) / std; + } + } + } + + extern "C" __global__ void rr_2(const float* x, const float* y, float* z, int size, int n_feat, int n_classes) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < size) { + for (int j = 0; j < n_classes; j++) { + for (int q = 0; q < n_feat; q++) { + z[i * n_classes + j] += x[i * n_feat + q] * y[j * n_feat + q]; + } + } + } + } + + extern "C" __global__ void rr_3(float* x, const float *y, int n_row_x, int n_col_x) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n_row_x) { + for (int j = 0; j < n_col_x; j++) { + x[i * n_col_x + j] += y[j]; + } + } + } + """ + +ENSEMBLE_KERNEL = """ + extern "C" __global__ void softmax(float *x, int n_row_x, int n_col_x) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n_row_x) { + float row_exp_sum = 0; + for (int j = 0; j < n_col_x; j++) { + row_exp_sum += expf( x[i * n_col_x + j]); + } + for (int j = 0; j < n_col_x; j++) { + x[i * n_col_x + j] = expf(x[i * n_col_x + j]) / row_exp_sum; + } + } + } + + extern "C" __global__ void argmax(const float *x, const float *y, int *z, int n_row_x, int n_col_x) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n_row_x) { + int curr_best_index = 0; + float curr_best = x[i * n_col_x] + y[i * n_col_x]; + for (int j = 0; j < n_col_x; j++) { + float curr = x[i * n_col_x + j] + y[i * n_col_x + j]; + if (curr > curr_best) { + curr_best = curr; + curr_best_index = j; + } + } + z[i] = curr_best_index; + } + } + """ + +############################## +############################## + + +class Benchmark6(Benchmark): + """ + Compute a complex pipeline of kernels, doing mock computations, and using read-only arguments; + ┌─> B(const Y, R1) ───────────────────┐ + A: (const X, Y) ─┤ ├─> E(const R1, const R2, R) + └─> C(const Y, Z) ─> D(const Z, R2) ──┘ + """ + + def __init__(self, benchmark: BenchmarkResult): + super().__init__("b6", benchmark) + self.size = 0 + self.x = None + self.z = None + self.r1 = None + self.r2 = None + self.r = None + + self.nb_1 = None + self.nb_2 = None + self.nb_3 = None + self.nb_4 = None + self.rr_1 = None + self.rr_2 = None + self.rr_3 = None + self.softmax = None + self.argmax = None + + self.cpu_result = None + + # Load matrices from files; + # self.nb_feat_log_prob_np = np.loadtxt("../other/data/nb_feat_log_prob.csv", delimiter=",") + # self.nb_class_log_prior_np = np.loadtxt("../other/data/nb_class_log_prior.csv", delimiter=",") + # self.ridge_coeff_np = np.loadtxt("../other/data/ridge_coeff.csv", delimiter=",") + # self.ridge_intercept_np = np.loadtxt("../other/data/ridge_intercept.csv", delimiter=",") + + # Internal arrays used by the algorithms, they do not affect the DAG structure; + self.nb_feat_log_prob = None + self.nb_class_log_prior = None + self.ridge_coeff = None + self.ridge_intercept = None + self.nb_amax = None + self.nb_l = None + + self.num_features = 1000 # self.nb_feat_log_prob_np.shape[1] + self.num_classes = 5 # self.nb_feat_log_prob_np.shape[0] + + self.num_blocks_size = 0 + self.num_blocks_feat = (self.num_features + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + @time_phase("allocation") + def alloc(self, size: int): + self.size = size + self.num_blocks_size = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + # Allocate vectors; + self.x = polyglot.eval(language="grcuda", string=f"int[{size}][{self.num_features}]") + self.z = polyglot.eval(language="grcuda", string=f"float[{size}][{self.num_features}]") + + self.nb_feat_log_prob = polyglot.eval(language="grcuda", string=f"float[{self.num_classes}][{self.num_features}]") + self.nb_class_log_prior = polyglot.eval(language="grcuda", string=f"float[{self.num_classes}]") + self.ridge_coeff = polyglot.eval(language="grcuda", string=f"float[{self.num_classes}][{self.num_features}]") + self.ridge_intercept = polyglot.eval(language="grcuda", string=f"float[{self.num_classes}]") + + self.nb_amax = polyglot.eval(language="grcuda", string=f"float[{self.size}]") + self.nb_l = polyglot.eval(language="grcuda", string=f"float[{self.size}]") + + self.r1 = polyglot.eval(language="grcuda", string=f"float[{self.size}][{self.num_classes}]") + self.r2 = polyglot.eval(language="grcuda", string=f"float[{self.size}][{self.num_classes}]") + self.r = polyglot.eval(language="grcuda", string=f"int[{self.size}]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + self.nb_1 = build_kernel(NB_KERNEL, "nb_1", "const pointer, const pointer, pointer, sint32, sint32, sint32") + self.nb_2 = build_kernel(NB_KERNEL, "nb_2", "const pointer, pointer, sint32, sint32") + self.nb_3 = build_kernel(NB_KERNEL, "nb_3", "const pointer, const pointer, pointer, sint32, sint32") + self.nb_4 = build_kernel(NB_KERNEL, "nb_4", "pointer, const pointer, sint32, sint32") + + self.rr_1 = build_kernel(RR_KERNEL, "rr_1", "const pointer, pointer, sint32, sint32") + self.rr_2 = build_kernel(RR_KERNEL, "rr_2", "const pointer, const pointer, pointer, sint32, sint32, sint32") + self.rr_3 = build_kernel(RR_KERNEL, "rr_3", "pointer, const pointer, sint32, sint32") + + self.softmax = build_kernel(ENSEMBLE_KERNEL, "softmax", "pointer, sint32, sint32") + self.argmax = build_kernel(ENSEMBLE_KERNEL, "argmax", "const pointer, const pointer, pointer, sint32, sint32") + + @time_phase("initialization") + def init(self): + self.random_seed = randint(0, 10000000) + seed(self.random_seed) + + # Initialize the support device arrays; + for i in range(self.num_classes): + for j in range(self.num_features): + self.nb_feat_log_prob[i][j] = random() # self.nb_feat_log_prob_np[i][j] + self.ridge_coeff[i][j] = random() # self.ridge_coeff_np[i][j] + self.nb_class_log_prior[i] = random() # self.nb_class_log_prior_np[i] + self.ridge_intercept[i] = random() # self.ridge_intercept_np[i] + + # Create a random input; + max_occurrence_of_ngram = 10 + for i in range(self.size): + for j in range(self.num_features): + self.x[i][j] = randint(0, max_occurrence_of_ngram) + # Initialize a support array; + for j in range(self.num_classes): + self.r1[i][j] = self.nb_class_log_prior[j] + self.r2[i][j] = 0 + + @time_phase("reset_result") + def reset_result(self) -> None: + for i in range(self.size): + for j in range(self.num_classes): + self.r1[i][j] = self.nb_class_log_prior[j] + self.r2[i][j] = 0 + + def execute(self) -> object: + + # Schedule the categorical Naive Bayes and Ridge Regression kernels + + # RR - 1. + start = time.time() + self.rr_1(self.num_blocks_feat, NUM_THREADS_PER_BLOCK)(self.x, self.z, self.size, self.num_features) + end = time.time() + self.benchmark.add_phase({"name": "rr_1", "time_sec": end - start}) + + # NB - 1. + start = time.time() + self.nb_1(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.x, self.nb_feat_log_prob, self.r1, self.size, self.num_features, self.num_classes) + end = time.time() + self.benchmark.add_phase({"name": "nb_1", "time_sec": end - start}) + + # RR - 2. + start = time.time() + self.rr_2(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.z, self.ridge_coeff, self.r2, self.size, self.num_features, self.num_classes) + end = time.time() + self.benchmark.add_phase({"name": "rr_2", "time_sec": end - start}) + + # NB - 2. + start = time.time() + self.nb_2(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_amax, self.size, self.num_classes) + end = time.time() + self.benchmark.add_phase({"name": "nb_2", "time_sec": end - start}) + + # NB - 3. + start = time.time() + self.nb_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_amax, self.nb_l, self.size, self.num_classes) + end = time.time() + self.benchmark.add_phase({"name": "nb_3", "time_sec": end - start}) + + # RR - 3. + start = time.time() + self.rr_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r2, self.ridge_intercept, self.size, self.num_classes) + end = time.time() + self.benchmark.add_phase({"name": "rr_3", "time_sec": end - start}) + + # NB - 4. + start = time.time() + self.nb_4(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_l, self.size, self.num_classes) + end = time.time() + self.benchmark.add_phase({"name": "nb_4", "time_sec": end - start}) + + # FIXME: this causes an NPE in java! + # for i in range(5): + # print(self.r1[i][0]) + # for i in range(5): + # print(self.r2[i][0]) + + # Ensemble results; + + # Softmax normalization; + start = time.time() + self.softmax(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.size, self.num_classes) + self.softmax(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r2, self.size, self.num_classes) + end = time.time() + self.benchmark.add_phase({"name": "softmax", "time_sec": end - start}) + + # Prediction; + start = time.time() + self.argmax(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.r2, self.r, self.size, self.num_classes) + end = time.time() + self.benchmark.add_phase({"name": "argmax", "time_sec": end - start}) + + self.benchmark.add_to_benchmark("gpu_result", 0) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tgpu result: [" + ", ".join([f"{x:.4f}" for x in self.r[:10]]) + "...]") + + return self.r + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + + def softmax(X): + return np.exp(X) / np.sum(np.exp(X), axis=1).reshape(X.shape[0], 1) + + def logsumexp(X): + return np.log(np.sum(np.exp(X))) + + def naive_bayes_predict(X, feature_log_prob, log_class_prior): + jll = X.dot(feature_log_prob.T) + log_class_prior + amax = np.amax(jll, axis=1) + l = logsumexp(jll - np.atleast_2d(amax).T) + amax + + return np.exp(jll - np.atleast_2d(l).T) + + def normalize(X): + return (X - np.mean(X, axis=0)) / np.std(X, axis=0) + + def ridge_pred(X, coef, intercept): + return np.dot(X, coef.T) + intercept + + # Recompute the CPU result only if necessary; + start = time.time() + if self.current_iter == 0 or reinit: + # Re-initialize the random number generator with the same seed as the GPU to generate the same values; + seed(self.random_seed) + # Initialize the support device arrays; + x_g = np.zeros((self.size, self.num_features)) + feat_log_prob = np.zeros((self.num_classes, self.num_features)) + ridge_coeff = np.zeros((self.num_classes, self.num_features)) + class_log_prior = np.zeros(self.num_classes) + ridge_intercept = np.zeros(self.num_classes) + for i in range(self.num_classes): + for j in range(self.num_features): + feat_log_prob[i, j] = random() # self.nb_feat_log_prob_np[i][j] + ridge_coeff[i, j] = random() # self.ridge_coeff_np[i][j] + class_log_prior[i] = random() # self.nb_class_log_prior_np[i] + ridge_intercept[i] = random() # self.ridge_intercept_np[i] + + # Create a random input; + for i in range(self.size): + for j in range(self.num_features): + x_g[i, j] = self.x[i][j] + + r1_g = naive_bayes_predict(x_g, feat_log_prob, class_log_prior) + r2_g = ridge_pred(normalize(x_g), ridge_coeff, ridge_intercept) + r_g = np.argmax(softmax(r1_g) + softmax(r2_g), axis=1) + self.cpu_result = r_g + + cpu_time = time.time() - start + + # Compare GPU and CPU results; + difference = 0 + for i in range(self.size): + difference += np.abs(self.cpu_result[i] - gpu_result[i]) + + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", str(difference)) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tcpu result: [" + ", ".join([f"{x:.4f}" for x in self.cpu_result[:10]]) + "...]; " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") + + diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py index 351d462a..af5ed1c2 100644 --- a/projects/resources/python/benchmark/benchmark.py +++ b/projects/resources/python/benchmark/benchmark.py @@ -47,6 +47,13 @@ def init(self) -> None: """ pass + @abstractmethod + def reset_result(self) -> None: + """ + Reset the values that hold the GPU result + """ + pass + @abstractmethod def cpu_validation(self, gpu_result: object, reinit: bool) -> None: """ @@ -83,8 +90,12 @@ def run(self, policy: str, size: int, realloc: bool, reinit: bool) -> None: if self.current_iter == 0 or realloc: self.alloc(size) # Initialize memory for the benchmark; - if self.current_iter == 0 or reinit: + if self.current_iter == 0 or reinit or reinit: self.init() + + # Reset the result; + # self.reset_result() + # Execute the benchmark; gpu_result = self.execute() diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index 05994a54..d47f84ca 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -6,6 +6,7 @@ from bench.bench_3 import Benchmark3 from bench.bench_4 import Benchmark4 from bench.bench_5 import Benchmark5 +from bench.bench_6 import Benchmark6 from benchmark_result import BenchmarkResult ############################## @@ -18,6 +19,7 @@ "b3": Benchmark3, "b4": Benchmark4, "b5": Benchmark5, + "b6": Benchmark6, } num_elem = { @@ -26,6 +28,7 @@ "b3": [100], "b4": [100], "b5": [100], + "b6": [100], } policies = { @@ -34,6 +37,7 @@ "b3": ["default"], "b4": ["default"], "b5": ["default"], + "b6": ["default"], } ############################## diff --git a/projects/resources/python/other/data/nb_class_log_prior.csv b/projects/resources/python/other/data/nb_class_log_prior.csv new file mode 100644 index 00000000..da1b0bc0 --- /dev/null +++ b/projects/resources/python/other/data/nb_class_log_prior.csv @@ -0,0 +1,5 @@ +-1.635610786738123323e+00 +-1.592908610482888676e+00 +-1.621173168652520147e+00 +-1.597838776590747578e+00 +-1.600313004657099469e+00 diff --git a/projects/resources/python/other/data/nb_feat_log_prob.csv b/projects/resources/python/other/data/nb_feat_log_prob.csv new file mode 100644 index 00000000..3dcf0d04 --- /dev/null +++ b/projects/resources/python/other/data/nb_feat_log_prob.csv @@ -0,0 +1,5 @@ +-6.921954055381462467e+00,-6.897021752413513340e+00,-6.924655716615632173e+00,-6.906464693213795414e+00,-6.908364029017446839e+00,-6.886550452546217116e+00,-6.909886099326515208e+00,-6.904190241892125712e+00,-6.930081035096447906e+00,-6.903622436444864618e+00,-6.877477156340543019e+00,-6.914466260005090348e+00,-6.871595867562971804e+00,-6.946733393644134225e+00,-6.920798431215875013e+00,-6.888039656097685537e+00,-6.896645883211569128e+00,-6.903244078513752768e+00,-6.898150208429443708e+00,-6.919259673458899584e+00,-6.904568958048896476e+00,-6.893644004784732715e+00,-6.909886099326515208e+00,-6.896082344171576395e+00,-6.914848888668645444e+00,-6.901354433204677008e+00,-6.923111016559495567e+00,-6.877108560685798011e+00,-6.938666453685231161e+00,-6.920413519740760577e+00,-6.904190241892125712e+00,-6.911982735947036716e+00,-6.907413910181126937e+00,-6.924076174437720610e+00,-6.893082154409432505e+00,-6.906464693213795414e+00,-6.884692061377657879e+00,-6.888039656097685537e+00,-6.867572453210787131e+00,-6.891959399800471786e+00,-6.929692534703061568e+00,-6.938862436047445570e+00,-6.924462498568466629e+00,-6.899656800051518601e+00,-6.910648004125278021e+00,-6.932415212386544567e+00,-6.913510328376995417e+00,-6.909886099326515208e+00,-6.933389396584388464e+00,-6.914657556036280184e+00,-6.900599573761397210e+00,-6.933779336148697681e+00,-6.954666795031672066e+00,-6.911410489865613016e+00,-6.910648004125278021e+00,-6.875635535193893588e+00,-6.893082154409432505e+00,-6.894393630007243701e+00,-6.930081035096447906e+00,-6.892707762791431492e+00,-6.933194483807238129e+00,-6.921568698921973350e+00,-6.909124774584755713e+00,-6.912555309681545523e+00,-6.906654464539917271e+00,-6.886736481753338524e+00,-6.879506864574956637e+00,-6.900976932256440932e+00,-6.897209740006886136e+00,-6.937295651551453446e+00,-6.873246486919853737e+00,-6.906274957893996813e+00,-6.894956217926441866e+00,-6.923496967934415380e+00,-6.916572531726810524e+00,-6.939450613694047476e+00,-6.902865863683222969e+00,-6.912937207719412669e+00,-6.903054953217679923e+00,-6.915040257916190924e+00,-6.914466260005090348e+00,-6.883949670846160274e+00,-6.897962043973153712e+00,-6.928333970690124133e+00,-6.911219813918805244e+00,-6.885063463424639707e+00,-6.909695713795240835e+00,-6.892333511290058112e+00,-6.907413910181126937e+00,-6.912364415340983115e+00,-6.914275000561072915e+00,-6.915806101338651146e+00,-6.904947817685933131e+00,-6.913128211444565352e+00,-6.898714914326804504e+00,-6.914466260005090348e+00,-6.933974362965502181e+00,-6.906844271886031450e+00,-6.907983873148964449e+00,-6.903054953217679923e+00,-6.920028756365487865e+00,-6.893644004784732715e+00,-6.890837904355821664e+00,-6.924076174437720610e+00,-6.935145323286652896e+00,-6.878768312104162064e+00,-6.908173933018396440e+00,-6.902865863683222969e+00,-6.919067495116806299e+00,-6.904758369925586337e+00,-6.922725214085575729e+00,-6.906464693213795414e+00,-6.904568958048896476e+00,-6.931052946923367486e+00,-6.888412303763633560e+00,-6.936904338691832095e+00,-6.900599573761397210e+00,-6.922146789312868975e+00,-6.871595867562971804e+00,-6.897021752413513340e+00,-6.901165664917188636e+00,-6.886178497920392161e+00,-6.901732076713695818e+00,-6.917147740255755295e+00,-6.913701441612168708e+00,-6.909124774584755713e+00,-6.885249216188245924e+00,-6.879322175314111831e+00,-6.926783582782670479e+00,-6.921954055381462467e+00,-6.910266979163534273e+00,-6.923303973627147556e+00,-6.918491181586304606e+00,-6.935926725944110416e+00,-6.893082154409432505e+00,-6.903054953217679923e+00,-6.884320797218947519e+00,-6.914083777690233745e+00,-6.914466260005090348e+00,-6.912746240469715531e+00,-6.923303973627147556e+00,-6.915423106312903911e+00,-6.921954055381462467e+00,-6.928333970690124133e+00,-6.894018747153742410e+00,-6.943971505914925402e+00,-6.893082154409432505e+00,-6.944168530839215592e+00,-6.896082344171576395e+00,-6.894206171013349760e+00,-6.868120148340862485e+00,-6.921761358589268553e+00,-6.911791950865850964e+00,-6.905326820911998453e+00,-6.890464351867354509e+00,-6.883578682157059703e+00,-6.900599573761397210e+00,-6.881355635669113013e+00,-6.889531080684355047e+00,-6.902109862891215641e+00,-6.922146789312868975e+00,-6.950097401961492949e+00,-6.892520619532721327e+00,-6.924076174437720610e+00,-6.891211596437898379e+00,-6.914083777690233745e+00,-6.933779336148697681e+00,-6.929110066965012749e+00,-6.894393630007243701e+00,-6.884877745158714646e+00,-6.916572531726810524e+00,-6.904758369925586337e+00,-6.913319251659110876e+00,-6.886736481753338524e+00,-6.882466541171252672e+00,-6.878952899091304474e+00,-6.914657556036280184e+00,-6.891772396527368727e+00,-6.941413708160370177e+00,-6.903811669106987736e+00,-6.897585821244863524e+00,-6.923689999495673320e+00,-6.880061137106467939e+00,-6.949304851890287793e+00,-6.905326820911998453e+00,-6.900222357612072699e+00,-6.927170954470643238e+00,-6.911601202176669290e+00,-6.922532368650593071e+00,-6.914848888668645444e+00,-6.873980970977846994e+00,-6.905705967835970682e+00,-6.915997653872517859e+00,-6.913892591378591135e+00,-6.882096102196836540e+00,-6.935145323286652896e+00,-6.900599573761397210e+00,-6.917147740255755295e+00,-6.894956217926441866e+00,-6.891959399800471786e+00,-6.920990942526509926e+00,-6.902676809896858501e+00,-6.907223994692948565e+00,-6.888785090347633755e+00,-6.913510328376995417e+00,-6.958457323260997640e+00,-6.927364696600475824e+00,-6.931052946923367486e+00,-6.872329139823142086e+00,-6.877845887908142331e+00,-6.904568958048896476e+00,-6.916955967314329712e+00,-6.919067495116806299e+00,-6.885992572475959861e+00,-6.901732076713695818e+00,-6.914466260005090348e+00,-6.866113397690227771e+00,-6.900976932256440932e+00,-6.904190241892125712e+00,-6.933389396584388464e+00,-6.894768653450602969e+00,-6.899845283701118603e+00,-6.907413910181126937e+00,-6.955862252436446624e+00,-6.887294777106074406e+00,-6.908364029017446839e+00,-6.925235594857454657e+00,-6.923689999495673320e+00,-6.910266979163534273e+00,-6.896645883211569128e+00,-6.907983873148964449e+00,-6.926589953195463778e+00,-6.906654464539917271e+00,-6.926589953195463778e+00,-6.889904284644648769e+00,-6.894393630007243701e+00,-6.956859559789478453e+00,-6.912746240469715531e+00,-6.924655716615632173e+00,-6.876924313794443577e+00,-6.885435003462351489e+00,-6.896833800152833760e+00,-6.912937207719412669e+00,-6.887294777106074406e+00,-6.908554161159859319e+00,-6.904000937584887865e+00,-6.893082154409432505e+00,-6.892707762791431492e+00,-6.882651812130559321e+00,-6.915806101338651146e+00,-6.912937207719412669e+00,-6.891211596437898379e+00,-6.900976932256440932e+00,-6.948315046801063488e+00,-6.935145323286652896e+00,-6.908934533929754096e+00,-6.893082154409432505e+00,-6.891772396527368727e+00,-6.895143817589312718e+00,-6.930275341907513820e+00,-6.893644004784732715e+00,-6.910838571062491553e+00,-6.903622436444864618e+00,-6.923689999495673320e+00,-6.907983873148964449e+00,-6.927170954470643238e+00,-6.896082344171576395e+00,-6.881910934156310944e+00,-6.898903220513219026e+00,-6.935340616715649276e+00,-6.868485445148579061e+00,-6.898714914326804504e+00,-6.886736481753338524e+00,-6.887853384326632522e+00,-6.943774519801808154e+00,-6.933974362965502181e+00,-6.917915200001790055e+00,-6.908554161159859319e+00,-6.922918096717092240e+00,-6.894206171013349760e+00,-6.908364029017446839e+00,-6.920028756365487865e+00,-6.933779336148697681e+00,-6.908934533929754096e+00,-6.908173933018396440e+00,-6.929886766033185097e+00,-6.925428962352981443e+00,-6.927752293504552128e+00,-6.906274957893996813e+00,-6.875635535193893588e+00,-6.895331452452420962e+00,-6.923496967934415380e+00,-6.912364415340983115e+00,-6.877845887908142331e+00,-6.912937207719412669e+00,-6.890277627938139915e+00,-6.904000937584887865e+00,-6.882466541171252672e+00,-6.884135216815705505e+00,-6.896458001576444730e+00,-6.929692534703061568e+00,-6.878768312104162064e+00,-6.935340616715649276e+00,-6.920221119547766975e+00,-6.907793849395423180e+00,-6.895331452452420962e+00,-6.893644004784732715e+00,-6.904947817685933131e+00,-6.923883068325311640e+00,-6.920990942526509926e+00,-6.920028756365487865e+00,-6.908934533929754096e+00,-6.920221119547766975e+00,-6.885806681593372502e+00,-6.899845283701118603e+00,-6.912937207719412669e+00,-6.887480944843742847e+00,-6.884506412068668979e+00,-6.916764231142714436e+00,-6.909505364503717217e+00,-6.913701441612168708e+00,-6.902865863683222969e+00,-6.922532368650593071e+00,-6.889531080684355047e+00,-6.866660294066997849e+00,-6.926783582782670479e+00,-6.939842924409161284e+00,-6.902676809896858501e+00,-6.906464693213795414e+00,-6.937687117596773589e+00,-6.891024732941138708e+00,-6.895331452452420962e+00,-6.906085258566859508e+00,-6.933974362965502181e+00,-6.905326820911998453e+00,-6.920605956958713278e+00,-6.902109862891215641e+00,-6.897397762946237521e+00,-6.930081035096447906e+00,-6.916189243105788975e+00,-6.919451888740605128e+00,-6.894206171013349760e+00,-6.919259673458899584e+00,-6.915997653872517859e+00,-6.903622436444864618e+00,-6.919451888740605128e+00,-6.871412633480918686e+00,-6.907603861744050278e+00,-6.888412303763633560e+00,-6.909505364503717217e+00,-6.917723279839988137e+00,-6.919644140976130231e+00,-6.920413519740760577e+00,-6.904000937584887865e+00,-6.920028756365487865e+00,-6.913510328376995417e+00,-6.908744329459375777e+00,-6.935535948291619235e+00,-6.889717665254352141e+00,-6.898526643592932217e+00,-6.909695713795240835e+00,-6.911791950865850964e+00,-6.893831358415258848e+00,-6.915997653872517859e+00,-6.934364530742593402e+00,-6.926977249869553432e+00,-6.954467690999157625e+00,-6.915423106312903911e+00,-6.925815809553164115e+00,-6.951684389003553122e+00,-6.909124774584755713e+00,-6.905705967835970682e+00,-6.892894941079296345e+00,-6.910076521111344405e+00,-6.893456686249017196e+00,-6.870863132597049727e+00,-6.936122172050469104e+00,-6.932025804281934711e+00,-6.919451888740605128e+00,-6.922146789312868975e+00,-6.896270155234200061e+00,-6.894768653450602969e+00,-6.920798431215875013e+00,-6.920028756365487865e+00,-6.913892591378591135e+00,-6.915231663792935635e+00,-6.892333511290058112e+00,-6.936708739669203538e+00,-6.913319251659110876e+00,-6.915231663792935635e+00,-6.867572453210787131e+00,-6.906844271886031450e+00,-6.910648004125278021e+00,-6.917339549981097235e+00,-6.908934533929754096e+00,-6.897585821244863524e+00,-6.959257163335632157e+00,-6.907223994692948565e+00,-6.949106812479797668e+00,-6.874899835326242936e+00,-6.925428962352981443e+00,-6.916764231142714436e+00,-6.885063463424639707e+00,-6.889717665254352141e+00,-6.883578682157059703e+00,-6.929886766033185097e+00,-6.914657556036280184e+00,-6.921761358589268553e+00,-6.907223994692948565e+00,-6.934559671732577257e+00,-6.895894568375325662e+00,-6.885620825259783473e+00,-6.893644004784732715e+00,-6.921376076365277186e+00,-6.904190241892125712e+00,-6.912555309681545523e+00,-6.924848972003228909e+00,-6.900788235208990429e+00,-6.875451559478168662e+00,-6.927946148307912111e+00,-6.874899835326242936e+00,-6.908554161159859319e+00,-6.897962043973153712e+00,-6.921761358589268553e+00,-6.913892591378591135e+00,-6.894206171013349760e+00,-6.906274957893996813e+00,-6.900222357612072699e+00,-6.904190241892125712e+00,-6.932609973318117014e+00,-6.933974362965502181e+00,-6.891211596437898379e+00,-6.887853384326632522e+00,-6.909124774584755713e+00,-6.930275341907513820e+00,-6.932025804281934711e+00,-6.902298809514356037e+00,-6.906085258566859508e+00,-6.896458001576444730e+00,-6.881540700905137697e+00,-6.887294777106074406e+00,-6.892707762791431492e+00,-6.928527938298142175e+00,-6.887667147246292032e+00,-6.893644004784732715e+00,-6.867207489703085699e+00,-6.885063463424639707e+00,-6.880800645367198598e+00,-6.892146438050339441e+00,-6.894956217926441866e+00,-6.886178497920392161e+00,-6.852537299955292482e+00,-6.884877745158714646e+00,-6.894018747153742410e+00,-6.879322175314111831e+00,-6.922725214085575729e+00,-6.881725800396642612e+00,-6.957857862757483858e+00,-6.920221119547766975e+00,-6.942396702439857847e+00,-6.908554161159859319e+00,-6.894206171013349760e+00,-6.908934533929754096e+00,-6.889158015953297465e+00,-6.940039137497203470e+00,-6.916380869052529690e+00,-6.915997653872517859e+00,-6.915040257916190924e+00,-6.899468351921308695e+00,-6.934559671732577257e+00,-6.871779135225905222e+00,-6.914848888668645444e+00,-6.911601202176669290e+00,-6.878768312104162064e+00,-6.928721943536892525e+00,-6.899279939297104036e+00,-6.895706827832203345e+00,-6.921183490904883939e+00,-6.883207831049528380e+00,-6.893082154409432505e+00,-6.909315051438150945e+00,-6.927364696600475824e+00,-6.890090938868242532e+00,-6.899656800051518601e+00,-6.910076521111344405e+00,-6.905326820911998453e+00,-6.913510328376995417e+00,-6.903811669106987736e+00,-6.911219813918805244e+00,-6.890277627938139915e+00,-6.905137301343534872e+00,-6.897585821244863524e+00,-6.912746240469715531e+00,-6.913701441612168708e+00,-6.909886099326515208e+00,-6.900976932256440932e+00,-6.906274957893996813e+00,-6.922339560397801961e+00,-6.907793849395423180e+00,-6.925235594857454657e+00,-6.922725214085575729e+00,-6.926977249869553432e+00,-6.929304185183617903e+00,-6.898338408298259949e+00,-6.956061634353167378e+00,-6.896645883211569128e+00,-6.886550452546217116e+00,-6.904758369925586337e+00,-6.875635535193893588e+00,-6.886550452546217116e+00,-6.924655716615632173e+00,-6.926977249869553432e+00,-6.899845283701118603e+00,-6.934950067989731792e+00,-6.908744329459375777e+00,-6.912364415340983115e+00,-6.893831358415258848e+00,-6.902865863683222969e+00,-6.893644004784732715e+00,-6.892707762791431492e+00,-6.940039137497203470e+00,-6.896645883211569128e+00,-6.926783582782670479e+00,-6.897209740006886136e+00,-6.908554161159859319e+00,-6.943380663947957387e+00,-6.885435003462351489e+00,-6.897397762946237521e+00,-6.911219813918805244e+00,-6.908364029017446839e+00,-6.910076521111344405e+00,-6.875819544762910240e+00,-6.921568698921973350e+00,-6.884320797218947519e+00,-6.904947817685933131e+00,-6.939646749813142890e+00,-6.904190241892125712e+00,-6.917147740255755295e+00,-6.892333511290058112e+00,-6.938666453685231161e+00,-6.892146438050339441e+00,-6.887108644020381476e+00,-6.912746240469715531e+00,-6.925042264745687959e+00,-6.914466260005090348e+00,-6.924076174437720610e+00,-6.927170954470643238e+00,-6.901732076713695818e+00,-6.911982735947036716e+00,-6.929110066965012749e+00,-6.914848888668645444e+00,-6.904000937584887865e+00,-6.893269402794961920e+00,-6.899091562165532210e+00,-6.904190241892125712e+00,-6.906844271886031450e+00,-6.873980970977846994e+00,-6.897021752413513340e+00,-6.919259673458899584e+00,-6.897585821244863524e+00,-6.925428962352981443e+00,-6.921183490904883939e+00,-6.906274957893996813e+00,-6.911219813918805244e+00,-6.855598434964734977e+00,-6.913510328376995417e+00,-6.926589953195463778e+00,-6.892520619532721327e+00,-6.916572531726810524e+00,-6.885435003462351489e+00,-6.893456686249017196e+00,-6.908934533929754096e+00,-6.899279939297104036e+00,-6.893082154409432505e+00,-6.901354433204677008e+00,-6.938862436047445570e+00,-6.909695713795240835e+00,-6.904947817685933131e+00,-6.913892591378591135e+00,-6.919259673458899584e+00,-6.924655716615632173e+00,-6.930469686481053770e+00,-6.915614585490128974e+00,-6.889158015953297465e+00,-6.894581124148601248e+00,-6.919836430179683973e+00,-6.909505364503717217e+00,-6.914848888668645444e+00,-6.927946148307912111e+00,-6.909886099326515208e+00,-6.907603861744050278e+00,-6.893082154409432505e+00,-6.908364029017446839e+00,-6.917339549981097235e+00,-6.907034115265814123e+00,-6.905137301343534872e+00,-6.912937207719412669e+00,-6.914848888668645444e+00,-6.878768312104162064e+00,-6.921761358589268553e+00,-6.891398494859149793e+00,-6.923496967934415380e+00,-6.927170954470643238e+00,-6.865384667470330271e+00,-6.939058456826275645e+00,-6.929886766033185097e+00,-6.921954055381462467e+00,-6.925815809553164115e+00,-6.898714914326804504e+00,-6.889904284644648769e+00,-6.891398494859149793e+00,-6.899279939297104036e+00,-6.934559671732577257e+00,-6.910266979163534273e+00,-6.888971535766277299e+00,-6.908364029017446839e+00,-6.888039656097685537e+00,-6.904000937584887865e+00,-6.913128211444565352e+00,-6.912173557434115878e+00,-6.899845283701118603e+00,-6.915614585490128974e+00,-6.928721943536892525e+00,-6.962061652353265018e+00,-6.909505364503717217e+00,-6.897397762946237521e+00,-6.907793849395423180e+00,-6.911982735947036716e+00,-6.902676809896858501e+00,-6.944365594589974933e+00,-6.917915200001790055e+00,-6.896833800152833760e+00,-6.934364530742593402e+00,-6.883578682157059703e+00,-6.901920951962155826e+00,-6.886736481753338524e+00,-6.915614585490128974e+00,-6.911601202176669290e+00,-6.896833800152833760e+00,-6.913128211444565352e+00,-6.849485506903674192e+00,-6.922725214085575729e+00,-6.937491365418404499e+00,-6.868668143605285437e+00,-6.905326820911998453e+00,-6.903622436444864618e+00,-6.903811669106987736e+00,-6.910076521111344405e+00,-6.902865863683222969e+00,-6.905326820911998453e+00,-6.907983873148964449e+00,-6.926589953195463778e+00,-6.892146438050339441e+00,-6.931831157079374250e+00,-6.866477962039871485e+00,-6.912364415340983115e+00,-6.922725214085575729e+00,-6.878399240315511420e+00,-6.909505364503717217e+00,-6.944957018954184491e+00,-6.907034115265814123e+00,-6.900599573761397210e+00,-6.913701441612168708e+00,-6.897773914916067284e+00,-6.910838571062491553e+00,-6.869582136905362901e+00,-6.920028756365487865e+00,-6.872145771343669551e+00,-6.904758369925586337e+00,-6.947523907519292052e+00,-6.873430057365528256e+00,-6.943577572484578297e+00,-6.923111016559495567e+00,-6.905516376404936096e+00,-6.915997653872517859e+00,-6.934559671732577257e+00,-6.916189243105788975e+00,-6.876187665510670399e+00,-6.916189243105788975e+00,-6.866113397690227771e+00,-6.949106812479797668e+00,-6.888785090347633755e+00,-6.899845283701118603e+00,-6.928527938298142175e+00,-6.937099975980922650e+00,-6.871229432967444595e+00,-6.911601202176669290e+00,-6.885435003462351489e+00,-6.909886099326515208e+00,-6.924848972003228909e+00,-6.925815809553164115e+00,-6.877108560685798011e+00,-6.901543237132358399e+00,-6.916764231142714436e+00,-6.925235594857454657e+00,-6.888039656097685537e+00,-6.896833800152833760e+00,-6.898526643592932217e+00,-6.916189243105788975e+00,-6.894768653450602969e+00,-6.926589953195463778e+00,-6.912746240469715531e+00,-6.905895595218732197e+00,-6.920221119547766975e+00,-6.897773914916067284e+00,-6.885435003462351489e+00,-6.924462498568466629e+00,-6.899468351921308695e+00,-6.901920951962155826e+00,-6.883207831049528380e+00,-6.907223994692948565e+00,-6.934754850810000093e+00,-6.905895595218732197e+00,-6.898714914326804504e+00,-6.926202806462018913e+00,-6.921954055381462467e+00,-6.903811669106987736e+00,-6.915806101338651146e+00,-6.890277627938139915e+00,-6.885620825259783473e+00,-6.911219813918805244e+00,-6.928140040698243851e+00,-6.903622436444864618e+00,-6.892146438050339441e+00,-6.895331452452420962e+00,-6.932415212386544567e+00,-6.918683249194693019e+00,-6.941610229729244352e+00,-6.925042264745687959e+00,-6.897585821244863524e+00,-6.932220489379405493e+00,-6.915614585490128974e+00,-6.890277627938139915e+00,-6.917339549981097235e+00,-6.887853384326632522e+00,-6.915997653872517859e+00,-6.904758369925586337e+00,-6.875083709556786715e+00,-6.865566800245627377e+00,-6.910266979163534273e+00,-6.927558476273594223e+00,-6.943577572484578297e+00,-6.897962043973153712e+00,-6.924848972003228909e+00,-6.918683249194693019e+00,-6.905705967835970682e+00,-6.904190241892125712e+00,-6.895706827832203345e+00,-6.954069601821926128e+00,-6.887294777106074406e+00,-6.910076521111344405e+00,-6.873980970977846994e+00,-6.953870616645664526e+00,-6.926009289286765735e+00,-6.933584347359934341e+00,-6.908554161159859319e+00,-6.914083777690233745e+00,-6.932025804281934711e+00,-6.936904338691832095e+00,-6.894581124148601248e+00,-6.881725800396642612e+00,-6.931052946923367486e+00,-6.913319251659110876e+00,-6.897397762946237521e+00,-6.893456686249017196e+00,-6.926202806462018913e+00,-6.909695713795240835e+00,-6.917339549981097235e+00,-6.888971535766277299e+00,-6.885063463424639707e+00,-6.888412303763633560e+00,-6.938274604150436176e+00,-6.887108644020381476e+00,-6.914083777690233745e+00,-6.904190241892125712e+00,-6.936317656363476303e+00,-6.920413519740760577e+00,-6.901920951962155826e+00,-6.885249216188245924e+00,-6.895894568375325662e+00,-6.918299150860796942e+00,-6.859754942259103316e+00,-6.907413910181126937e+00,-6.878583759183088731e+00,-6.923303973627147556e+00,-6.888412303763633560e+00,-6.914848888668645444e+00,-6.912746240469715531e+00,-6.904947817685933131e+00,-6.928721943536892525e+00,-6.945351496276852998e+00,-6.915806101338651146e+00,-6.914657556036280184e+00,-6.933194483807238129e+00,-6.922725214085575729e+00,-6.907034115265814123e+00,-6.904568958048896476e+00,-6.894768653450602969e+00,-6.890464351867354509e+00,-6.922146789312868975e+00,-6.938274604150436176e+00,-6.927558476273594223e+00,-6.927364696600475824e+00,-6.895894568375325662e+00,-6.918491181586304606e+00,-6.908934533929754096e+00,-6.895143817589312718e+00,-6.890464351867354509e+00,-6.900599573761397210e+00,-6.897962043973153712e+00,-6.912555309681545523e+00,-6.873980970977846994e+00,-6.913128211444565352e+00,-6.891959399800471786e+00,-6.879876345458523446e+00,-6.878768312104162064e+00,-6.903054953217679923e+00,-6.897585821244863524e+00,-6.913701441612168708e+00,-6.929886766033185097e+00,-6.911982735947036716e+00,-6.860298371309701437e+00,-6.899845283701118603e+00,-6.901354433204677008e+00,-6.861748960865966751e+00,-6.904379582042269092e+00,-6.901543237132358399e+00,-6.917915200001790055e+00,-6.934364530742593402e+00,-6.911410489865613016e+00,-6.943577572484578297e+00,-6.918683249194693019e+00,-6.926977249869553432e+00,-6.898526643592932217e+00,-6.899279939297104036e+00,-6.923496967934415380e+00,-6.891211596437898379e+00,-6.895706827832203345e+00,-6.897397762946237521e+00,-6.876371776714357509e+00,-6.938666453685231161e+00,-6.909695713795240835e+00,-6.908173933018396440e+00,-6.882281304530915023e+00,-6.904758369925586337e+00,-6.903244078513752768e+00,-6.897585821244863524e+00,-6.885063463424639707e+00,-6.925235594857454657e+00,-6.944759838632140969e+00,-6.918491181586304606e+00,-6.897021752413513340e+00,-6.917339549981097235e+00,-6.916764231142714436e+00,-6.913510328376995417e+00,-6.897021752413513340e+00,-6.917531396504466912e+00,-6.889904284644648769e+00,-6.915231663792935635e+00,-6.920028756365487865e+00,-6.924076174437720610e+00,-6.900599573761397210e+00,-6.918299150860796942e+00,-6.909124774584755713e+00,-6.941217225204633579e+00,-6.898150208429443708e+00,-6.907793849395423180e+00,-6.921954055381462467e+00,-6.910838571062491553e+00,-6.935535948291619235e+00,-6.926396361093416942e+00,-6.921376076365277186e+00,-6.917915200001790055e+00,-6.926589953195463778e+00,-6.911029174322383284e+00,-6.889531080684355047e+00,-6.898150208429443708e+00,-6.905516376404936096e+00,-6.928333970690124133e+00,-6.869399271402430784e+00,-6.906274957893996813e+00,-6.916572531726810524e+00,-6.925042264745687959e+00,-6.914466260005090348e+00,-6.888785090347633755e+00,-6.926589953195463778e+00,-6.891398494859149793e+00,-6.899656800051518601e+00,-6.922146789312868975e+00,-6.882466541171252672e+00,-6.919451888740605128e+00,-6.916572531726810524e+00,-6.902109862891215641e+00,-6.909315051438150945e+00,-6.883578682157059703e+00,-6.895331452452420962e+00,-6.886922545573765930e+00,-6.890651110668905233e+00,-6.950692227001336931e+00,-6.908744329459375777e+00,-6.921568698921973350e+00,-6.915040257916190924e+00,-6.935926725944110416e+00,-6.892333511290058112e+00,-6.933779336148697681e+00,-6.917147740255755295e+00,-6.908934533929754096e+00,-6.880430822877775299e+00,-6.950890580666571950e+00,-6.933194483807238129e+00,-6.926009289286765735e+00,-6.921761358589268553e+00,-6.907223994692948565e+00,-6.898714914326804504e+00,-6.919451888740605128e+00,-6.905705967835970682e+00,-6.935340616715649276e+00,-6.896833800152833760e+00,-6.913892591378591135e+00,-6.894581124148601248e+00,-6.917915200001790055e+00,-6.897773914916067284e+00,-6.893269402794961920e+00,-6.908173933018396440e+00,-6.899468351921308695e+00,-6.911601202176669290e+00,-6.911601202176669290e+00,-6.894206171013349760e+00,-6.876187665510670399e+00,-6.876924313794443577e+00,-6.911601202176669290e+00,-6.903433239584968462e+00,-6.882281304530915023e+00,-6.870863132597049727e+00,-6.923496967934415380e+00,-6.944562697182512068e+00,-6.909124774584755713e+00,-6.898714914326804504e+00,-6.886550452546217116e+00,-6.913701441612168708e+00,-6.906085258566859508e+00,-6.860842095836011012e+00,-6.919259673458899584e+00,-6.931052946923367486e+00,-6.896082344171576395e+00,-6.896082344171576395e+00,-6.920798431215875013e+00,-6.907603861744050278e+00,-6.974170781143014253e+00,-6.882466541171252672e+00,-6.911029174322383284e+00,-6.934754850810000093e+00,-6.888598679684404757e+00,-6.899279939297104036e+00,-6.889904284644648769e+00,-6.904758369925586337e+00,-6.921568698921973350e+00,-6.896270155234200061e+00,-6.936122172050469104e+00,-6.917531396504466912e+00,-6.892520619532721327e+00,-6.894768653450602969e+00,-6.912937207719412669e+00,-6.907034115265814123e+00,-6.932999609013675624e+00,-6.930275341907513820e+00,-6.943380663947957387e+00,-6.877845887908142331e+00,-6.895143817589312718e+00,-6.923496967934415380e+00,-6.892707762791431492e+00,-6.895519122528977363e+00,-6.929498341091420599e+00,-6.929692534703061568e+00,-6.888598679684404757e+00,-6.896270155234200061e+00,-6.876555921821221773e+00,-6.926783582782670479e+00,-6.882466541171252672e+00,-6.920221119547766975e+00,-6.911601202176669290e+00,-6.874532188263277277e+00,-6.897397762946237521e+00,-6.906654464539917271e+00,-6.883022457056968690e+00,-6.904947817685933131e+00,-6.927946148307912111e+00,-6.866842659345154587e+00,-6.895519122528977363e+00,-6.906274957893996813e+00,-6.903622436444864618e+00,-6.927946148307912111e+00,-6.919451888740605128e+00,-6.935340616715649276e+00,-6.906274957893996813e+00,-6.906844271886031450e+00,-6.872879447091913008e+00,-6.896833800152833760e+00,-6.878030304690591734e+00,-6.888225962572374073e+00 +-6.888608149554835691e+00,-6.947849305793029728e+00,-6.869148841033506869e+00,-6.919815326411356438e+00,-6.892904611588340558e+00,-6.895599304676764518e+00,-6.910094938091818406e+00,-6.892187251442800644e+00,-6.917606194437817990e+00,-6.912287520735235447e+00,-6.892366543240679988e+00,-6.938229312713234620e+00,-6.929817261987105681e+00,-6.879893109957397002e+00,-6.925544941937999965e+00,-6.932800112819171190e+00,-6.868973663665974172e+00,-6.896679218388626964e+00,-6.904452917483274277e+00,-6.878123824287078136e+00,-6.909365144226185862e+00,-6.943499417137472207e+00,-6.941802424178135311e+00,-6.915401931972944283e+00,-6.871428943748950857e+00,-6.909547542767503714e+00,-6.891828764254878337e+00,-6.885041811966045699e+00,-6.900648909635556549e+00,-6.894161231446727101e+00,-6.897039448940072148e+00,-6.891291274319874205e+00,-6.909365144226185862e+00,-6.872834672323435257e+00,-6.897580038195512131e+00,-6.884152211338031790e+00,-6.910094938091818406e+00,-6.896499151763489266e+00,-6.893622486708904873e+00,-6.874066307915036589e+00,-6.883796592557613891e+00,-6.921660005038123842e+00,-6.923138201907434564e+00,-6.911738924214207103e+00,-6.923323130248229873e+00,-6.928886942820556172e+00,-6.910642633221893760e+00,-6.878300612053825702e+00,-6.919262585724782255e+00,-6.903908601040550153e+00,-6.906269448409672052e+00,-6.917974044359199937e+00,-6.915035026813811214e+00,-6.887715372064949548e+00,-6.901191454182727725e+00,-6.960821635741828217e+00,-6.930003429724774122e+00,-6.895059784836323757e+00,-6.920183990010002617e+00,-6.884152211338031790e+00,-6.915952542246559531e+00,-6.906087646754775378e+00,-6.926101167038090978e+00,-6.895059784836323757e+00,-6.920921725196542695e+00,-6.926472155727191549e+00,-6.915218462565952962e+00,-6.888429530281340973e+00,-6.897039448940072148e+00,-6.927214546258689154e+00,-6.921475383972335749e+00,-6.889501724808646088e+00,-6.912470453142221416e+00,-6.933547217822169983e+00,-6.860948498474250812e+00,-6.908271451080345571e+00,-6.918342029643941515e+00,-6.894340877544397728e+00,-6.909729974584116974e+00,-6.898842550762884329e+00,-6.891649568841801354e+00,-6.910460034846511945e+00,-6.894700266586900383e+00,-6.945388348564254244e+00,-6.916136146396528517e+00,-6.951647259465786988e+00,-6.903545887942630799e+00,-6.943876918085708283e+00,-6.919999641221574294e+00,-6.930375869207663797e+00,-6.894520555920589544e+00,-6.908818148132684911e+00,-6.920921725196542695e+00,-6.913202517596584329e+00,-6.916503455858878269e+00,-6.917790102484312698e+00,-6.943310720090021704e+00,-6.911738924214207103e+00,-6.952599005992375680e+00,-6.913385617478081002e+00,-6.864953030682171331e+00,-6.898481670210429684e+00,-6.885041811966045699e+00,-6.910825264945533064e+00,-6.886645090121897184e+00,-6.899384115899326986e+00,-6.933360389236852939e+00,-6.899023039888904307e+00,-6.895059784836323757e+00,-6.922953307758806574e+00,-6.913202517596584329e+00,-6.899203561597129664e+00,-6.887358484123973668e+00,-6.928515057356991136e+00,-6.898120919845766252e+00,-6.901010573292301942e+00,-6.912470453142221416e+00,-6.915768971800885012e+00,-6.913385617478081002e+00,-6.934294881408400002e+00,-6.908453650224512188e+00,-6.913935118361949961e+00,-6.935604639290463780e+00,-6.894880009554940514e+00,-6.906269448409672052e+00,-6.926657701696736780e+00,-6.889501724808646088e+00,-6.909365144226185862e+00,-6.894880009554940514e+00,-6.883263401395954162e+00,-6.915401931972944283e+00,-6.899925974487496561e+00,-6.883618830580431336e+00,-6.928515057356991136e+00,-6.910094938091818406e+00,-6.921660005038123842e+00,-6.940672693310474983e+00,-6.916136146396528517e+00,-6.911007930029610336e+00,-6.920368372789173605e+00,-6.897760299574999365e+00,-6.955459692600443944e+00,-6.935417425960327620e+00,-6.902277427140134591e+00,-6.878477431080012749e+00,-6.923508092793841939e+00,-6.893981617615978053e+00,-6.908089285126658652e+00,-6.901553314146871898e+00,-6.912653419019594736e+00,-6.923323130248229873e+00,-6.938604829052607670e+00,-6.943876918085708283e+00,-6.909365144226185862e+00,-6.883263401395954162e+00,-6.907907152351361546e+00,-6.864604173186918956e+00,-6.906996985728047989e+00,-6.901372367796971830e+00,-6.886466821113492287e+00,-6.926843282099978794e+00,-6.927585948305670982e+00,-6.910642633221893760e+00,-6.877593648433006024e+00,-6.892545867189873832e+00,-6.871077820149839255e+00,-6.912470453142221416e+00,-6.904997530367753100e+00,-6.926843282099978794e+00,-6.902458537346189971e+00,-6.916870900287042545e+00,-6.889501724808646088e+00,-6.932800112819171190e+00,-6.894161231446727101e+00,-6.915401931972944283e+00,-6.895959146350312707e+00,-6.913385617478081002e+00,-6.922953307758806574e+00,-6.922768447789707125e+00,-6.884685876742496546e+00,-6.918158020074924863e+00,-6.905542440017054417e+00,-6.964862045278833236e+00,-6.938604829052607670e+00,-6.899925974487496561e+00,-6.924433419037342219e+00,-6.911190628486316712e+00,-6.913202517596584329e+00,-6.890575070171085059e+00,-6.896319117556503286e+00,-6.917790102484312698e+00,-6.932240150135383416e+00,-6.911921756283462059e+00,-6.904452917483274277e+00,-6.913751917848475870e+00,-6.880424506657529804e+00,-6.885397873924587131e+00,-6.948228452717001957e+00,-6.933360389236852939e+00,-6.926286644178565766e+00,-6.931121164565436032e+00,-6.911556125566407971e+00,-6.880601701661094083e+00,-6.895779209327784542e+00,-6.922029349455987912e+00,-6.939356285033865035e+00,-6.907725052742373251e+00,-6.908271451080345571e+00,-6.906633150905042484e+00,-6.914118352444003079e+00,-6.910825264945533064e+00,-6.911373360327846882e+00,-6.915218462565952962e+00,-6.867923243401323319e+00,-6.904815959781688051e+00,-6.938792640115231336e+00,-6.911921756283462059e+00,-6.902458537346189971e+00,-6.887893863810180761e+00,-6.927957488343382764e+00,-6.927585948305670982e+00,-6.900829725113853286e+00,-6.877416985593574950e+00,-6.914301620106936497e+00,-6.901191454182727725e+00,-6.875475751418271386e+00,-6.897580038195512131e+00,-6.934855996171089387e+00,-6.899384115899326986e+00,-6.903727228046491859e+00,-6.903908601040550153e+00,-6.914668256224700826e+00,-6.883085734166208169e+00,-6.870200550157615993e+00,-6.896859317443594151e+00,-6.942744842493103974e+00,-6.909365144226185862e+00,-6.927585948305670982e+00,-6.881665531548659231e+00,-6.941425705394250301e+00,-6.908089285126658652e+00,-6.902096349729045954e+00,-6.921106244064120006e+00,-6.905179133927681789e+00,-6.920552789571623009e+00,-6.913751917848475870e+00,-6.907178952792511595e+00,-6.945577438098711198e+00,-6.912653419019594736e+00,-6.895059784836323757e+00,-6.894161231446727101e+00,-6.898481670210429684e+00,-6.935979171130048471e+00,-6.898842550762884329e+00,-6.905724142570475621e+00,-6.904271445746998026e+00,-6.911007930029610336e+00,-6.905360770473453869e+00,-6.908271451080345571e+00,-6.922214072833256182e+00,-6.895239592442671039e+00,-6.914484921363062142e+00,-6.902639680359092367e+00,-6.918526073078711036e+00,-6.881310795823052828e+00,-6.885397873924587131e+00,-6.908089285126658652e+00,-6.905179133927681789e+00,-6.921106244064120006e+00,-6.909912439688172370e+00,-6.922214072833256182e+00,-6.926472155727191549e+00,-6.902639680359092367e+00,-6.938604829052607670e+00,-6.905905878145714993e+00,-6.911556125566407971e+00,-6.912287520735235447e+00,-6.906451283122420293e+00,-6.897399809304332052e+00,-6.906815051769573444e+00,-6.909547542767503714e+00,-6.911373360327846882e+00,-6.931680500834328740e+00,-6.903183306357803417e+00,-6.908089285126658652e+00,-6.947849305793029728e+00,-6.907725052742373251e+00,-6.896139115756000137e+00,-6.949366756767062725e+00,-6.891649568841801354e+00,-6.917238479780245086e+00,-6.889322945868329384e+00,-6.909912439688172370e+00,-6.903002064853001940e+00,-6.895419432385606839e+00,-6.909365144226185862e+00,-6.914668256224700826e+00,-6.909000446920902760e+00,-6.896139115756000137e+00,-6.901553314146871898e+00,-6.871780190679151801e+00,-6.901191454182727725e+00,-6.914118352444003079e+00,-6.913019451234516666e+00,-6.893802036040565184e+00,-6.905905878145714993e+00,-6.906633150905042484e+00,-6.912836418379608716e+00,-6.928143310140814748e+00,-6.897760299574999365e+00,-6.897580038195512131e+00,-6.951076646040890594e+00,-6.913935118361949961e+00,-6.904090006936739243e+00,-6.902277427140134591e+00,-6.909365144226185862e+00,-6.901915305101050890e+00,-6.934481884681503061e+00,-6.921660005038123842e+00,-6.885754062708405954e+00,-6.871604551792250604e+00,-6.895059784836323757e+00,-6.907907152351361546e+00,-6.881842946611662626e+00,-6.895779209327784542e+00,-6.881488147956176249e+00,-6.919999641221574294e+00,-6.927400230039745921e+00,-6.911921756283462059e+00,-6.909912439688172370e+00,-6.897940593454510605e+00,-6.917606194437817990e+00,-6.909182778948029124e+00,-6.916319784263173176e+00,-6.924803789411946298e+00,-6.894340877544397728e+00,-6.909000446920902760e+00,-6.917422320207274211e+00,-6.917422320207274211e+00,-6.888786800738873950e+00,-6.917606194437817990e+00,-6.932053565565386322e+00,-6.883441100196955986e+00,-6.892366543240679988e+00,-6.906633150905042484e+00,-6.931867015802696486e+00,-6.926657701696736780e+00,-6.892187251442800644e+00,-6.907542986287614539e+00,-6.927214546258689154e+00,-6.906269448409672052e+00,-6.901372367796971830e+00,-6.934107913098984000e+00,-6.901553314146871898e+00,-6.917238479780245086e+00,-6.924063185786168972e+00,-6.880424506657529804e+00,-6.921290796985193339e+00,-6.904090006936739243e+00,-6.896859317443594151e+00,-6.903364580717042287e+00,-6.914484921363062142e+00,-6.894700266586900383e+00,-6.914851624704173361e+00,-6.915401931972944283e+00,-6.889322945868329384e+00,-6.921290796985193339e+00,-6.903364580717042287e+00,-6.889680535716587784e+00,-6.910094938091818406e+00,-6.899203561597129664e+00,-6.914118352444003079e+00,-6.934481884681503061e+00,-6.912470453142221416e+00,-6.896139115756000137e+00,-6.919631045566829286e+00,-6.917422320207274211e+00,-6.867048735256391367e+00,-6.897940593454510605e+00,-6.924248285277673887e+00,-6.941237399207835779e+00,-6.912653419019594736e+00,-6.903727228046491859e+00,-6.868973663665974172e+00,-6.918710150391701674e+00,-6.887893863810180761e+00,-6.919078406702253048e+00,-6.896679218388626964e+00,-6.900468126845584749e+00,-6.907907152351361546e+00,-6.903183306357803417e+00,-6.893622486708904873e+00,-6.933920979740181068e+00,-6.903183306357803417e+00,-6.895779209327784542e+00,-6.935230247672462767e+00,-6.909000446920902760e+00,-6.903183306357803417e+00,-6.919262585724782255e+00,-6.893442969609418824e+00,-6.922768447789707125e+00,-6.925544941937999965e+00,-6.890038253481089114e+00,-6.918158020074924863e+00,-6.910642633221893760e+00,-6.897399809304332052e+00,-6.939168368092600403e+00,-6.893802036040565184e+00,-6.896139115756000137e+00,-6.927400230039745921e+00,-6.931680500834328740e+00,-6.907542986287614539e+00,-6.914484921363062142e+00,-6.883263401395954162e+00,-6.897039448940072148e+00,-6.924063185786168972e+00,-6.945577438098711198e+00,-6.876710646168127994e+00,-6.921290796985193339e+00,-6.890933108126933604e+00,-6.935791887675993195e+00,-6.866699146020177835e+00,-6.884685876742496546e+00,-6.924063185786168972e+00,-6.927957488343382764e+00,-6.885575952457690718e+00,-6.866699146020177835e+00,-6.901553314146871898e+00,-6.881488147956176249e+00,-6.910460034846511945e+00,-6.903364580717042287e+00,-6.868098236839514925e+00,-6.913385617478081002e+00,-6.895059784836323757e+00,-6.937291138331634244e+00,-6.924063185786168972e+00,-6.899564702807266414e+00,-6.898842550762884329e+00,-6.901734293244279783e+00,-6.924803789411946298e+00,-6.909912439688172370e+00,-6.887536912173336745e+00,-6.912287520735235447e+00,-6.881488147956176249e+00,-6.889501724808646088e+00,-6.918158020074924863e+00,-6.897940593454510605e+00,-6.914851624704173361e+00,-6.890396099253381479e+00,-6.918158020074924863e+00,-6.922214072833256182e+00,-6.914118352444003079e+00,-6.931121164565436032e+00,-6.906087646754775378e+00,-6.933920979740181068e+00,-6.902820856190732712e+00,-6.898842550762884329e+00,-6.894340877544397728e+00,-6.911921756283462059e+00,-6.916136146396528517e+00,-6.900468126845584749e+00,-6.907542986287614539e+00,-6.918342029643941515e+00,-6.959862034862128510e+00,-6.924803789411946298e+00,-6.918526073078711036e+00,-6.915218462565952962e+00,-6.894161231446727101e+00,-6.920552789571623009e+00,-6.914301620106936497e+00,-6.898842550762884329e+00,-6.924618587077867815e+00,-6.882552921792356670e+00,-6.903183306357803417e+00,-6.901010573292301942e+00,-6.904815959781688051e+00,-6.874770781350301618e+00,-6.906269448409672052e+00,-6.903364580717042287e+00,-6.905542440017054417e+00,-6.911190628486316712e+00,-6.944443436843187101e+00,-6.939544237294544615e+00,-6.917422320207274211e+00,-6.910277469807210693e+00,-6.894340877544397728e+00,-6.900468126845584749e+00,-6.904090006936739243e+00,-6.931867015802696486e+00,-6.870200550157615993e+00,-6.926843282099978794e+00,-6.900287376732125111e+00,-6.915401931972944283e+00,-6.929817261987105681e+00,-6.899023039888904307e+00,-6.922768447789707125e+00,-6.910642633221893760e+00,-6.907725052742373251e+00,-6.917606194437817990e+00,-6.944821294395387312e+00,-6.905179133927681789e+00,-6.941425705394250301e+00,-6.929631128901412751e+00,-6.907907152351361546e+00,-6.915401931972944283e+00,-6.918894261595388784e+00,-6.890754073125112456e+00,-6.922583621987499214e+00,-6.915035026813811214e+00,-6.887715372064949548e+00,-6.905724142570475621e+00,-6.874770781350301618e+00,-6.918894261595388784e+00,-6.895599304676764518e+00,-6.902277427140134591e+00,-6.892904611588340558e+00,-6.891470405533967281e+00,-6.929631128901412751e+00,-6.910460034846511945e+00,-6.908818148132684911e+00,-6.894700266586900383e+00,-6.892545867189873832e+00,-6.880247343046471897e+00,-6.892725223301914284e+00,-6.887180087905500514e+00,-6.876357663460614944e+00,-6.883974386139733781e+00,-6.876710646168127994e+00,-6.934294881408400002e+00,-6.899203561597129664e+00,-6.904815959781688051e+00,-6.887715372064949548e+00,-6.894340877544397728e+00,-6.926657701696736780e+00,-6.877240353958388397e+00,-6.907178952792511595e+00,-6.909365144226185862e+00,-6.902458537346189971e+00,-6.916687161196033884e+00,-6.903364580717042287e+00,-6.931307575228665030e+00,-6.904271445746998026e+00,-6.892007991784705467e+00,-6.889680535716587784e+00,-6.890038253481089114e+00,-6.885219827097801115e+00,-6.888250942906992691e+00,-6.920368372789173605e+00,-6.933734081318929654e+00,-6.927400230039745921e+00,-6.893622486708904873e+00,-6.906087646754775378e+00,-6.901734293244279783e+00,-6.867923243401323319e+00,-6.922583621987499214e+00,-6.896319117556503286e+00,-6.894161231446727101e+00,-6.916319784263173176e+00,-6.862165572431319305e+00,-6.890396099253381479e+00,-6.952789464044565548e+00,-6.889501724808646088e+00,-6.941049128473963492e+00,-6.913935118361949961e+00,-6.922029349455987912e+00,-6.885397873924587131e+00,-6.919078406702253048e+00,-6.888429530281340973e+00,-6.891470405533967281e+00,-6.942367768582149878e+00,-6.916136146396528517e+00,-6.896499151763489266e+00,-6.881665531548659231e+00,-6.926657701696736780e+00,-6.919815326411356438e+00,-6.929072937427248391e+00,-6.920368372789173605e+00,-6.917790102484312698e+00,-6.909547542767503714e+00,-6.926101167038090978e+00,-6.918342029643941515e+00,-6.895959146350312707e+00,-6.941802424178135311e+00,-6.901191454182727725e+00,-6.899564702807266414e+00,-6.884685876742496546e+00,-6.935230247672462767e+00,-6.938041607410008638e+00,-6.882020393156357940e+00,-6.926472155727191549e+00,-6.916687161196033884e+00,-6.922768447789707125e+00,-6.897399809304332052e+00,-6.927771701069277199e+00,-6.908818148132684911e+00,-6.941237399207835779e+00,-6.914668256224700826e+00,-6.875299462303667397e+00,-6.894880009554940514e+00,-6.893802036040565184e+00,-6.908089285126658652e+00,-6.902639680359092367e+00,-6.903727228046491859e+00,-6.913568750891283088e+00,-6.932613423749273807e+00,-6.952599005992375680e+00,-6.899384115899326986e+00,-6.924989026052283947e+00,-6.923138201907434564e+00,-6.946144921325895893e+00,-6.891470405533967281e+00,-6.896319117556503286e+00,-6.910825264945533064e+00,-6.911556125566407971e+00,-6.904452917483274277e+00,-6.885397873924587131e+00,-6.918158020074924863e+00,-6.906269448409672052e+00,-6.936728655894381035e+00,-6.926286644178565766e+00,-6.897219612889754714e+00,-6.894161231446727101e+00,-6.884685876742496546e+00,-6.892366543240679988e+00,-6.890038253481089114e+00,-6.908271451080345571e+00,-6.886823390915807863e+00,-6.902458537346189971e+00,-6.915035026813811214e+00,-6.885754062708405954e+00,-6.898481670210429684e+00,-6.893981617615978053e+00,-6.892725223301914284e+00,-6.877063753516429401e+00,-6.879893109957397002e+00,-6.899023039888904307e+00,-6.904997530367753100e+00,-6.899203561597129664e+00,-6.911921756283462059e+00,-6.925915724293007614e+00,-6.917790102484312698e+00,-6.893442969609418824e+00,-6.886823390915807863e+00,-6.925544941937999965e+00,-6.938604829052607670e+00,-6.901553314146871898e+00,-6.926657701696736780e+00,-6.908271451080345571e+00,-6.913019451234516666e+00,-6.897039448940072148e+00,-6.885932204688034020e+00,-6.901553314146871898e+00,-6.919999641221574294e+00,-6.917422320207274211e+00,-6.874242379752802279e+00,-6.913751917848475870e+00,-6.893084032060697197e+00,-6.900106659283363086e+00,-6.909547542767503714e+00,-6.898662094207310247e+00,-6.906633150905042484e+00,-6.913935118361949961e+00,-6.897940593454510605e+00,-6.894161231446727101e+00,-6.879539002304971618e+00,-6.912653419019594736e+00,-6.945199294777889776e+00,-6.913202517596584329e+00,-6.899384115899326986e+00,-6.911738924214207103e+00,-6.881842946611662626e+00,-6.916870900287042545e+00,-6.905905878145714993e+00,-6.890217160360535331e+00,-6.883263401395954162e+00,-6.926472155727191549e+00,-6.899023039888904307e+00,-6.902639680359092367e+00,-6.934294881408400002e+00,-6.890217160360535331e+00,-6.915218462565952962e+00,-6.912836418379608716e+00,-6.902639680359092367e+00,-6.912836418379608716e+00,-6.948607743447890783e+00,-6.907360952975015067e+00,-6.894161231446727101e+00,-6.908818148132684911e+00,-6.880247343046471897e+00,-6.901734293244279783e+00,-6.908089285126658652e+00,-6.887893863810180761e+00,-6.915401931972944283e+00,-6.916687161196033884e+00,-6.915585435047136187e+00,-6.896859317443594151e+00,-6.899384115899326986e+00,-6.936353843296290123e+00,-6.904997530367753100e+00,-6.925359602302588513e+00,-6.889859378603588880e+00,-6.929072937427248391e+00,-6.893442969609418824e+00,-6.877063753516429401e+00,-6.914668256224700826e+00,-6.914301620106936497e+00,-6.928700982801423436e+00,-6.878831162954943679e+00,-6.911007930029610336e+00,-6.925730315930559655e+00,-6.871780190679151801e+00,-6.905905878145714993e+00,-6.892007991784705467e+00,-6.904634422157517548e+00,-6.918526073078711036e+00,-6.898301278760495592e+00,-6.910277469807210693e+00,-6.929258966634369798e+00,-6.911921756283462059e+00,-6.935791887675993195e+00,-6.905542440017054417e+00,-6.928143310140814748e+00,-6.916319784263173176e+00,-6.926472155727191549e+00,-6.890217160360535331e+00,-6.942556287764535483e+00,-6.899925974487496561e+00,-6.900829725113853286e+00,-6.927957488343382764e+00,-6.906996985728047989e+00,-6.936916114888274976e+00,-6.911007930029610336e+00,-6.902458537346189971e+00,-6.915218462565952962e+00,-6.918710150391701674e+00,-6.913751917848475870e+00,-6.874418482597317137e+00,-6.883085734166208169e+00,-6.898842550762884329e+00,-6.929258966634369798e+00,-6.905179133927681789e+00,-6.956223926493199983e+00,-6.902639680359092367e+00,-6.907725052742373251e+00,-6.923693089556925528e+00,-6.876534139239772969e+00,-6.940672693310474983e+00,-6.904452917483274277e+00,-6.924803789411946298e+00,-6.895059784836323757e+00,-6.903908601040550153e+00,-6.885932204688034020e+00,-6.895419432385606839e+00,-6.898301278760495592e+00,-6.892545867189873832e+00,-6.902820856190732712e+00,-6.892725223301914284e+00,-6.875828422908435655e+00,-6.921660005038123842e+00,-6.919078406702253048e+00,-6.924248285277673887e+00,-6.888608149554835691e+00,-6.926101167038090978e+00,-6.919631045566829286e+00,-6.916503455858878269e+00,-6.894880009554940514e+00,-6.922768447789707125e+00,-6.911007930029610336e+00,-6.931867015802696486e+00,-6.925915724293007614e+00,-6.911190628486316712e+00,-6.922953307758806574e+00,-6.908271451080345571e+00,-6.885397873924587131e+00,-6.901915305101050890e+00,-6.906269448409672052e+00,-6.908271451080345571e+00,-6.897039448940072148e+00,-6.900287376732125111e+00,-6.890933108126933604e+00,-6.906633150905042484e+00,-6.902639680359092367e+00,-6.897760299574999365e+00,-6.924803789411946298e+00,-6.901734293244279783e+00,-6.922583621987499214e+00,-6.888965483844861737e+00,-6.904090006936739243e+00,-6.899203561597129664e+00,-6.909729974584116974e+00,-6.902277427140134591e+00,-6.906087646754775378e+00,-6.914484921363062142e+00,-6.913202517596584329e+00,-6.916687161196033884e+00,-6.898842550762884329e+00,-6.901915305101050890e+00,-6.942367768582149878e+00,-6.868273260905771949e+00,-6.921660005038123842e+00,-6.905179133927681789e+00,-6.914301620106936497e+00,-6.883441100196955986e+00,-6.909912439688172370e+00,-6.960245764721019412e+00,-6.896319117556503286e+00,-6.881133475138129896e+00,-6.914668256224700826e+00,-6.896319117556503286e+00,-6.880247343046471897e+00,-6.901553314146871898e+00,-6.920921725196542695e+00,-6.938980486457476005e+00,-6.893442969609418824e+00,-6.916319784263173176e+00,-6.914484921363062142e+00,-6.899023039888904307e+00,-6.896139115756000137e+00,-6.876181218819663599e+00,-6.893622486708904873e+00,-6.910825264945533064e+00,-6.918710150391701674e+00,-6.913202517596584329e+00,-6.947470302566964406e+00,-6.870200550157615993e+00,-6.916319784263173176e+00,-6.919446798675474852e+00,-6.932053565565386322e+00,-6.917974044359199937e+00,-6.899745322332728747e+00,-6.934668922931370716e+00,-6.916687161196033884e+00,-6.896139115756000137e+00,-6.914668256224700826e+00,-6.874242379752802279e+00,-6.925730315930559655e+00,-6.909365144226185862e+00,-6.921475383972335749e+00,-6.915401931972944283e+00,-6.919999641221574294e+00,-6.927214546258689154e+00,-6.898481670210429684e+00,-6.911007930029610336e+00,-6.909365144226185862e+00,-6.901372367796971830e+00,-6.923138201907434564e+00,-6.913751917848475870e+00,-6.901915305101050890e+00,-6.908271451080345571e+00,-6.899564702807266414e+00,-6.922214072833256182e+00,-6.917974044359199937e+00,-6.888250942906992691e+00,-6.892904611588340558e+00,-6.893802036040565184e+00,-6.882730494375616459e+00,-6.922214072833256182e+00,-6.895239592442671039e+00,-6.910094938091818406e+00,-6.901191454182727725e+00,-6.935791887675993195e+00,-6.900648909635556549e+00,-6.909365144226185862e+00,-6.901372367796971830e+00,-6.901372367796971830e+00,-6.889144198884208592e+00,-6.922768447789707125e+00,-6.876887184256679220e+00,-6.905179133927681789e+00,-6.901372367796971830e+00,-6.903908601040550153e+00,-6.903545887942630799e+00,-6.910460034846511945e+00,-6.869324049093526341e+00,-6.885754062708405954e+00,-6.925174297011590596e+00,-6.884685876742496546e+00,-6.878300612053825702e+00,-6.937103609029632523e+00,-6.908818148132684911e+00,-6.910094938091818406e+00,-6.904634422157517548e+00,-6.908271451080345571e+00,-6.888072387420402620e+00,-6.934107913098984000e+00,-6.878831162954943679e+00,-6.962936004621791852e+00,-6.922398830339554721e+00,-6.918710150391701674e+00,-6.895419432385606839e+00,-6.963128441839744553e+00,-6.899564702807266414e+00,-6.920368372789173605e+00,-6.877593648433006024e+00,-6.898120919845766252e+00,-6.918894261595388784e+00,-6.918158020074924863e+00,-6.865127505078497450e+00,-6.906087646754775378e+00,-6.910094938091818406e+00,-6.915401931972944283e+00,-6.910277469807210693e+00,-6.902639680359092367e+00,-6.938417053256356937e+00,-6.906269448409672052e+00,-6.947280854806617612e+00,-6.917422320207274211e+00,-6.917790102484312698e+00,-6.915768971800885012e+00,-6.896679218388626964e+00,-6.883974386139733781e+00,-6.919999641221574294e+00,-6.912287520735235447e+00,-6.897399809304332052e+00,-6.900106659283363086e+00,-6.914118352444003079e+00,-6.906451283122420293e+00,-6.909547542767503714e+00,-6.904815959781688051e+00,-6.927400230039745921e+00,-6.922583621987499214e+00,-6.944443436843187101e+00,-6.919262585724782255e+00,-6.896859317443594151e+00,-6.883618830580431336e+00,-6.870902304572380714e+00,-6.876534139239772969e+00,-6.936353843296290123e+00,-6.889859378603588880e+00,-6.888072387420402620e+00,-6.896139115756000137e+00,-6.902458537346189971e+00,-6.912104621786394176e+00,-6.923138201907434564e+00,-6.898662094207310247e+00,-6.882908098496498539e+00,-6.900648909635556549e+00,-6.911921756283462059e+00,-6.875123204261438303e+00,-6.896499151763489266e+00,-6.888786800738873950e+00,-6.910642633221893760e+00,-6.921844660195143106e+00,-6.884330068163757588e+00,-6.897940593454510605e+00,-6.897580038195512131e+00,-6.918894261595388784e+00,-6.882552921792356670e+00,-6.887180087905500514e+00,-6.929631128901412751e+00,-6.886466821113492287e+00,-6.901010573292301942e+00,-6.925915724293007614e+00,-6.900829725113853286e+00,-6.925730315930559655e+00,-6.911190628486316712e+00,-6.919815326411356438e+00,-6.919446798675474852e+00,-6.912104621786394176e+00,-6.921290796985193339e+00,-6.914668256224700826e+00,-6.900829725113853286e+00,-6.895239592442671039e+00,-6.880424506657529804e+00,-6.942556287764535483e+00,-6.933173595549936508e+00,-6.918710150391701674e+00,-6.957371373549676719e+00,-6.891649568841801354e+00,-6.877770342487711019e+00,-6.900829725113853286e+00,-6.897760299574999365e+00,-6.893263484730537627e+00,-6.885932204688034020e+00,-6.915035026813811214e+00,-6.900468126845584749e+00,-6.963898561246308461e+00,-6.919446798675474852e+00,-6.879539002304971618e+00,-6.921106244064120006e+00,-6.912653419019594736e+00,-6.900106659283363086e+00,-6.907360952975015067e+00,-6.894880009554940514e+00,-6.898120919845766252e+00,-6.931307575228665030e+00,-6.902458537346189971e+00,-6.886288583879261793e+00,-6.885219827097801115e+00,-6.878654281376698876e+00,-6.918894261595388784e+00,-6.887536912173336745e+00,-6.897760299574999365e+00,-6.912104621786394176e+00,-6.908635882571259046e+00,-6.911373360327846882e+00,-6.920552789571623009e+00,-6.944632347772246916e+00,-6.888250942906992691e+00,-6.917790102484312698e+00 +-6.892322400755601208e+00,-6.888457483825305872e+00,-6.901585156867840354e+00,-6.945335001821746346e+00,-6.923981877351176095e+00,-6.901585156867840354e+00,-6.931432480161788590e+00,-6.896757817378373900e+00,-6.932967694433763484e+00,-6.924172226642699712e+00,-6.904380797492107646e+00,-6.949426580837190670e+00,-6.899539976272098585e+00,-6.897498969904427568e+00,-6.893983377422415515e+00,-6.879679080708800853e+00,-6.874231455106562194e+00,-6.915642177764647514e+00,-6.919613814190993750e+00,-6.910371081222784539e+00,-6.932775663708255820e+00,-6.914133312898977479e+00,-6.917909752432427339e+00,-6.913756452144562914e+00,-6.950403238791569294e+00,-6.886072380410430682e+00,-6.915642177764647514e+00,-6.917909752432427339e+00,-6.906248909374827605e+00,-6.933928401588064006e+00,-6.920941206061254292e+00,-6.910183340679662223e+00,-6.897313630269016116e+00,-6.925696326766264121e+00,-6.907933199096476073e+00,-6.904754140785598793e+00,-6.931240743990173314e+00,-6.939712107704913535e+00,-6.904754140785598793e+00,-6.896387447003769822e+00,-6.933928401588064006e+00,-6.890296057610369118e+00,-6.889192507746672689e+00,-6.913944864768767573e+00,-6.890296057610369118e+00,-6.906435912647930664e+00,-6.925696326766264121e+00,-6.931816062828556113e+00,-6.901399058421224808e+00,-6.893060272030547608e+00,-6.901585156867840354e+00,-6.908870142854702578e+00,-6.903261603195092633e+00,-6.903448048613736177e+00,-6.880589910537686649e+00,-6.915830946052135886e+00,-6.923030674007318197e+00,-6.919613814190993750e+00,-6.949231363657458971e+00,-6.915076086608856087e+00,-6.937201726933034607e+00,-6.881866467654599973e+00,-6.863603596808228957e+00,-6.860383558247768576e+00,-6.917909752432427339e+00,-6.886805652670600963e+00,-6.893614033004551445e+00,-6.906061941065411602e+00,-6.891032434668680651e+00,-6.909807965299879839e+00,-6.926840928188441993e+00,-6.922650445865855318e+00,-6.926077715024128167e+00,-6.909620330436771596e+00,-6.904754140785598793e+00,-6.899911516309810366e+00,-6.870435698176857287e+00,-6.895832148516571891e+00,-6.915642177764647514e+00,-6.893798688161570709e+00,-6.914133312898977479e+00,-6.934120653823589109e+00,-6.881684002550544577e+00,-6.880407678190939791e+00,-6.915264748056449307e+00,-6.882414062812939548e+00,-6.925887002713071894e+00,-6.902516168945144415e+00,-6.925696326766264121e+00,-6.884973479200944269e+00,-6.888090174362956120e+00,-6.921510628113273000e+00,-6.898982924916127857e+00,-6.909807965299879839e+00,-6.888457483825305872e+00,-6.924362612173974085e+00,-6.900283194440831380e+00,-6.906810024137516990e+00,-6.914133312898977479e+00,-6.900469085323418739e+00,-6.895277158214657476e+00,-6.896757817378373900e+00,-6.943780698031076781e+00,-6.895462120760269542e+00,-6.895462120760269542e+00,-6.914510315730963086e+00,-6.892322400755601208e+00,-6.888273812229600779e+00,-6.943198456384351402e+00,-6.920561771414318386e+00,-6.916775322361814915e+00,-6.922270362242882058e+00,-6.927031822529004401e+00,-6.907745915642420798e+00,-6.903634528800756343e+00,-6.887722999767312615e+00,-6.905501245788597586e+00,-6.877859906112142596e+00,-6.910371081222784539e+00,-6.896943054018711550e+00,-6.935660003752342817e+00,-6.931432480161788590e+00,-6.947281285036359222e+00,-6.927413720566871547e+00,-6.939132229463091051e+00,-6.898611729663164382e+00,-6.925887002713071894e+00,-6.906061941065411602e+00,-6.897313630269016116e+00,-6.892875753162970298e+00,-6.901399058421224808e+00,-6.904007593531813924e+00,-6.908307871262717725e+00,-6.872060687249790689e+00,-6.920372108066191075e+00,-6.919424330533392009e+00,-6.889560222404245593e+00,-6.885889146328377564e+00,-6.888824928253470148e+00,-6.911686252854345014e+00,-6.905127623516364110e+00,-6.886622284191128429e+00,-6.891400826641902455e+00,-6.890848289561816387e+00,-6.897684343896987258e+00,-6.853619559515086834e+00,-6.904754140785598793e+00,-6.921130977387376149e+00,-6.913944864768767573e+00,-6.935852589212736063e+00,-6.923981877351176095e+00,-6.912438556820612590e+00,-6.922650445865855318e+00,-6.900655010767851039e+00,-6.899911516309810366e+00,-6.895832148516571891e+00,-6.893983377422415515e+00,-6.894537649953926817e+00,-6.879861180317789149e+00,-6.925505687169842162e+00,-6.919803333759457331e+00,-6.906248909374827605e+00,-6.908495260001201288e+00,-6.903634528800756343e+00,-6.910371081222784539e+00,-6.923411046777212974e+00,-6.919424330533392009e+00,-6.890664178358129277e+00,-6.870255306726923195e+00,-6.903261603195092633e+00,-6.910558857019035273e+00,-6.928560290537692623e+00,-6.891032434668680651e+00,-6.881866467654599973e+00,-6.896572615044295418e+00,-6.942034989121053101e+00,-6.887355959939371886e+00,-6.901957457691201725e+00,-6.920561771414318386e+00,-6.864141279409228247e+00,-6.886805652670600963e+00,-6.861276973834756987e+00,-6.917909752432427339e+00,-6.867193620409098642e+00,-6.931049044574269402e+00,-6.931049044574269402e+00,-6.895462120760269542e+00,-6.924933986344361969e+00,-6.935082469806172156e+00,-6.886805652670600963e+00,-6.903448048613736177e+00,-6.928177954459627585e+00,-6.924172226642699712e+00,-6.918098949292323496e+00,-6.914698870459531577e+00,-6.872964601258729544e+00,-6.932391712849248933e+00,-6.914321796548577481e+00,-6.888273812229600779e+00,-6.918098949292323496e+00,-6.913568075012991088e+00,-6.875499915909058402e+00,-6.888824928253470148e+00,-6.905501245788597586e+00,-6.890664178358129277e+00,-6.919045470896355354e+00,-6.874593708325519970e+00,-6.926840928188441993e+00,-6.901771289953533284e+00,-6.898982924916127857e+00,-6.907371453926755223e+00,-6.919613814190993750e+00,-6.910183340679662223e+00,-6.870796578729311932e+00,-6.913944864768767573e+00,-6.894168100799683785e+00,-6.855217429362381765e+00,-6.919424330533392009e+00,-6.902143660093750910e+00,-6.935467455373968804e+00,-6.878405311088847895e+00,-6.945723955541156514e+00,-6.903261603195092633e+00,-6.918666754739584590e+00,-6.908682683860808638e+00,-6.930857381899988567e+00,-6.919234882773045214e+00,-6.914133312898977479e+00,-6.905688109285357257e+00,-6.902702475419832950e+00,-6.909807965299879839e+00,-6.903821043769124088e+00,-6.893798688161570709e+00,-6.929708176640394512e+00,-6.910746668081658939e+00,-6.910558857019035273e+00,-6.873145482149155328e+00,-6.898611729663164382e+00,-6.913944864768767573e+00,-6.918666754739584590e+00,-6.922650445865855318e+00,-6.901957457691201725e+00,-6.897684343896987258e+00,-6.889560222404245593e+00,-6.922650445865855318e+00,-6.886622284191128429e+00,-6.896757817378373900e+00,-6.891769354377784040e+00,-6.890664178358129277e+00,-6.932583669851469566e+00,-6.903075192531863635e+00,-6.882231497773638296e+00,-6.896017213752596575e+00,-6.869353837270759655e+00,-6.908682683860808638e+00,-6.917342376530681847e+00,-6.955693738052092456e+00,-6.914510315730963086e+00,-6.895832148516571891e+00,-6.901212994600797401e+00,-6.915830946052135886e+00,-6.924553033958803283e+00,-6.868453179729916869e+00,-6.911498265260972218e+00,-6.924933986344361969e+00,-6.923981877351176095e+00,-6.932583669851469566e+00,-6.926268463713309842e+00,-6.926650070281574756e+00,-6.923601287432214590e+00,-6.920182480683429560e+00,-6.878223476376099654e+00,-6.902516168945144415e+00,-6.902329897174091400e+00,-6.922650445865855318e+00,-6.897684343896987258e+00,-6.902329897174091400e+00,-6.889376348173701814e+00,-6.899539976272098585e+00,-6.916019749979817277e+00,-6.936623302160327853e+00,-6.912062334092322402e+00,-6.909807965299879839e+00,-6.905127623516364110e+00,-6.919613814190993750e+00,-6.904754140785598793e+00,-6.904567451715701409e+00,-6.936430568228921345e+00,-6.901585156867840354e+00,-6.940872873940875820e+00,-6.920561771414318386e+00,-6.906435912647930664e+00,-6.903261603195092633e+00,-6.932391712849248933e+00,-6.887722999767312615e+00,-6.915642177764647514e+00,-6.917720591361211646e+00,-6.882596661188321363e+00,-6.899168574225116757e+00,-6.922840541864905717e+00,-6.890664178358129277e+00,-6.918288181954446614e+00,-6.907558667256891383e+00,-6.891032434668680651e+00,-6.916586375738674519e+00,-6.917342376530681847e+00,-6.947670996654697007e+00,-6.932583669851469566e+00,-6.905314417203280541e+00,-6.904940864714813387e+00,-6.891216613691209858e+00,-6.987024246362922852e+00,-6.905688109285357257e+00,-6.919803333759457331e+00,-6.886438949329489745e+00,-6.911310313000292638e+00,-6.858242611845689396e+00,-6.934697632395225853e+00,-6.901212994600797401e+00,-6.910371081222784539e+00,-6.945918489147450359e+00,-6.895092229873862166e+00,-6.891032434668680651e+00,-6.908307871262717725e+00,-6.874593708325519970e+00,-6.896572615044295418e+00,-6.925505687169842162e+00,-6.937780486474606434e+00,-6.920372108066191075e+00,-6.895462120760269542e+00,-6.904940864714813387e+00,-6.928369104226050013e+00,-6.880225479046773174e+00,-6.927795764506569753e+00,-6.878587178871470087e+00,-6.910558857019035273e+00,-6.945529459770826364e+00,-6.909245166298061847e+00,-6.894722475756134727e+00,-6.925696326766264121e+00,-6.905875007706608670e+00,-6.905127623516364110e+00,-6.895277158214657476e+00,-6.884973479200944269e+00,-6.909057636996060126e+00,-6.884241548701663049e+00,-6.916208589561154696e+00,-6.913756452144562914e+00,-6.919234882773045214e+00,-6.899168574225116757e+00,-6.880407678190939791e+00,-6.903261603195092633e+00,-6.915264748056449307e+00,-6.927795764506569753e+00,-6.897498969904427568e+00,-6.919803333759457331e+00,-6.945918489147450359e+00,-6.902888816611092437e+00,-6.912062334092322402e+00,-6.938359581172770518e+00,-6.912250427763526162e+00,-6.897869752259435217e+00,-6.898982924916127857e+00,-6.925124516972736899e+00,-6.857529980424118321e+00,-6.864499895156301434e+00,-6.910558857019035273e+00,-6.904754140785598793e+00,-6.925887002713071894e+00,-6.905875007706608670e+00,-6.916019749979817277e+00,-6.886438949329489745e+00,-6.880954474887330363e+00,-6.918098949292323496e+00,-6.884058649752821779e+00,-6.893060272030547608e+00,-6.892875753162970298e+00,-6.900097338107242351e+00,-6.889376348173701814e+00,-6.954908192057258631e+00,-6.904194178101811019e+00,-6.923220842306834655e+00,-6.897128324978018199e+00,-6.929899619160362789e+00,-6.921700507540407443e+00,-6.881319172192613465e+00,-6.892138017976430220e+00,-6.896572615044295418e+00,-6.916775322361814915e+00,-6.910746668081658939e+00,-6.922840541864905717e+00,-6.903261603195092633e+00,-6.911686252854345014e+00,-6.920182480683429560e+00,-6.904380797492107646e+00,-6.914698870459531577e+00,-6.929516770763649802e+00,-6.938939011415925506e+00,-6.911498265260972218e+00,-6.878951013694475591e+00,-6.885889146328377564e+00,-6.894722475756134727e+00,-6.931816062828556113e+00,-6.911874275793696398e+00,-6.918477450432346743e+00,-6.902888816611092437e+00,-6.891216613691209858e+00,-6.874231455106562194e+00,-6.892506817538050612e+00,-6.884424481108649019e+00,-6.889192507746672689e+00,-6.922650445865855318e+00,-6.898055195004518581e+00,-6.925124516972736899e+00,-6.879679080708800853e+00,-6.884973479200944269e+00,-6.922270362242882058e+00,-6.885889146328377564e+00,-6.873145482149155328e+00,-6.933544007964265177e+00,-6.893060272030547608e+00,-6.906061941065411602e+00,-6.877496467983482020e+00,-6.913756452144562914e+00,-6.905875007706608670e+00,-6.927222753317174408e+00,-6.898982924916127857e+00,-6.905314417203280541e+00,-6.887539463013563790e+00,-6.839352474714404551e+00,-6.918477450432346743e+00,-6.911686252854345014e+00,-6.874593708325519970e+00,-6.947476121861134502e+00,-6.915642177764647514e+00,-6.921890423028585815e+00,-6.920372108066191075e+00,-6.880043313093086255e+00,-6.880407678190939791e+00,-6.914133312898977479e+00,-6.879497014254042142e+00,-6.903075192531863635e+00,-6.910746668081658939e+00,-6.908307871262717725e+00,-6.930091098337587852e+00,-6.911874275793696398e+00,-6.919234882773045214e+00,-6.909245166298061847e+00,-6.909620330436771596e+00,-6.966558042443999454e+00,-6.914698870459531577e+00,-6.896757817378373900e+00,-6.922270362242882058e+00,-6.908120517632191593e+00,-6.888090174362956120e+00,-6.896572615044295418e+00,-6.883510153532835574e+00,-6.898426183693619151e+00,-6.932583669851469566e+00,-6.922840541864905717e+00,-6.889192507746672689e+00,-6.891032434668680651e+00,-6.889928072325627539e+00,-6.954908192057258631e+00,-6.913568075012991088e+00,-6.898982924916127857e+00,-6.903821043769124088e+00,-6.916019749979817277e+00,-6.918477450432346743e+00,-6.906061941065411602e+00,-6.912626721276902586e+00,-6.914887460747690895e+00,-6.901399058421224808e+00,-6.890848289561816387e+00,-6.896017213752596575e+00,-6.888090174362956120e+00,-6.916586375738674519e+00,-6.897128324978018199e+00,-6.935467455373968804e+00,-6.884058649752821779e+00,-6.898982924916127857e+00,-6.909995635376436240e+00,-6.880772176099112514e+00,-6.894907335725234176e+00,-6.925505687169842162e+00,-6.904567451715701409e+00,-6.911686252854345014e+00,-6.918666754739584590e+00,-6.909995635376436240e+00,-6.900840970786983775e+00,-6.910183340679662223e+00,-6.900097338107242351e+00,-6.905875007706608670e+00,-6.860740828705301553e+00,-6.897684343896987258e+00,-6.953534969673734523e+00,-6.907558667256891383e+00,-6.904194178101811019e+00,-6.918856094889727970e+00,-6.931624253103214173e+00,-6.890296057610369118e+00,-6.886255648073364100e+00,-6.911686252854345014e+00,-6.920751470741455691e+00,-6.893798688161570709e+00,-6.934890032588219455e+00,-6.883875784249889662e+00,-6.895832148516571891e+00,-6.911498265260972218e+00,-6.899168574225116757e+00,-6.896017213752596575e+00,-6.924362612173974085e+00,-6.905875007706608670e+00,-6.931049044574269402e+00,-6.885339645444508605e+00,-6.888824928253470148e+00,-6.905688109285357257e+00,-6.920182480683429560e+00,-6.901585156867840354e+00,-6.908307871262717725e+00,-6.896943054018711550e+00,-6.904567451715701409e+00,-6.913003156440391095e+00,-6.889928072325627539e+00,-6.918288181954446614e+00,-6.941841209447934702e+00,-6.903448048613736177e+00,-6.885889146328377564e+00,-6.907371453926755223e+00,-6.929708176640394512e+00,-6.905501245788597586e+00,-6.900469085323418739e+00,-6.927222753317174408e+00,-6.918477450432346743e+00,-6.921890423028585815e+00,-6.914698870459531577e+00,-6.923791564285609823e+00,-6.912250427763526162e+00,-6.929325401516104321e+00,-6.940679319309477791e+00,-6.942616553545702729e+00,-6.933544007964265177e+00,-6.928560290537692623e+00,-6.903634528800756343e+00,-6.901957457691201725e+00,-6.882596661188321363e+00,-6.916019749979817277e+00,-6.940485802134224613e+00,-6.914510315730963086e+00,-6.956086742576703230e+00,-6.922270362242882058e+00,-6.911498265260972218e+00,-6.893429411938763351e+00,-6.884607446986022339e+00,-6.883875784249889662e+00,-6.846196407719229882e+00,-6.896387447003769822e+00,-6.901585156867840354e+00,-6.907745915642420798e+00,-6.919803333759457331e+00,-6.927222753317174408e+00,-6.921700507540407443e+00,-6.879132980758939198e+00,-6.898055195004518581e+00,-6.899539976272098585e+00,-6.877496467983482020e+00,-6.909807965299879839e+00,-6.943198456384351402e+00,-6.885889146328377564e+00,-6.900469085323418739e+00,-6.909432730773900744e+00,-6.897498969904427568e+00,-6.900840970786983775e+00,-6.912814921145718827e+00,-6.888090174362956120e+00,-6.895277158214657476e+00,-6.923981877351176095e+00,-6.879132980758939198e+00,-6.898426183693619151e+00,-6.929134068883739062e+00,-6.925124516972736899e+00,-6.910371081222784539e+00,-6.884424481108649019e+00,-6.906622950897798319e+00,-6.917153322744317379e+00,-6.924743492010993151e+00,-6.931240743990173314e+00,-6.917531466065138801e+00,-6.902516168945144415e+00,-6.906248909374827605e+00,-6.886805652670600963e+00,-6.874593708325519970e+00,-6.883144656452744314e+00,-6.924933986344361969e+00,-6.901026965393675994e+00,-6.932583669851469566e+00,-6.927031822529004401e+00,-6.904567451715701409e+00,-6.931432480161788590e+00,-6.920751470741455691e+00,-6.903261603195092633e+00,-6.948841043590052280e+00,-6.892138017976430220e+00,-6.896387447003769822e+00,-6.931240743990173314e+00,-6.909057636996060126e+00,-6.908870142854702578e+00,-6.898055195004518581e+00,-6.925315083909950431e+00,-6.911498265260972218e+00,-6.886255648073364100e+00,-6.941066466042922656e+00,-6.888273812229600779e+00,-6.896943054018711550e+00,-6.888273812229600779e+00,-6.902516168945144415e+00,-6.935082469806172156e+00,-6.893060272030547608e+00,-6.906248909374827605e+00,-6.909245166298061847e+00,-6.901399058421224808e+00,-6.933736186306358462e+00,-6.904007593531813924e+00,-6.894722475756134727e+00,-6.895277158214657476e+00,-6.907558667256891383e+00,-6.927413720566871547e+00,-6.892138017976430220e+00,-6.919803333759457331e+00,-6.889928072325627539e+00,-6.898426183693619151e+00,-6.931432480161788590e+00,-6.916775322361814915e+00,-6.884241548701663049e+00,-6.895277158214657476e+00,-6.918288181954446614e+00,-6.918098949292323496e+00,-6.914133312898977479e+00,-6.937394609564551118e+00,-6.901957457691201725e+00,-6.887539463013563790e+00,-6.900840970786983775e+00,-6.940872873940875820e+00,-6.862887136093361207e+00,-6.898611729663164382e+00,-6.903261603195092633e+00,-6.922650445865855318e+00,-6.904940864714813387e+00,-6.909995635376436240e+00,-6.896757817378373900e+00,-6.907558667256891383e+00,-6.896943054018711550e+00,-6.885339645444508605e+00,-6.928369104226050013e+00,-6.926268463713309842e+00,-6.867013812802751360e+00,-6.896572615044295418e+00,-6.922840541864905717e+00,-6.902329897174091400e+00,-6.938166512343132197e+00,-6.934505269212946743e+00,-6.898797310066406396e+00,-6.907371453926755223e+00,-6.892875753162970298e+00,-6.888824928253470148e+00,-6.884607446986022339e+00,-6.889376348173701814e+00,-6.930665755953247853e+00,-6.897684343896987258e+00,-6.951576488828381528e+00,-6.925696326766264121e+00,-6.879314980941442670e+00,-6.883692952180634705e+00,-6.912814921145718827e+00,-6.908682683860808638e+00,-6.881136806914456727e+00,-6.923981877351176095e+00,-6.909432730773900744e+00,-6.923030674007318197e+00,-6.910746668081658939e+00,-6.903261603195092633e+00,-6.912250427763526162e+00,-6.915642177764647514e+00,-6.904007593531813924e+00,-6.903821043769124088e+00,-6.882779292911960667e+00,-6.909432730773900744e+00,-6.879497014254042142e+00,-6.953927126541506354e+00,-6.917531466065138801e+00,-6.911498265260972218e+00,-6.902516168945144415e+00,-6.868093143722427740e+00,-6.894907335725234176e+00,-6.926077715024128167e+00,-6.910371081222784539e+00,-6.890112048041352466e+00,-6.953731028884243770e+00,-6.890112048041352466e+00,-6.911122396059028006e+00,-6.930091098337587852e+00,-6.885522778857710691e+00,-6.893983377422415515e+00,-6.922840541864905717e+00,-6.925124516972736899e+00,-6.920182480683429560e+00,-6.890664178358129277e+00,-6.932199792687447015e+00,-6.899354258006173524e+00,-6.892506817538050612e+00,-6.894722475756134727e+00,-6.926650070281574756e+00,-6.901399058421224808e+00,-6.910934514423903607e+00,-6.928560290537692623e+00,-6.914887460747690895e+00,-6.915830946052135886e+00,-6.884058649752821779e+00,-6.883327388294274485e+00,-6.907933199096476073e+00,-6.915642177764647514e+00,-6.889192507746672689e+00,-6.891953669188001896e+00,-6.933736186306358462e+00,-6.926077715024128167e+00,-6.889008701110736155e+00,-6.877133161894109392e+00,-6.937780486474606434e+00,-6.917153322744317379e+00,-6.897128324978018199e+00,-6.942616553545702729e+00,-6.915642177764647514e+00,-6.916775322361814915e+00,-6.915264748056449307e+00,-6.907933199096476073e+00,-6.938359581172770518e+00,-6.919992889252394974e+00,-6.901026965393675994e+00,-6.897498969904427568e+00,-6.903261603195092633e+00,-6.920561771414318386e+00,-6.943004451145601053e+00,-6.933928401588064006e+00,-6.937587529406954445e+00,-6.904567451715701409e+00,-6.932967694433763484e+00,-6.890296057610369118e+00,-6.906997132380180204e+00,-6.916208589561154696e+00,-6.900283194440831380e+00,-6.930857381899988567e+00,-6.875681256012919462e+00,-6.928942772852549226e+00,-6.897498969904427568e+00,-6.939712107704913535e+00,-6.859669400031377151e+00,-6.942422661155370989e+00,-6.889376348173701814e+00,-6.952947022572036673e+00,-6.891032434668680651e+00,-6.907371453926755223e+00,-6.888273812229600779e+00,-6.885339645444508605e+00,-6.889928072325627539e+00,-6.927795764506569753e+00,-6.913003156440391095e+00,-6.903075192531863635e+00,-6.898611729663164382e+00,-6.911874275793696398e+00,-6.937587529406954445e+00,-6.938166512343132197e+00,-6.897498969904427568e+00,-6.874050377695473557e+00,-6.909057636996060126e+00,-6.904940864714813387e+00,-6.932199792687447015e+00,-6.888090174362956120e+00,-6.901585156867840354e+00,-6.927031822529004401e+00,-6.893244824951620942e+00,-6.946891725234003445e+00,-6.919234882773045214e+00,-6.904380797492107646e+00,-6.906810024137516990e+00,-6.909995635376436240e+00,-6.933736186306358462e+00,-6.879861180317789149e+00,-6.915076086608856087e+00,-6.878223476376099654e+00,-6.927604724292024230e+00,-6.892322400755601208e+00,-6.919234882773045214e+00,-6.930474166719976736e+00,-6.927222753317174408e+00,-6.904940864714813387e+00,-6.910371081222784539e+00,-6.902516168945144415e+00,-6.914698870459531577e+00,-6.942422661155370989e+00,-6.946307669926833128e+00,-6.895647117523353131e+00,-6.910746668081658939e+00,-6.881501570733931317e+00,-6.888824928253470148e+00,-6.909620330436771596e+00,-6.925887002713071894e+00,-6.919424330533392009e+00,-6.908307871262717725e+00,-6.897869752259435217e+00,-6.924553033958803283e+00,-6.922840541864905717e+00,-6.915264748056449307e+00,-6.905314417203280541e+00,-6.938552687285179488e+00,-6.902516168945144415e+00,-6.950207830876927062e+00,-6.892875753162970298e+00,-6.848664674134555597e+00,-6.882779292911960667e+00,-6.913568075012991088e+00,-6.924362612173974085e+00,-6.883875784249889662e+00,-6.898797310066406396e+00,-6.933736186306358462e+00,-6.926650070281574756e+00,-6.908307871262717725e+00,-6.923601287432214590e+00,-6.914510315730963086e+00,-6.876588450123945151e+00,-6.943780698031076781e+00,-6.908682683860808638e+00,-6.879679080708800853e+00,-6.904754140785598793e+00,-6.905688109285357257e+00,-6.887172490532380564e+00,-6.908870142854702578e+00,-6.903261603195092633e+00,-6.920941206061254292e+00,-6.896572615044295418e+00,-6.911874275793696398e+00,-6.912814921145718827e+00,-6.896387447003769822e+00,-6.890296057610369118e+00,-6.893429411938763351e+00,-6.890112048041352466e+00,-6.904940864714813387e+00,-6.901212994600797401e+00,-6.914133312898977479e+00,-6.893983377422415515e+00,-6.947865909431847342e+00,-6.909995635376436240e+00,-6.911686252854345014e+00,-6.912062334092322402e+00,-6.891585073533256889e+00,-6.894537649953926817e+00,-6.910183340679662223e+00,-6.904940864714813387e+00,-6.877678170536903224e+00,-6.886805652670600963e+00,-6.916775322361814915e+00,-6.907371453926755223e+00,-6.912250427763526162e+00,-6.910558857019035273e+00,-6.950794169210935181e+00,-6.908120517632191593e+00,-6.897869752259435217e+00,-6.910558857019035273e+00,-6.896387447003769822e+00,-6.913191427174263382e+00,-6.916775322361814915e+00,-6.941260095630129356e+00,-6.945918489147450359e+00,-6.894722475756134727e+00,-6.907371453926755223e+00,-6.936623302160327853e+00,-6.898611729663164382e+00,-6.895092229873862166e+00,-6.923220842306834655e+00,-6.931816062828556113e+00,-6.927604724292024230e+00,-6.888824928253470148e+00,-6.918288181954446614e+00,-6.912062334092322402e+00,-6.883875784249889662e+00,-6.911686252854345014e+00,-6.923220842306834655e+00,-6.923791564285609823e+00,-6.925315083909950431e+00,-6.931240743990173314e+00,-6.919613814190993750e+00,-6.896017213752596575e+00,-6.915453445103899810e+00,-6.937587529406954445e+00,-6.902329897174091400e+00,-6.888457483825305872e+00,-6.933736186306358462e+00,-6.918856094889727970e+00,-6.904754140785598793e+00,-6.870435698176857287e+00,-6.893244824951620942e+00,-6.891953669188001896e+00,-6.915264748056449307e+00,-6.869353837270759655e+00,-6.922840541864905717e+00,-6.886989054780238817e+00,-6.904194178101811019e+00,-6.924362612173974085e+00,-6.921510628113273000e+00,-6.912062334092322402e+00,-6.937008881498051949e+00,-6.929708176640394512e+00,-6.902888816611092437e+00,-6.941841209447934702e+00,-6.944946199328512648e+00,-6.944557547943906783e+00,-6.910183340679662223e+00,-6.904754140785598793e+00,-6.919045470896355354e+00,-6.881866467654599973e+00,-6.919992889252394974e+00,-6.891769354377784040e+00,-6.911874275793696398e+00,-6.917342376530681847e+00,-6.902329897174091400e+00,-6.881684002550544577e+00,-6.883692952180634705e+00,-6.919613814190993750e+00,-6.856284096130185191e+00,-6.920941206061254292e+00,-6.893983377422415515e+00,-6.904194178101811019e+00,-6.884241548701663049e+00,-6.906435912647930664e+00,-6.902702475419832950e+00,-6.912062334092322402e+00,-6.902329897174091400e+00,-6.896202313244101489e+00,-6.924553033958803283e+00,-6.904007593531813924e+00,-6.914321796548577481e+00,-6.903075192531863635e+00,-6.888090174362956120e+00,-6.921130977387376149e+00,-6.903634528800756343e+00,-6.927222753317174408e+00,-6.930474166719976736e+00,-6.901212994600797401e+00,-6.939132229463091051e+00,-6.890664178358129277e+00,-6.882961957996037938e+00,-6.909807965299879839e+00,-6.934312943027142850e+00,-6.908307871262717725e+00,-6.923601287432214590e+00,-6.890848289561816387e+00,-6.897313630269016116e+00,-6.924362612173974085e+00,-6.876225473713425629e+00,-6.882779292911960667e+00,-6.869534066161939734e+00,-6.881501570733931317e+00,-6.887355959939371886e+00,-6.874412565312617573e+00,-6.958251032649267032e+00,-6.901957457691201725e+00,-6.936045211769432228e+00,-6.913756452144562914e+00,-6.932391712849248933e+00,-6.906997132380180204e+00,-6.907745915642420798e+00,-6.891953669188001896e+00,-6.935274944063333891e+00,-6.869534066161939734e+00,-6.880954474887330363e+00,-6.902702475419832950e+00,-6.927222753317174408e+00,-6.909245166298061847e+00,-6.891769354377784040e+00,-6.898055195004518581e+00,-6.912626721276902586e+00,-6.923981877351176095e+00,-6.921700507540407443e+00,-6.855928414106161384e+00,-6.916208589561154696e+00,-6.911310313000292638e+00,-6.933159762042151897e+00,-6.900469085323418739e+00,-6.891216613691209858e+00,-6.886622284191128429e+00,-6.907745915642420798e+00,-6.913568075012991088e+00,-6.947086486165575892e+00,-6.917531466065138801e+00,-6.908870142854702578e+00,-6.928560290537692623e+00,-6.918288181954446614e+00,-6.918477450432346743e+00,-6.907371453926755223e+00,-6.919613814190993750e+00,-6.908870142854702578e+00 +-6.928560902152458567e+00,-6.913154564945870106e+00,-6.910211763484261027e+00,-6.917030181128522415e+00,-6.902345629445600039e+00,-6.906545398240682587e+00,-6.943828374283246063e+00,-6.943448579367933249e+00,-6.951646127895054761e+00,-6.892193257981583443e+00,-6.899252749694541720e+00,-6.906362432363309267e+00,-6.933624204109005262e+00,-6.927065574771024359e+00,-6.882142922128080542e+00,-6.907827097583037812e+00,-6.900525130126130335e+00,-6.905813735504549911e+00,-6.910946652365396403e+00,-6.916475601208587065e+00,-6.903074758169116976e+00,-6.903986917312906257e+00,-6.906545398240682587e+00,-6.897075285578891268e+00,-6.913154564945870106e+00,-6.905448104787495822e+00,-6.937957701234477526e+00,-6.967078532933866697e+00,-6.875912372377445791e+00,-6.913338777896562704e+00,-6.912418052299798887e+00,-6.908560235445788678e+00,-6.897075285578891268e+00,-6.908010331665090931e+00,-6.918510566298955666e+00,-6.920735261321066645e+00,-6.884646052346200307e+00,-6.869191441524755248e+00,-6.900525130126130335e+00,-6.873608019678243863e+00,-6.884467049392172910e+00,-6.908193599328024348e+00,-6.900343262343508144e+00,-6.906728397600696567e+00,-6.909660951021972863e+00,-6.915736639416230958e+00,-6.910211763484261027e+00,-6.934188379018186410e+00,-6.910946652365396403e+00,-6.915367363193423600e+00,-6.867078392666686071e+00,-6.921849467564470615e+00,-6.898707939002775902e+00,-6.937391396358560058e+00,-6.917955165007256824e+00,-6.908927006034899065e+00,-6.884467049392172910e+00,-6.907643897069563721e+00,-6.892915019109992159e+00,-6.956635583649886101e+00,-6.879289853145674982e+00,-6.910946652365396403e+00,-6.919807703514095465e+00,-6.889851125571400559e+00,-6.917585068778013380e+00,-6.890571197609714815e+00,-6.904717244166620915e+00,-6.892373649431517535e+00,-6.888592245807988235e+00,-6.927626060540017505e+00,-6.919251581523676364e+00,-6.901617031963461102e+00,-6.910028125617616368e+00,-6.891111592110842565e+00,-6.926318748746767895e+00,-6.928373863902590912e+00,-6.904899909250698187e+00,-6.877333079418043837e+00,-6.870955732737517252e+00,-6.926692092040259041e+00,-6.949924792479114544e+00,-6.917030181128522415e+00,-6.930245822517377974e+00,-6.897437867163718650e+00,-6.920364134948279400e+00,-6.905082607707404563e+00,-6.888053210667814952e+00,-6.910762879508130396e+00,-6.893998638504450938e+00,-6.922407036578078987e+00,-6.908010331665090931e+00,-6.892373649431517535e+00,-6.896169406361222443e+00,-6.903439521988591565e+00,-6.930808094109362827e+00,-6.890931428161159999e+00,-6.890031094977087989e+00,-6.924454120199804663e+00,-6.915367363193423600e+00,-6.874316485878617655e+00,-6.913707305632444289e+00,-6.904899909250698187e+00,-6.899616121791563472e+00,-6.916290809560642572e+00,-6.872192591274913553e+00,-6.890751296664682002e+00,-6.920364134948279400e+00,-6.890031094977087989e+00,-6.909844521467647382e+00,-6.903804418909260221e+00,-6.908193599328024348e+00,-6.894360106066672600e+00,-6.884646052346200307e+00,-6.955289817802253083e+00,-6.909477414268224038e+00,-6.919436921159087817e+00,-6.873962190037888220e+00,-6.913523024787917137e+00,-6.925013143786523884e+00,-6.922407036578078987e+00,-6.924454120199804663e+00,-6.899071113148769641e+00,-6.895083433403815576e+00,-6.899071113148769641e+00,-6.898889509588840951e+00,-6.900343262343508144e+00,-6.895988328950133806e+00,-6.878577855963584398e+00,-6.933060347313688254e+00,-6.879824183909121871e+00,-6.901434965508702390e+00,-6.910211763484261027e+00,-6.891652278796087217e+00,-6.924267848428751648e+00,-6.943828374283246063e+00,-6.932872465678563856e+00,-6.887694015261653036e+00,-6.889311411606694691e+00,-6.901981264347746503e+00,-6.905630903435294954e+00,-6.910579140417121735e+00,-6.901617031963461102e+00,-6.904534612442981611e+00,-6.902892426141990612e+00,-6.924454120199804663e+00,-6.907827097583037812e+00,-6.893095540818217515e+00,-6.909293911194032134e+00,-6.891291788525419904e+00,-6.899797857366802845e+00,-6.901252932196102918e+00,-6.916290809560642572e+00,-6.915736639416230958e+00,-6.944968625261978445e+00,-6.929122226893550618e+00,-6.944968625261978445e+00,-6.928373863902590912e+00,-6.886617202523002135e+00,-6.922778922041644023e+00,-6.923150945855457650e+00,-6.934188379018186410e+00,-6.909844521467647382e+00,-6.896169406361222443e+00,-6.887873596837065904e+00,-6.907277596699168853e+00,-6.888412535141677395e+00,-6.896169406361222443e+00,-6.886258522461767839e+00,-6.911130459001332937e+00,-6.899071113148769641e+00,-6.913523024787917137e+00,-6.927812958961268919e+00,-6.938902255947191122e+00,-6.918881005273371798e+00,-6.872546260597786727e+00,-6.901617031963461102e+00,-6.964554504800362977e+00,-6.941551765445653999e+00,-6.932684619336319187e+00,-6.898707939002775902e+00,-6.898889509588840951e+00,-6.901799131572449397e+00,-6.926878815969473635e+00,-6.934941107695051343e+00,-6.878222047384845439e+00,-6.895445293367959749e+00,-6.906179499956323298e+00,-6.909477414268224038e+00,-6.918140264498761738e+00,-6.905630903435294954e+00,-6.903804418909260221e+00,-6.918325398258430070e+00,-6.898344896704362128e+00,-6.930808094109362827e+00,-6.901252932196102918e+00,-6.899979625975863229e+00,-6.937957701234477526e+00,-6.918325398258430070e+00,-6.921477927526758833e+00,-6.874670907289379684e+00,-6.914075969231090468e+00,-6.919622295151647506e+00,-6.875202775044140679e+00,-6.909293911194032134e+00,-6.886437846410961683e+00,-6.876267359956608871e+00,-6.907827097583037812e+00,-6.909844521467647382e+00,-6.903621953805204825e+00,-6.925013143786523884e+00,-6.894540888856644401e+00,-6.926692092040259041e+00,-6.941172834027705463e+00,-6.890751296664682002e+00,-6.909293911194032134e+00,-6.927626060540017505e+00,-6.926505402970361658e+00,-6.914260352010261457e+00,-6.928373863902590912e+00,-6.890211096777591138e+00,-6.918695768633034149e+00,-6.886079230663888495e+00,-6.890391130984577117e+00,-6.901434965508702390e+00,-6.879111806318888966e+00,-6.895445293367959749e+00,-6.892193257981583443e+00,-6.926692092040259041e+00,-6.873076999221478189e+00,-6.892554073428398098e+00,-6.892193257981583443e+00,-6.901617031963461102e+00,-6.916660427010794976e+00,-6.888053210667814952e+00,-6.905813735504549911e+00,-6.885899971005793319e+00,-6.890391130984577117e+00,-6.901252932196102918e+00,-6.944968625261978445e+00,-6.903439521988591565e+00,-6.933060347313688254e+00,-6.901070932013599446e+00,-6.929122226893550618e+00,-6.901070932013599446e+00,-6.916845286979894425e+00,-6.924826767865752686e+00,-6.906362432363309267e+00,-6.885899971005793319e+00,-6.893998638504450938e+00,-6.940415401687006991e+00,-6.892193257981583443e+00,-6.897981986157827095e+00,-6.904352014067599796e+00,-6.911498173658905841e+00,-6.929683866897081046e+00,-6.873608019678243863e+00,-6.910579140417121735e+00,-6.936825412002351143e+00,-6.896894044074089791e+00,-6.946110177897359961e+00,-6.894721704334941137e+00,-6.876800077717586390e+00,-6.913338777896562704e+00,-6.894360106066672600e+00,-6.903074758169116976e+00,-6.943828374283246063e+00,-6.908010331665090931e+00,-6.934564672531562834e+00,-6.919066276232678447e+00,-6.868486595680595386e+00,-6.893998638504450938e+00,-6.901434965508702390e+00,-6.921477927526758833e+00,-6.921663680290365050e+00,-6.892734529983972180e+00,-6.890211096777591138e+00,-6.922407036578078987e+00,-6.896350516567277822e+00,-6.900343262343508144e+00,-6.887694015261653036e+00,-6.917770099771232140e+00,-6.908376900584149993e+00,-6.894179355953212962e+00,-6.919622295151647506e+00,-6.934564672531562834e+00,-6.923150945855457650e+00,-6.890031094977087989e+00,-6.929122226893550618e+00,-6.920549680917824631e+00,-6.915551984259211693e+00,-6.893276095120414837e+00,-6.874848165111345111e+00,-6.909477414268224038e+00,-6.880358800334580138e+00,-6.903804418909260221e+00,-6.901799131572449397e+00,-6.901252932196102918e+00,-6.904534612442981611e+00,-6.905265339548934733e+00,-6.901799131572449397e+00,-6.919066276232678447e+00,-6.903986917312906257e+00,-6.919436921159087817e+00,-6.903986917312906257e+00,-6.930433211255861536e+00,-6.901434965508702390e+00,-6.896712835411820564e+00,-6.899979625975863229e+00,-6.952603707207908101e+00,-6.901981264347746503e+00,-6.902163430301433422e+00,-6.889491283897852369e+00,-6.910762879508130396e+00,-6.928935083634840453e+00,-6.912602129612789525e+00,-6.927999892320071851e+00,-6.878933791187133551e+00,-6.910395435079966120e+00,-6.904169449028298544e+00,-6.908376900584149993e+00,-6.931745916554540088e+00,-6.895988328950133806e+00,-6.897981986157827095e+00,-6.889131571663758891e+00,-6.901434965508702390e+00,-6.908927006034899065e+00,-6.921106525479777005e+00,-6.874139322267559749e+00,-6.903621953805204825e+00,-6.897981986157827095e+00,-6.892012899066854104e+00,-6.912049999296012714e+00,-6.932121291934322471e+00,-6.907094496817672180e+00,-6.900161427630759903e+00,-6.916290809560642572e+00,-6.903621953805204825e+00,-6.907827097583037812e+00,-6.916290809560642572e+00,-6.886617202523002135e+00,-6.914629219590983311e+00,-6.902345629445600039e+00,-6.905082607707404563e+00,-6.909293911194032134e+00,-6.902163430301433422e+00,-6.889491283897852369e+00,-6.912234008865029367e+00,-6.884825087348021455e+00,-6.928186860629487853e+00,-6.903257123447273713e+00,-6.909844521467647382e+00,-6.901252932196102918e+00,-6.872723142176031530e+00,-6.895264347018059681e+00,-6.885362384755055132e+00,-6.930058468886851841e+00,-6.931370682028560992e+00,-6.947062468227397147e+00,-6.902163430301433422e+00,-6.911682081705400549e+00,-6.889131571663758891e+00,-6.901617031963461102e+00,-6.924454120199804663e+00,-6.903804418909260221e+00,-6.899797857366802845e+00,-6.936259747803237730e+00,-6.926692092040259041e+00,-6.897800580261638004e+00,-6.920178623399653617e+00,-6.941551765445653999e+00,-6.898526401378605399e+00,-6.926692092040259041e+00,-6.904717244166620915e+00,-6.925758995023784337e+00,-6.912970385923340899e+00,-6.934941107695051343e+00,-6.874139322267559749e+00,-6.942120431938089808e+00,-6.906179499956323298e+00,-6.917770099771232140e+00,-6.897256559938130138e+00,-6.899979625975863229e+00,-6.898889509588840951e+00,-6.884825087348021455e+00,-6.912786240816476635e+00,-6.920735261321066645e+00,-6.945539238686874839e+00,-6.884109139581623182e+00,-6.904169449028298544e+00,-6.921477927526758833e+00,-6.919436921159087817e+00,-6.937768897306796134e+00,-6.902163430301433422e+00,-6.920178623399653617e+00,-6.880715370136895714e+00,-6.906179499956323298e+00,-6.940604705994244839e+00,-6.902710127353772762e+00,-6.912602129612789525e+00,-6.871662321708798871e+00,-6.947634278020924370e+00,-6.915921328677075763e+00,-6.915367363193423600e+00,-6.886796590809428409e+00,-6.901799131572449397e+00,-6.922407036578078987e+00,-6.902345629445600039e+00,-6.920735261321066645e+00,-6.901434965508702390e+00,-6.904717244166620915e+00,-6.926692092040259041e+00,-6.914260352010261457e+00,-6.908560235445788678e+00,-6.908193599328024348e+00,-6.885541548062889206e+00,-6.888412535141677395e+00,-6.914629219590983311e+00,-6.914075969231090468e+00,-6.880537069342985035e+00,-6.902163430301433422e+00,-6.917030181128522415e+00,-6.921292209260833772e+00,-6.912970385923340899e+00,-6.878399935849246916e+00,-6.905082607707404563e+00,-6.886079230663888495e+00,-6.897075285578891268e+00,-6.895264347018059681e+00,-6.899797857366802845e+00,-6.893276095120414837e+00,-6.878222047384845439e+00,-6.885183253540962056e+00,-6.944778493119565965e+00,-6.906179499956323298e+00,-6.900161427630759903e+00,-6.911682081705400549e+00,-6.901617031963461102e+00,-6.902710127353772762e+00,-6.920178623399653617e+00,-6.889851125571400559e+00,-6.904717244166620915e+00,-6.906179499956323298e+00,-6.925013143786523884e+00,-6.921106525479777005e+00,-6.901617031963461102e+00,-6.895264347018059681e+00,-6.906362432363309267e+00,-6.909844521467647382e+00,-6.939847703687087588e+00,-6.917585068778013380e+00,-6.898889509588840951e+00,-6.917030181128522415e+00,-6.888053210667814952e+00,-6.893276095120414837e+00,-6.924826767865752686e+00,-6.947824953967732142e+00,-6.925758995023784337e+00,-6.900707030990661295e+00,-6.931370682028560992e+00,-6.906362432363309267e+00,-6.878933791187133551e+00,-6.885004154409113397e+00,-6.908010331665090931e+00,-6.886258522461767839e+00,-6.899071113148769641e+00,-6.876444901013444522e+00,-6.921849467564470615e+00,-6.914260352010261457e+00,-6.925945544786474173e+00,-6.927812958961268919e+00,-6.887694015261653036e+00,-6.924640426674493199e+00,-6.876800077717586390e+00,-6.885362384755055132e+00,-6.885720743475966188e+00,-6.972341190046229542e+00,-6.914444768792710860e+00,-6.914260352010261457e+00,-6.914813704417630547e+00,-6.928747975392177239e+00,-6.903986917312906257e+00,-6.899071113148769641e+00,-6.911682081705400549e+00,-6.881607351286037400e+00,-6.935317684615338152e+00,-6.906728397600696567e+00,-6.908560235445788678e+00,-6.905630903435294954e+00,-6.904899909250698187e+00,-6.884288078474469330e+00,-6.898526401378605399e+00,-6.930058468886851841e+00,-6.951454722018310051e+00,-6.892373649431517535e+00,-6.911314299428362062e+00,-6.877688571778701743e+00,-6.889491283897852369e+00,-6.931370682028560992e+00,-6.908560235445788678e+00,-6.887694015261653036e+00,-6.855014254739828061e+00,-6.940794046144388219e+00,-6.900525130126130335e+00,-6.913154564945870106e+00,-6.908193599328024348e+00,-6.898344896704362128e+00,-6.893817953708584412e+00,-6.910395435079966120e+00,-6.923895408945861973e+00,-6.922592962022511287e+00,-6.899434419238142269e+00,-6.946300563428634334e+00,-6.892915019109992159e+00,-6.936071264153637728e+00,-6.893817953708584412e+00,-6.908927006034899065e+00,-6.906545398240682587e+00,-6.907460730112370939e+00,-6.943448579367933249e+00,-6.925945544786474173e+00,-6.940604705994244839e+00,-6.911498173658905841e+00,-6.929122226893550618e+00,-6.930995588250720374e+00,-6.921106525479777005e+00,-6.904352014067599796e+00,-6.883751357824676731e+00,-6.886258522461767839e+00,-6.913707305632444289e+00,-6.883036178105296443e+00,-6.920549680917824631e+00,-6.897800580261638004e+00,-6.889851125571400559e+00,-6.924267848428751648e+00,-6.880180563100349644e+00,-6.883036178105296443e+00,-6.909110441787040813e+00,-6.888592245807988235e+00,-6.910946652365396403e+00,-6.914813704417630547e+00,-6.898526401378605399e+00,-6.920549680917824631e+00,-6.904717244166620915e+00,-6.899616121791563472e+00,-6.893998638504450938e+00,-6.905448104787495822e+00,-6.927252368457940790e+00,-6.894179355953212962e+00,-6.892012899066854104e+00,-6.886617202523002135e+00,-6.925199554449752881e+00,-6.926132129356471268e+00,-6.952795333154648816e+00,-6.873962190037888220e+00,-6.913707305632444289e+00,-6.917215109469317724e+00,-6.949542675546684478e+00,-6.905630903435294954e+00,-6.926878815969473635e+00,-6.930245822517377974e+00,-6.883930232702176966e+00,-6.919436921159087817e+00,-6.914629219590983311e+00,-6.918140264498761738e+00,-6.902710127353772762e+00,-6.884288078474469330e+00,-6.914260352010261457e+00,-6.898707939002775902e+00,-6.907094496817672180e+00,-6.945919828605836344e+00,-6.914075969231090468e+00,-6.911314299428362062e+00,-6.908560235445788678e+00,-6.895626272465367634e+00,-6.903621953805204825e+00,-6.915736639416230958e+00,-6.952603707207908101e+00,-6.860765904582793340e+00,-6.912602129612789525e+00,-6.901070932013599446e+00,-6.889131571663758891e+00,-6.923895408945861973e+00,-6.905448104787495822e+00,-6.937014037863516336e+00,-6.896531659580180218e+00,-6.859193989142536196e+00,-6.908743603925261212e+00,-6.880358800334580138e+00,-6.903074758169116976e+00,-6.925572480055416591e+00,-6.911682081705400549e+00,-6.895264347018059681e+00,-6.924454120199804663e+00,-6.927065574771024359e+00,-6.888592245807988235e+00,-6.914075969231090468e+00,-6.920178623399653617e+00,-6.917030181128522415e+00,-6.924640426674493199e+00,-6.871662321708798871e+00,-6.906728397600696567e+00,-6.896169406361222443e+00,-6.905082607707404563e+00,-6.903804418909260221e+00,-6.903074758169116976e+00,-6.913891620442662145e+00,-6.907643897069563721e+00,-6.906362432363309267e+00,-6.930058468886851841e+00,-6.932496808273695521e+00,-6.928186860629487853e+00,-6.908193599328024348e+00,-6.896894044074089791e+00,-6.917955165007256824e+00,-6.916475601208587065e+00,-6.927812958961268919e+00,-6.969024437420236140e+00,-6.922035289361902599e+00,-6.906545398240682587e+00,-6.895988328950133806e+00,-6.917030181128522415e+00,-6.888592245807988235e+00,-6.928560902152458567e+00,-6.881607351286037400e+00,-6.899797857366802845e+00,-6.897800580261638004e+00,-6.966884150583172897e+00,-6.889491283897852369e+00,-6.906362432363309267e+00,-6.892915019109992159e+00,-6.931745916554540088e+00,-6.911314299428362062e+00,-6.903621953805204825e+00,-6.901252932196102918e+00,-6.912602129612789525e+00,-6.925385999868396425e+00,-6.895083433403815576e+00,-6.907094496817672180e+00,-6.908376900584149993e+00,-6.898707939002775902e+00,-6.912049999296012714e+00,-6.907094496817672180e+00,-6.908193599328024348e+00,-6.932309032477444788e+00,-6.935882816023427822e+00,-6.893637301553816599e+00,-6.938713273616475163e+00,-6.923337009675885056e+00,-6.910762879508130396e+00,-6.879646041929493805e+00,-6.921849467564470615e+00,-6.868310461818404988e+00,-6.917215109469317724e+00,-6.902892426141990612e+00,-6.920549680917824631e+00,-6.900343262343508144e+00,-6.896894044074089791e+00,-6.929122226893550618e+00,-6.886796590809428409e+00,-6.908376900584149993e+00,-6.887694015261653036e+00,-6.921663680290365050e+00,-6.918695768633034149e+00,-6.900525130126130335e+00,-6.889851125571400559e+00,-6.914075969231090468e+00,-6.899797857366802845e+00,-6.915551984259211693e+00,-6.910762879508130396e+00,-6.886079230663888495e+00,-6.903804418909260221e+00,-6.917585068778013380e+00,-6.896712835411820564e+00,-6.905265339548934733e+00,-6.922778922041644023e+00,-6.871662321708798871e+00,-6.888951764057411609e+00,-6.901617031963461102e+00,-6.865847839641579853e+00,-6.915736639416230958e+00,-6.924640426674493199e+00,-6.923709241208193532e+00,-6.908560235445788678e+00,-6.935129378428923630e+00,-6.874139322267559749e+00,-6.943638458795067692e+00,-6.908193599328024348e+00,-6.918325398258430070e+00,-6.880002357628971055e+00,-6.933248264254952886e+00,-6.905448104787495822e+00,-6.881607351286037400e+00,-6.891832572675598456e+00,-6.895807284322138742e+00,-6.931933586631096489e+00,-6.916845286979894425e+00,-6.895083433403815576e+00,-6.919251581523676364e+00,-6.901799131572449397e+00,-6.888592245807988235e+00,-6.913707305632444289e+00,-6.890571197609714815e+00,-6.864618799016321660e+00,-6.894902552513389793e+00,-6.863566536555145703e+00,-6.910028125617616368e+00,-6.921106525479777005e+00,-6.910395435079966120e+00,-6.920364134948279400e+00,-6.943638458795067692e+00,-6.891472017416599982e+00,-6.901799131572449397e+00,-6.916845286979894425e+00,-6.916290809560642572e+00,-6.913154564945870106e+00,-6.900161427630759903e+00,-6.931183117552722095e+00,-6.933060347313688254e+00,-6.907277596699168853e+00,-6.924081611348411158e+00,-6.912049999296012714e+00,-6.885183253540962056e+00,-6.932496808273695521e+00,-6.897981986157827095e+00,-6.910395435079966120e+00,-6.882857463065949588e+00,-6.902710127353772762e+00,-6.931370682028560992e+00,-6.899434419238142269e+00,-6.892734529983972180e+00,-6.909477414268224038e+00,-6.903621953805204825e+00,-6.894179355953212962e+00,-6.880893702727648886e+00,-6.909110441787040813e+00,-6.903439521988591565e+00,-6.932121291934322471e+00,-6.897800580261638004e+00,-6.905448104787495822e+00,-6.879111806318888966e+00,-6.871308964814662801e+00,-6.903439521988591565e+00,-6.919622295151647506e+00,-6.922407036578078987e+00,-6.936636821714191825e+00,-6.913523024787917137e+00,-6.945158793561494903e+00,-6.871485627654093875e+00,-6.931370682028560992e+00,-6.901981264347746503e+00,-6.882142922128080542e+00,-6.927999892320071851e+00,-6.908376900584149993e+00,-6.897256559938130138e+00,-6.905813735504549911e+00,-6.927065574771024359e+00,-6.881964366641490471e+00,-6.888951764057411609e+00,-6.899071113148769641e+00,-6.913338777896562704e+00,-6.887155463951625478e+00,-6.879646041929493805e+00,-6.899252749694541720e+00,-6.937202699311109555e+00,-6.907643897069563721e+00,-6.925572480055416591e+00,-6.953945860606586038e+00,-6.882678779959961801e+00,-6.870955732737517252e+00,-6.888412535141677395e+00,-6.898526401378605399e+00,-6.904169449028298544e+00,-6.883930232702176966e+00,-6.913154564945870106e+00,-6.911498173658905841e+00,-6.912602129612789525e+00,-6.927252368457940790e+00,-6.898163424968085877e+00,-6.898163424968085877e+00,-6.908010331665090931e+00,-6.915921328677075763e+00,-6.917400072014929790e+00,-6.898526401378605399e+00,-6.924454120199804663e+00,-6.877688571778701743e+00,-6.910395435079966120e+00,-6.906911430455604517e+00,-6.944588397120515566e+00,-6.905813735504549911e+00,-6.899071113148769641e+00,-6.899979625975863229e+00,-6.895264347018059681e+00,-6.912602129612789525e+00,-6.918325398258430070e+00,-6.921106525479777005e+00,-6.905996601007482028e+00,-6.886437846410961683e+00,-6.885541548062889206e+00,-6.917955165007256824e+00,-6.895807284322138742e+00,-6.916106052054344033e+00,-6.885183253540962056e+00,-6.903621953805204825e+00,-6.887873596837065904e+00,-6.919251581523676364e+00,-6.920364134948279400e+00,-6.930058468886851841e+00,-6.928747975392177239e+00,-6.926878815969473635e+00,-6.894540888856644401e+00,-6.929496618511551631e+00,-6.894902552513389793e+00,-6.907460730112370939e+00,-6.937014037863516336e+00,-6.946490985213463532e+00,-6.895807284322138742e+00,-6.913891620442662145e+00,-6.918325398258430070e+00,-6.873962190037888220e+00,-6.917955165007256824e+00,-6.920549680917824631e+00,-6.919993146259178829e+00,-6.918510566298955666e+00,-6.890571197609714815e+00,-6.912049999296012714e+00,-6.897619207267579711e+00,-6.920549680917824631e+00,-6.891111592110842565e+00,-6.881607351286037400e+00,-6.906179499956323298e+00,-6.899979625975863229e+00,-6.907277596699168853e+00,-6.901070932013599446e+00,-6.886437846410961683e+00,-6.884646052346200307e+00,-6.895445293367959749e+00,-6.925013143786523884e+00,-6.932309032477444788e+00,-6.912418052299798887e+00,-6.920364134948279400e+00,-6.909844521467647382e+00,-6.905082607707404563e+00,-6.910579140417121735e+00,-6.873962190037888220e+00,-6.912049999296012714e+00,-6.915182776206281190e+00,-6.913891620442662145e+00,-6.938524326993334768e+00,-6.930620635115468886e+00,-6.891291788525419904e+00,-6.879111806318888966e+00,-6.895626272465367634e+00,-6.930433211255861536e+00,-6.914629219590983311e+00,-6.900343262343508144e+00,-6.885720743475966188e+00,-6.921849467564470615e+00,-6.904899909250698187e+00,-6.879646041929493805e+00,-6.917585068778013380e+00,-6.898344896704362128e+00,-6.900707030990661295e+00,-6.893998638504450938e+00,-6.908560235445788678e+00,-6.942120431938089808e+00,-6.912602129612789525e+00,-6.934188379018186410e+00,-6.899434419238142269e+00,-6.897437867163718650e+00,-6.934752872400379076e+00,-6.936259747803237730e+00,-6.885362384755055132e+00,-6.885004154409113397e+00,-6.906179499956323298e+00,-6.887873596837065904e+00,-6.900343262343508144e+00,-6.935317684615338152e+00,-6.903621953805204825e+00,-6.893276095120414837e+00,-6.897437867163718650e+00,-6.907094496817672180e+00,-6.918140264498761738e+00,-6.904534612442981611e+00,-6.943638458795067692e+00,-6.911866023580287788e+00,-6.918140264498761738e+00,-6.923709241208193532e+00,-6.907094496817672180e+00,-6.948015666278788416e+00,-6.940604705994244839e+00,-6.930620635115468886e+00,-6.910946652365396403e+00,-6.911314299428362062e+00,-6.898889509588840951e+00,-6.879824183909121871e+00,-6.892734529983972180e+00,-6.917585068778013380e+00,-6.909293911194032134e+00,-6.903621953805204825e+00,-6.926132129356471268e+00,-6.900343262343508144e+00,-6.873076999221478189e+00,-6.885899971005793319e+00,-6.897981986157827095e+00,-6.922407036578078987e+00,-6.895807284322138742e+00,-6.890391130984577117e+00,-6.893637301553816599e+00,-6.904352014067599796e+00,-6.934188379018186410e+00,-6.925945544786474173e+00,-6.908743603925261212e+00,-6.930058468886851841e+00,-6.911682081705400549e+00,-6.917215109469317724e+00,-6.894540888856644401e+00,-6.902345629445600039e+00,-6.901252932196102918e+00,-6.896894044074089791e+00,-6.909660951021972863e+00,-6.872723142176031530e+00,-6.896712835411820564e+00,-6.943828374283246063e+00,-6.900888964949135840e+00,-6.935317684615338152e+00,-6.950689464663192041e+00,-6.955481959218925425e+00,-6.926318748746767895e+00,-6.910762879508130396e+00,-6.922778922041644023e+00,-6.879111806318888966e+00,-6.882142922128080542e+00,-6.894721704334941137e+00,-6.969803860686507591e+00,-6.914260352010261457e+00,-6.898707939002775902e+00,-6.903621953805204825e+00,-6.898344896704362128e+00,-6.902527861792346897e+00,-6.935506026267651336e+00,-6.902527861792346897e+00,-6.915182776206281190e+00,-6.914813704417630547e+00,-6.904352014067599796e+00,-6.933060347313688254e+00,-6.893456682028354265e+00,-6.902527861792346897e+00,-6.904717244166620915e+00,-6.901799131572449397e+00,-6.892554073428398098e+00,-6.905813735504549911e+00,-6.859543090210840077e+00,-6.926505402970361658e+00,-6.893998638504450938e+00,-6.870602625389215845e+00,-6.864443345028680810e+00,-6.897437867163718650e+00,-6.908193599328024348e+00,-6.919807703514095465e+00,-6.897075285578891268e+00,-6.905265339548934733e+00,-6.893276095120414837e+00,-6.894360106066672600e+00,-6.900888964949135840e+00,-6.914998223285207857e+00,-6.911866023580287788e+00,-6.889851125571400559e+00,-6.932121291934322471e+00,-6.853972045161384585e+00,-6.916106052054344033e+00,-6.906911430455604517e+00,-6.912049999296012714e+00,-6.866375034100673957e+00,-6.893637301553816599e+00,-6.917030181128522415e+00,-6.925945544786474173e+00,-6.949733715761230002e+00,-6.944208313497542306e+00,-6.922221145695491629e+00,-6.891291788525419904e+00,-6.911314299428362062e+00,-6.912418052299798887e+00,-6.883393704029733939e+00,-6.919993146259178829e+00,-6.903986917312906257e+00,-6.903804418909260221e+00,-6.883572514937675635e+00,-6.895264347018059681e+00,-6.906362432363309267e+00,-6.911130459001332937e+00,-6.933812227048356647e+00,-6.912602129612789525e+00,-6.885899971005793319e+00,-6.919993146259178829e+00,-6.902345629445600039e+00,-6.900343262343508144e+00,-6.913154564945870106e+00,-6.886258522461767839e+00,-6.923150945855457650e+00,-6.916845286979894425e+00 +-6.937971695702792374e+00,-6.919619120673425883e+00,-6.880676791041638651e+00,-6.965564938954168284e+00,-6.894152873159416828e+00,-6.899412702099109396e+00,-6.926508636798859087e+00,-6.889280536533192389e+00,-6.892887393464185664e+00,-6.892706741309417851e+00,-6.942518019123534501e+00,-6.928566058267152883e+00,-6.897232864723687129e+00,-6.895238846116823694e+00,-6.903786683922222167e+00,-6.893971992268991045e+00,-6.927817415147778490e+00,-6.914067663040809109e+00,-6.935329187558838981e+00,-6.932693643864606514e+00,-6.900504405264303642e+00,-6.921662401778112539e+00,-6.911119439051613966e+00,-6.922778680963794784e+00,-6.886224903707226730e+00,-6.910199898756934189e+00,-6.905431872118910519e+00,-6.902326563202874965e+00,-6.888560723653453621e+00,-6.948803155516831254e+00,-6.906713336825164973e+00,-6.953399103859510433e+00,-6.889100534732689241e+00,-6.917209704254362990e+00,-6.910751521461001801e+00,-6.895238846116823694e+00,-6.891082338822455355e+00,-6.891262697737184695e+00,-6.927069332075673103e+00,-6.907263039083625600e+00,-6.921848361797245275e+00,-6.911303448620630618e+00,-6.896325999693731390e+00,-6.911119439051613966e+00,-6.902873858664861473e+00,-6.902508961744192817e+00,-6.884431824510656384e+00,-6.925948255725074887e+00,-6.878359292901276234e+00,-6.911671569368390777e+00,-6.889100534732689241e+00,-6.885686642278603387e+00,-6.897595841134206651e+00,-6.895601099335781470e+00,-6.909281203239862279e+00,-6.893610328612245652e+00,-6.926695500295618757e+00,-6.909281203239862279e+00,-6.909464874835567372e+00,-6.896507306919319902e+00,-6.931566248029296773e+00,-6.891803969739573432e+00,-6.863688238771922911e+00,-6.927817415147778490e+00,-6.912961060198263397e+00,-6.909832319263731648e+00,-6.915175491809945285e+00,-6.885507286166562935e+00,-6.944228233317096155e+00,-6.905431872118910519e+00,-6.895782275167421815e+00,-6.936460836114161310e+00,-6.898503858993743521e+00,-6.927256300385089105e+00,-6.867379901574006240e+00,-6.892526121783955517e+00,-6.897414336459963380e+00,-6.877291487140446691e+00,-6.904334779304535985e+00,-6.871615700353387979e+00,-6.916099620884123667e+00,-6.890000867916761251e+00,-6.900140371769200698e+00,-6.883178579337224434e+00,-6.905066040763083279e+00,-6.932693643864606514e+00,-6.923896207621353938e+00,-6.910199898756934189e+00,-6.902691393560806077e+00,-6.903421453823201048e+00,-6.941379499076452575e+00,-6.917950445028973050e+00,-6.925761531795860293e+00,-6.911487492055400139e+00,-6.905066040763083279e+00,-6.897777378758377154e+00,-6.901232870057034674e+00,-6.907996445790500317e+00,-6.887122650423416204e+00,-6.898685561547164724e+00,-6.899049065731464481e+00,-6.890361228281021155e+00,-6.901961865897591863e+00,-6.908730390777574115e+00,-6.917580006054556918e+00,-6.905980870211205769e+00,-6.876580249557120439e+00,-6.907996445790500317e+00,-6.871615700353387979e+00,-6.890721718551688468e+00,-6.919990315926389357e+00,-6.891623513183999350e+00,-6.885327962217369091e+00,-6.881569568531524794e+00,-6.896144725334492520e+00,-6.906713336825164973e+00,-6.896688647023180962e+00,-6.892345534876016089e+00,-6.904517544543097074e+00,-6.939674145749846090e+00,-6.913329791765862709e+00,-6.911119439051613966e+00,-6.902326563202874965e+00,-6.914621424014812945e+00,-6.928940590106737574e+00,-6.921104729117503851e+00,-6.914990768432677015e+00,-6.942328175743751828e+00,-6.906530169867972191e+00,-6.934387124370939404e+00,-6.901779567109374014e+00,-6.947085106034389668e+00,-6.943087765601770656e+00,-6.921848361797245275e+00,-6.929127908642453093e+00,-6.910383739183963314e+00,-6.910751521461001801e+00,-6.882999672457778217e+00,-6.928566058267152883e+00,-6.912961060198263397e+00,-6.901415069201201291e+00,-6.899412702099109396e+00,-6.914806079171832209e+00,-6.907996445790500317e+00,-6.910567613414507093e+00,-6.886943036592667156e+00,-6.940621205201255250e+00,-6.912776745388045541e+00,-6.912408217652163955e+00,-6.900322371951704170e+00,-6.914621424014812945e+00,-6.912224004701471358e+00,-6.907629675201389929e+00,-6.909464874835567372e+00,-6.890000867916761251e+00,-6.899230867386361155e+00,-6.897414336459963380e+00,-6.895419956322879074e+00,-6.916469511770531042e+00,-6.897595841134206651e+00,-6.923896207621353938e+00,-6.868966224282619493e+00,-6.895782275167421815e+00,-6.902691393560806077e+00,-6.913698659346584563e+00,-6.895963483829691043e+00,-6.913514208548312112e+00,-6.904517544543097074e+00,-6.894333786773660933e+00,-6.870908486745410215e+00,-6.899958404704737092e+00,-6.896688647023180962e+00,-6.902508961744192817e+00,-6.900504405264303642e+00,-6.922778680963794784e+00,-6.914806079171832209e+00,-6.920361649016435024e+00,-6.890181031866443817e+00,-6.899594569881731587e+00,-6.905248939711924550e+00,-6.878003230942734803e+00,-6.870731761464400122e+00,-6.916839539526833391e+00,-6.910567613414507093e+00,-6.902691393560806077e+00,-6.853562453931113296e+00,-6.904517544543097074e+00,-6.887481974897278647e+00,-6.890902012431199708e+00,-6.929315262272979226e+00,-6.901232870057034674e+00,-6.919990315926389357e+00,-6.937404855819876204e+00,-6.890902012431199708e+00,-6.904334779304535985e+00,-6.891623513183999350e+00,-6.912224004701471358e+00,-6.896688647023180962e+00,-6.919619120673425883e+00,-6.895419956322879074e+00,-6.917024604762858075e+00,-6.902873858664861473e+00,-6.949950163862810726e+00,-6.914990768432677015e+00,-6.900140371769200698e+00,-6.905431872118910519e+00,-6.887841428531629617e+00,-6.911119439051613966e+00,-6.913883144173231798e+00,-6.933822312155980327e+00,-6.902326563202874965e+00,-6.892164980573818767e+00,-6.919248063155254869e+00,-6.901597301547948149e+00,-6.920733120045966302e+00,-6.915914726735495677e+00,-6.916839539526833391e+00,-6.909648580172722987e+00,-6.914806079171832209e+00,-6.909648580172722987e+00,-6.911855680572077887e+00,-6.924455439623997677e+00,-6.904883175260151162e+00,-6.901779567109374014e+00,-6.907446340339751245e+00,-6.930065028006321626e+00,-6.924828434779385589e+00,-6.917209704254362990e+00,-6.958402000574812618e+00,-6.906163936573273432e+00,-6.909281203239862279e+00,-6.932129787069289506e+00,-6.920918907320071867e+00,-6.922406449431486308e+00,-6.937027140990078777e+00,-6.876580249557120439e+00,-6.923896207621353938e+00,-6.943467777006684827e+00,-6.898140552904370892e+00,-6.899412702099109396e+00,-6.874626950525348335e+00,-6.908363350949633386e+00,-6.918506360914689068e+00,-6.917765208388635401e+00,-6.937593766748936019e+00,-6.881033806397091723e+00,-6.917950445028973050e+00,-6.900868571328050649e+00,-6.891803969739573432e+00,-6.904517544543097074e+00,-6.944418437787474474e+00,-6.905614837996283839e+00,-6.916099620884123667e+00,-6.884431824510656384e+00,-6.902691393560806077e+00,-6.941569162424579886e+00,-6.888560723653453621e+00,-6.888560723653453621e+00,-6.912592464543518389e+00,-6.913145408986691720e+00,-6.935140703909238979e+00,-6.935329187558838981e+00,-6.897414336459963380e+00,-6.890000867916761251e+00,-6.888740628304473645e+00,-6.911119439051613966e+00,-6.909832319263731648e+00,-6.937782713372076415e+00,-6.912776745388045541e+00,-6.909648580172722987e+00,-6.878359292901276234e+00,-6.896870020017239256e+00,-6.912408217652163955e+00,-6.927069332075673103e+00,-6.897958949344442203e+00,-6.940052861906616855e+00,-6.907446340339751245e+00,-6.903604052198582863e+00,-6.885507286166562935e+00,-6.927069332075673103e+00,-6.900868571328050649e+00,-6.903421453823201048e+00,-6.916654508533614631e+00,-6.864214785515111217e+00,-6.896325999693731390e+00,-6.936272139066710807e+00,-6.913698659346584563e+00,-6.888920565327001810e+00,-6.881926902821550840e+00,-6.892887393464185664e+00,-6.912039825678942151e+00,-6.885148670419489747e+00,-6.918877143269696717e+00,-6.907446340339751245e+00,-6.909281203239862279e+00,-6.870025172493118504e+00,-6.912592464543518389e+00,-6.906163936573273432e+00,-6.888920565327001810e+00,-6.920361649016435024e+00,-6.917209704254362990e+00,-6.931378472233046040e+00,-6.926695500295618757e+00,-6.903969349006299439e+00,-6.888560723653453621e+00,-6.886943036592667156e+00,-6.926882398716870171e+00,-6.900504405264303642e+00,-6.914806079171832209e+00,-6.880141506882189617e+00,-6.904700343190896206e+00,-6.884073594164714649e+00,-6.922220385611058902e+00,-6.905066040763083279e+00,-6.869495558216462072e+00,-6.917394838014031322e+00,-6.924082583542125136e+00,-6.906530169867972191e+00,-6.940621205201255250e+00,-6.915175491809945285e+00,-6.915914726735495677e+00,-6.924082583542125136e+00,-6.888021203813012860e+00,-6.903238888783899796e+00,-6.921290585451092880e+00,-6.890361228281021155e+00,-6.904883175260151162e+00,-6.895419956322879074e+00,-6.913329791765862709e+00,-6.899594569881731587e+00,-6.911487492055400139e+00,-6.885866030565029661e+00,-6.932881666803957899e+00,-6.909464874835567372e+00,-6.876047153142897272e+00,-6.934952255779029073e+00,-6.913514208548312112e+00,-6.928004523390441705e+00,-6.883178579337224434e+00,-6.912408217652163955e+00,-6.888920565327001810e+00,-6.879428240090181390e+00,-6.876402519173645089e+00,-6.929127908642453093e+00,-6.902873858664861473e+00,-6.899594569881731587e+00,-6.909464874835567372e+00,-6.941758861751717191e+00,-6.919990315926389357e+00,-6.901779567109374014e+00,-6.888740628304473645e+00,-6.939484841442608243e+00,-6.901597301547948149e+00,-6.893791144090542389e+00,-6.899958404704737092e+00,-6.903421453823201048e+00,-6.916839539526833391e+00,-6.904517544543097074e+00,-6.924641919811017843e+00,-6.909464874835567372e+00,-6.885686642278603387e+00,-6.874449566932865352e+00,-6.885686642278603387e+00,-6.908730390777574115e+00,-6.916099620884123667e+00,-6.895057768705735057e+00,-6.891262697737184695e+00,-6.887661685563589486e+00,-6.900686471719062354e+00,-6.906713336825164973e+00,-6.899776470746262547e+00,-6.904152047463005815e+00,-6.914067663040809109e+00,-6.895782275167421815e+00,-6.911487492055400139e+00,-6.881569568531524794e+00,-6.904517544543097074e+00,-6.890541457172201234e+00,-6.917580006054556918e+00,-6.907996445790500317e+00,-6.915545040964188317e+00,-6.904700343190896206e+00,-6.906530169867972191e+00,-6.893248795708814214e+00,-6.930065028006321626e+00,-6.926135014526625611e+00,-6.891984458865593410e+00,-6.868613490592895943e+00,-6.883715492101801559e+00,-6.887841428531629617e+00,-6.933069725102583902e+00,-6.930815356310141340e+00,-6.910016092120997655e+00,-6.869848603233368323e+00,-6.912408217652163955e+00,-6.903969349006299439e+00,-6.925388188502369147e+00,-6.901232870057034674e+00,-6.876047153142897272e+00,-6.865971946395978520e+00,-6.916654508533614631e+00,-6.920361649016435024e+00,-6.925948255725074887e+00,-6.927817415147778490e+00,-6.891443089187118787e+00,-6.919433574703880652e+00,-6.894514733123561001e+00,-6.936272139066710807e+00,-6.920175965235378257e+00,-6.925388188502369147e+00,-6.919990315926389357e+00,-6.895782275167421815e+00,-6.881212361883681794e+00,-6.929127908642453093e+00,-6.913329791765862709e+00,-6.892345534876016089e+00,-6.884969410761394570e+00,-6.893971992268991045e+00,-6.901232870057034674e+00,-6.895419956322879074e+00,-6.933257818773787662e+00,-6.909832319263731648e+00,-6.893429545822273852e+00,-6.900322371951704170e+00,-6.926321808213542042e+00,-6.895057768705735057e+00,-6.911303448620630618e+00,-6.919804701076667897e+00,-6.915175491809945285e+00,-6.878537371434379821e+00,-6.919804701076667897e+00,-6.894876724077739993e+00,-6.907629675201389929e+00,-6.915729866766396228e+00,-6.877469375604848167e+00,-6.914252215961882442e+00,-6.902873858664861473e+00,-6.910199898756934189e+00,-6.876580249557120439e+00,-6.876402519173645089e+00,-6.881748219715563053e+00,-6.919248063155254869e+00,-6.907446340339751245e+00,-6.919433574703880652e+00,-6.870908486745410215e+00,-6.914067663040809109e+00,-6.850613878384042010e+00,-6.954551398974526677e+00,-6.917394838014031322e+00,-6.912039825678942151e+00,-6.918506360914689068e+00,-6.902873858664861473e+00,-6.905066040763083279e+00,-6.893429545822273852e+00,-6.923709866430094451e+00,-6.894152873159416828e+00,-6.923896207621353938e+00,-6.927256300385089105e+00,-6.909648580172722987e+00,-6.863688238771922911e+00,-6.934575466023252588e+00,-6.885507286166562935e+00,-6.903238888783899796e+00,-6.897958949344442203e+00,-6.911303448620630618e+00,-6.910751521461001801e+00,-6.881926902821550840e+00,-6.931378472233046040e+00,-6.906896537338639064e+00,-6.914621424014812945e+00,-6.921104729117503851e+00,-6.905248939711924550e+00,-6.930440121784162244e+00,-6.894152873159416828e+00,-6.908363350949633386e+00,-6.914252215961882442e+00,-6.939484841442608243e+00,-6.914990768432677015e+00,-6.910383739183963314e+00,-6.931754059091920439e+00,-6.935706261469793077e+00,-6.916839539526833391e+00,-6.922406449431486308e+00,-6.896325999693731390e+00,-6.928566058267152883e+00,-6.916284549224918976e+00,-6.921476476333680239e+00,-6.912039825678942151e+00,-6.897958949344442203e+00,-6.913883144173231798e+00,-6.914252215961882442e+00,-6.891984458865593410e+00,-6.862635976310746955e+00,-6.925014984542075425e+00,-6.899776470746262547e+00,-6.903421453823201048e+00,-6.919990315926389357e+00,-6.896688647023180962e+00,-6.914621424014812945e+00,-6.910199898756934189e+00,-6.909832319263731648e+00,-6.878181246074490218e+00,-6.895238846116823694e+00,-6.892164980573818767e+00,-6.922034356403937494e+00,-6.909464874835567372e+00,-6.912408217652163955e+00,-6.907629675201389929e+00,-6.925948255725074887e+00,-6.960332875860949287e+00,-6.897595841134206651e+00,-6.888380851362295942e+00,-6.932317704010554138e+00,-6.909832319263731648e+00,-6.892526121783955517e+00,-6.923709866430094451e+00,-6.918321021279277616e+00,-6.880855282786869864e+00,-6.906530169867972191e+00,-6.899412702099109396e+00,-6.924828434779385589e+00,-6.906530169867972191e+00,-6.877291487140446691e+00,-6.926695500295618757e+00,-6.887122650423416204e+00,-6.923896207621353938e+00,-6.896688647023180962e+00,-6.966925880157711859e+00,-6.920918907320071867e+00,-6.907079771420692182e+00,-6.885686642278603387e+00,-6.908546854023825290e+00,-6.919619120673425883e+00,-6.909832319263731648e+00,-6.900868571328050649e+00,-6.949567681547954123e+00,-6.904334779304535985e+00,-6.891443089187118787e+00,-6.867908396257320192e+00,-6.929690074871070138e+00,-6.895057768705735057e+00,-6.892345534876016089e+00,-6.883178579337224434e+00,-6.910567613414507093e+00,-6.925201569112072519e+00,-6.922406449431486308e+00,-6.887661685563589486e+00,-6.884610987818490457e+00,-6.926695500295618757e+00,-6.900868571328050649e+00,-6.911855680572077887e+00,-6.912408217652163955e+00,-6.935517706741224586e+00,-6.916099620884123667e+00,-6.897414336459963380e+00,-6.903421453823201048e+00,-6.902873858664861473e+00,-6.915914726735495677e+00,-6.862986607450384469e+00,-6.914806079171832209e+00,-6.910751521461001801e+00,-6.895057768705735057e+00,-6.878893623664723123e+00,-6.937027140990078777e+00,-6.897051425913428346e+00,-6.930815356310141340e+00,-6.878715481685095057e+00,-6.896507306919319902e+00,-6.908363350949633386e+00,-6.921476476333680239e+00,-6.925201569112072519e+00,-6.898685561547164724e+00,-6.907079771420692182e+00,-6.878003230942734803e+00,-6.916099620884123667e+00,-6.890000867916761251e+00,-6.909832319263731648e+00,-6.952631644113475673e+00,-6.898867297122404096e+00,-6.880319903100662771e+00,-6.917950445028973050e+00,-6.902326563202874965e+00,-6.924268994205354133e+00,-6.902144197924718227e+00,-6.910199898756934189e+00,-6.917580006054556918e+00,-6.890902012431199708e+00,-6.888740628304473645e+00,-6.879963142483250138e+00,-6.904334779304535985e+00,-6.938538857075400301e+00,-6.917209704254362990e+00,-6.895057768705735057e+00,-6.926882398716870171e+00,-6.899412702099109396e+00,-6.903969349006299439e+00,-6.891443089187118787e+00,-6.955320334037404351e+00,-6.915545040964188317e+00,-6.926135014526625611e+00,-6.904700343190896206e+00,-6.896507306919319902e+00,-6.881569568531524794e+00,-6.909281203239862279e+00,-6.892526121783955517e+00,-6.863337361575341689e+00,-6.908179881542642065e+00,-6.895963483829691043e+00,-6.901779567109374014e+00,-6.913145408986691720e+00,-6.925761531795860293e+00,-6.897595841134206651e+00,-6.915360249316243824e+00,-6.882820797580277983e+00,-6.884431824510656384e+00,-6.921848361797245275e+00,-6.886943036592667156e+00,-6.902873858664861473e+00,-6.916284549224918976e+00,-6.890361228281021155e+00,-6.911487492055400139e+00,-6.948612115302285730e+00,-6.943467777006684827e+00,-6.919433574703880652e+00,-6.918135715988279699e+00,-6.922034356403937494e+00,-6.915729866766396228e+00,-6.875336799712210123e+00,-6.887841428531629617e+00,-6.912408217652163955e+00,-6.885866030565029661e+00,-6.894333786773660933e+00,-6.908730390777574115e+00,-6.883715492101801559e+00,-6.927256300385089105e+00,-6.929690074871070138e+00,-6.938917143442688840e+00,-6.918877143269696717e+00,-6.891262697737184695e+00,-6.869142637796352702e+00,-6.885327962217369091e+00,-6.921476476333680239e+00,-6.931190731689923723e+00,-6.915729866766396228e+00,-6.899594569881731587e+00,-6.904700343190896206e+00,-6.919990315926389357e+00,-6.921848361797245275e+00,-6.920733120045966302e+00,-6.913698659346584563e+00,-6.912039825678942151e+00,-6.906713336825164973e+00,-6.880676791041638651e+00,-6.928566058267152883e+00,-6.893068078260052189e+00,-6.888740628304473645e+00,-6.911487492055400139e+00,-6.908179881542642065e+00,-6.912961060198263397e+00,-6.923896207621353938e+00,-6.905248939711924550e+00,-6.878181246074490218e+00,-6.909097565373217620e+00,-6.946131907982998399e+00,-6.929127908642453093e+00,-6.875514340769045774e+00,-6.900504405264303642e+00,-6.917209704254362990e+00,-6.920175965235378257e+00,-6.916284549224918976e+00,-6.912408217652163955e+00,-6.937404855819876204e+00,-6.935706261469793077e+00,-6.899049065731464481e+00,-6.929690074871070138e+00,-6.919248063155254869e+00,-6.927630341908059819e+00,-6.943467777006684827e+00,-6.913329791765862709e+00,-6.889100534732689241e+00,-6.912776745388045541e+00,-6.922964848701463225e+00,-6.926508636798859087e+00,-6.888021203813012860e+00,-6.895963483829691043e+00,-6.932505656271233718e+00,-6.907629675201389929e+00,-6.893791144090542389e+00,-6.896325999693731390e+00,-6.896688647023180962e+00,-6.935140703909238979e+00,-6.871792581931632782e+00,-6.925761531795860293e+00,-6.902144197924718227e+00,-6.884969410761394570e+00,-6.913145408986691720e+00,-6.908913961223248634e+00,-6.895782275167421815e+00,-6.919990315926389357e+00,-6.919619120673425883e+00,-6.905431872118910519e+00,-6.918691734907248758e+00,-6.934010547450652595e+00,-6.902326563202874965e+00,-6.871969494802504741e+00,-6.864390362725639960e+00,-6.891984458865593410e+00,-6.896144725334492520e+00,-6.876580249557120439e+00,-6.907629675201389929e+00,-6.905431872118910519e+00,-6.925388188502369147e+00,-6.913145408986691720e+00,-6.920547367282360085e+00,-6.890902012431199708e+00,-6.890541457172201234e+00,-6.912408217652163955e+00,-6.908363350949633386e+00,-6.905980870211205769e+00,-6.897595841134206651e+00,-6.912592464543518389e+00,-6.902873858664861473e+00,-6.907446340339751245e+00,-6.889640637365316067e+00,-6.889100534732689241e+00,-6.906713336825164973e+00,-6.924455439623997677e+00,-6.884610987818490457e+00,-6.898685561547164724e+00,-6.893791144090542389e+00,-6.898685561547164724e+00,-6.868613490592895943e+00,-6.900322371951704170e+00,-6.944989268361437595e+00,-6.906163936573273432e+00,-6.915729866766396228e+00,-6.891262697737184695e+00,-6.902508961744192817e+00,-6.928004523390441705e+00,-6.881033806397091723e+00,-6.892164980573818767e+00,-6.915360249316243824e+00,-6.929690074871070138e+00,-6.936272139066710807e+00,-6.913698659346584563e+00,-6.927069332075673103e+00,-6.906530169867972191e+00,-6.941948597071515792e+00,-6.894514733123561001e+00,-6.912039825678942151e+00,-6.870908486745410215e+00,-6.908730390777574115e+00,-6.862460706833477531e+00,-6.902508961744192817e+00,-6.889640637365316067e+00,-6.902873858664861473e+00,-6.894152873159416828e+00,-6.929127908642453093e+00,-6.905066040763083279e+00,-6.898867297122404096e+00,-6.889100534732689241e+00,-6.945941377354623469e+00,-6.890361228281021155e+00,-6.939863485899989470e+00,-6.929690074871070138e+00,-6.909281203239862279e+00,-6.936838337062397386e+00,-6.890361228281021155e+00,-6.895057768705735057e+00,-6.913883144173231798e+00,-6.908913961223248634e+00,-6.906347036454770105e+00,-6.892345534876016089e+00,-6.914621424014812945e+00,-6.901961865897591863e+00,-6.898503858993743521e+00,-6.905797837356297819e+00,-6.885866030565029661e+00,-6.916284549224918976e+00,-6.928566058267152883e+00,-6.904517544543097074e+00,-6.942328175743751828e+00,-6.932505656271233718e+00,-6.905431872118910519e+00,-6.881926902821550840e+00,-6.928191666649151870e+00,-6.921104729117503851e+00,-6.903056357068507509e+00,-6.920547367282360085e+00,-6.890181031866443817e+00,-6.883357518230070582e+00,-6.908363350949633386e+00,-6.938727982371473146e+00,-6.900140371769200698e+00,-6.931941905434165108e+00,-6.925761531795860293e+00,-6.908546854023825290e+00,-6.920733120045966302e+00,-6.922592547878101854e+00,-6.916839539526833391e+00,-6.922406449431486308e+00,-6.911303448620630618e+00,-6.933634112287164086e+00,-6.889820736420283254e+00,-6.922406449431486308e+00,-6.920918907320071867e+00,-6.893429545822273852e+00,-6.899412702099109396e+00,-6.881748219715563053e+00,-6.909281203239862279e+00,-6.903056357068507509e+00,-6.900686471719062354e+00,-6.886224903707226730e+00,-6.890902012431199708e+00,-6.914621424014812945e+00,-6.919804701076667897e+00,-6.918506360914689068e+00,-6.903056357068507509e+00,-6.901779567109374014e+00,-6.916469511770531042e+00,-6.899230867386361155e+00,-6.905797837356297819e+00,-6.883715492101801559e+00,-6.909648580172722987e+00,-6.909832319263731648e+00,-6.917765208388635401e+00,-6.922778680963794784e+00,-6.908546854023825290e+00,-6.895601099335781470e+00,-6.890721718551688468e+00,-6.880855282786869864e+00,-6.902144197924718227e+00,-6.874804365588351729e+00,-6.919990315926389357e+00,-6.915914726735495677e+00,-6.915729866766396228e+00,-6.923523559955405915e+00,-6.886404388586107927e+00,-6.916469511770531042e+00,-6.939674145749846090e+00,-6.931378472233046040e+00,-6.885327962217369091e+00,-6.933822312155980327e+00,-6.944418437787474474e+00,-6.908179881542642065e+00,-6.900504405264303642e+00,-6.912961060198263397e+00,-6.902144197924718227e+00,-6.879250002855950896e+00,-6.929315262272979226e+00,-6.914806079171832209e+00,-6.895601099335781470e+00,-6.943087765601770656e+00,-6.932129787069289506e+00,-6.908730390777574115e+00,-6.919804701076667897e+00,-6.947466639804757094e+00,-6.908546854023825290e+00,-6.910935463335889040e+00,-6.903238888783899796e+00,-6.919433574703880652e+00,-6.889280536533192389e+00,-6.905614837996283839e+00,-6.912592464543518389e+00,-6.915360249316243824e+00,-6.898867297122404096e+00,-6.912961060198263397e+00,-6.934387124370939404e+00,-6.904517544543097074e+00,-6.920361649016435024e+00,-6.904700343190896206e+00,-6.921104729117503851e+00,-6.930815356310141340e+00,-6.897595841134206651e+00,-6.932881666803957899e+00,-6.886763455017254287e+00,-6.939863485899989470e+00,-6.931754059091920439e+00,-6.912039825678942151e+00,-6.924268994205354133e+00,-6.913329791765862709e+00,-6.910567613414507093e+00,-6.907629675201389929e+00,-6.888920565327001810e+00,-6.898503858993743521e+00,-6.927817415147778490e+00,-6.899594569881731587e+00,-6.923709866430094451e+00,-6.896144725334492520e+00,-6.917580006054556918e+00,-6.913329791765862709e+00,-6.905066040763083279e+00,-6.876758011534302995e+00,-6.913145408986691720e+00,-6.921476476333680239e+00,-6.893248795708814214e+00,-6.912776745388045541e+00,-6.949376495236311513e+00,-6.915175491809945285e+00,-6.902691393560806077e+00,-6.892526121783955517e+00,-6.917394838014031322e+00,-6.905980870211205769e+00,-6.948230144327435909e+00,-6.934575466023252588e+00,-6.920175965235378257e+00,-6.937215980571416196e+00,-6.877291487140446691e+00,-6.918321021279277616e+00,-6.909464874835567372e+00,-6.937593766748936019e+00,-6.940052861906616855e+00,-6.942328175743751828e+00,-6.899776470746262547e+00,-6.892706741309417851e+00,-6.912408217652163955e+00,-6.915729866766396228e+00,-6.925761531795860293e+00,-6.891984458865593410e+00,-6.878715481685095057e+00,-6.907263039083625600e+00,-6.961299713410884493e+00,-6.928566058267152883e+00,-6.917394838014031322e+00,-6.892887393464185664e+00,-6.901415069201201291e+00,-6.919990315926389357e+00,-6.915175491809945285e+00,-6.904152047463005815e+00,-6.916654508533614631e+00,-6.938349767540943347e+00,-6.879606509098586287e+00,-6.915175491809945285e+00,-6.909648580172722987e+00,-6.896144725334492520e+00,-6.927256300385089105e+00,-6.903238888783899796e+00,-6.924828434779385589e+00,-6.917765208388635401e+00,-6.906896537338639064e+00,-6.929877533864964079e+00,-6.914621424014812945e+00,-6.903604052198582863e+00,-6.867027726891725692e+00,-6.917024604762858075e+00,-6.910751521461001801e+00,-6.910567613414507093e+00,-6.900686471719062354e+00,-6.907996445790500317e+00,-6.872854528934086105e+00,-6.888021203813012860e+00,-6.876402519173645089e+00,-6.896870020017239256e+00,-6.892345534876016089e+00,-6.886045451037386300e+00,-6.931941905434165108e+00,-6.956667394762604317e+00,-6.921476476333680239e+00,-6.944418437787474474e+00,-6.893429545822273852e+00,-6.881390949258030076e+00,-6.906347036454770105e+00,-6.930815356310141340e+00,-6.897051425913428346e+00,-6.891803969739573432e+00,-6.921662401778112539e+00,-6.907996445790500317e+00,-6.914990768432677015e+00,-6.918506360914689068e+00,-6.902144197924718227e+00,-6.886224903707226730e+00,-6.919804701076667897e+00,-6.940810724769718831e+00,-6.899958404704737092e+00,-6.920547367282360085e+00,-6.908363350949633386e+00,-6.940810724769718831e+00,-6.896870020017239256e+00,-6.882463143785335191e+00,-6.896870020017239256e+00,-6.926321808213542042e+00,-6.896144725334492520e+00,-6.884073594164714649e+00,-6.909464874835567372e+00,-6.908546854023825290e+00,-6.921662401778112539e+00,-6.876580249557120439e+00,-6.896507306919319902e+00,-6.914252215961882442e+00,-6.879963142483250138e+00,-6.937971695702792374e+00,-6.896325999693731390e+00,-6.927256300385089105e+00,-6.936838337062397386e+00,-6.905614837996283839e+00,-6.898685561547164724e+00,-6.878715481685095057e+00,-6.915175491809945285e+00,-6.909832319263731648e+00,-6.907629675201389929e+00 diff --git a/projects/resources/python/other/data/ridge_coeff.csv b/projects/resources/python/other/data/ridge_coeff.csv new file mode 100644 index 00000000..48740ddc --- /dev/null +++ b/projects/resources/python/other/data/ridge_coeff.csv @@ -0,0 +1,5 @@ +-2.479909147170334272e-03,4.628334258116833036e-03,-5.079606890835244512e-03,5.222978465457811699e-03,1.145519601222120924e-03,4.016689893436099779e-03,2.290936974855060752e-03,1.857033644726054783e-03,-1.769935701580454147e-03,2.042857104467621972e-03,6.674232964954971391e-03,4.190793900292542722e-03,1.030080343823243545e-02,-9.167956050435476650e-03,-1.970681889783699580e-03,3.815056904913152486e-03,-1.479941233091099182e-03,-1.130554613717112914e-03,2.164652050259801945e-03,-1.628748698094924924e-03,2.237873226153147457e-03,3.543972305957072445e-03,2.860289462412693440e-03,1.535368554006642057e-03,-2.827208781088372258e-03,-4.139330578145890630e-04,-1.620224495447969581e-05,5.544384763372533879e-03,-8.278567069455389921e-03,-1.755890169951782704e-04,-1.059541548869450891e-04,-1.076404661248349251e-03,1.370345068442426015e-03,-2.153257006611755849e-03,2.855551191510983296e-03,-4.549231518519523802e-04,4.951509993829600852e-03,3.252011552657545993e-03,6.145497878171295864e-03,-6.515376032622312861e-04,-4.214168037242137232e-03,-3.429801111616453176e-03,-3.235214326807736400e-03,1.812585302916501419e-04,-1.317060911730074139e-03,-4.699609776204835207e-03,-8.326351429678193047e-04,3.792067110821019122e-03,-4.282418215093820868e-03,1.112500523501755607e-03,2.622115977240143140e-04,-3.702755998817886755e-03,-8.934987356736711489e-03,-4.822083961535189589e-03,-2.417521936395233221e-03,8.131781653933545587e-03,3.381898944304107934e-03,-3.332198717078463639e-04,-1.493106845745394628e-03,2.332780568104433298e-03,-4.294981038662559064e-03,-5.909562772439637575e-03,-2.022018237592226268e-03,-3.925386194508956143e-03,1.277299364250101838e-03,2.567207129608717157e-03,4.083507953151393859e-03,-2.586691612025698254e-03,1.027195555685066382e-03,-5.656161568735707662e-03,7.278046005395701935e-03,1.854229088648799663e-03,2.726532915909003416e-03,7.468012970653752905e-04,-6.736556159708625112e-03,-6.072664882654933705e-03,7.999907128832984432e-05,-4.912944004586750936e-03,1.504324753822174629e-03,-1.909074061823143147e-03,-4.319980188059990281e-04,2.819652476505884412e-03,9.847856338551573378e-04,-5.983760603605419413e-03,-8.133125577941874209e-04,5.895643656361504968e-03,1.039062187152369523e-04,4.733676745667288362e-03,1.343248576748986905e-03,-1.452748477956497530e-03,-8.032263359439230539e-04,-1.193960855792710772e-03,2.765571040795620009e-03,-3.865517803911298162e-04,3.430337291363750717e-03,-1.824198242583732798e-03,-2.937765644595465714e-03,1.002184345285251276e-03,3.929869575713459550e-04,7.060802430322660672e-04,-2.257234906424343025e-03,-2.321523378791341317e-04,1.610995605579654244e-06,-2.311435067352834820e-03,-7.962243825727750857e-03,6.746915405656984596e-03,2.003070350526800969e-04,3.150595856705653425e-04,1.594876069342808468e-03,-1.006455156347864409e-03,-2.022558338334732014e-03,-1.956114856396928316e-03,-3.531784812219152664e-03,-2.721910513437293677e-03,2.745658932863594311e-03,-7.071432146736457945e-03,-1.250785692829398154e-03,-3.325691325143749575e-03,5.829722010286226587e-03,5.944391851982201193e-03,5.302743704690917985e-03,5.338594336883203083e-03,3.009241925351635767e-03,-1.228366269593677944e-03,3.277682109984686367e-03,-8.766469417264879374e-04,5.679875913370372419e-03,5.366732853364235105e-03,-2.153509688842038597e-03,-2.846149643292359994e-03,-1.399689375043841437e-03,-2.747716429981271816e-03,-2.142907503377523577e-03,-2.802001856816438256e-03,6.477121539682076552e-03,2.697720700599251162e-03,3.841619757932801266e-03,2.732569811258741079e-04,-7.628306381644602268e-04,2.649455908888456029e-04,-3.756560788003044261e-03,-1.396545046687510533e-03,-1.864634905697348279e-03,-5.760594958267100177e-03,2.370699735864862084e-03,-8.121847291090283569e-03,3.709287734828195168e-03,-6.346370375693548803e-03,-2.279749404227272500e-03,3.550819462005474440e-03,7.599738776761176193e-03,1.885498637573060528e-03,1.341481162414997087e-03,3.936652729601524390e-04,3.250988444755177902e-04,1.218963531086150092e-03,-1.486413471287891322e-03,5.645868648250900075e-03,3.409641584627932584e-03,2.955853454389993553e-04,6.754669065468254553e-04,-6.839734361000278373e-03,1.537378368708764527e-03,-5.969448037218546416e-03,8.029894670805021975e-05,-4.019545632452086598e-03,-4.039543097014939091e-03,-8.034783199135911089e-03,1.615228224127959918e-03,3.736617722574606289e-04,-3.215194053384099002e-03,2.632329933108993377e-03,-1.680603648453771496e-03,1.646545164813357966e-03,2.321168296840134260e-03,4.148998313965541161e-03,3.938511944843259630e-03,2.636170184181325319e-03,-1.833187050751273854e-03,-3.808372673734551194e-03,-1.044137927594941933e-03,-9.055009132569895314e-03,9.131524437155072796e-03,-8.669879748429185073e-03,-9.658584487897986124e-04,2.583618329986627524e-04,-2.644933744501084399e-03,-1.758081920625977675e-04,-3.358343604588043003e-03,1.380476829475078739e-04,7.027516333746610354e-03,3.058550487941428739e-03,-8.574818632764552020e-04,-2.502366850522910139e-03,7.428529475540861585e-03,-7.696681264851280152e-03,6.013164334125025053e-03,6.233114250031916931e-04,3.951988583727945349e-03,2.970340190352204618e-03,-8.375325406109718858e-04,-1.527034590553750029e-03,-1.339440770526383268e-03,2.198424826245562024e-03,-3.183154732806250248e-03,-1.004331539151531207e-02,-6.445069109540214891e-03,-2.203797769547500337e-03,4.191993520174941076e-03,5.933364707984382057e-03,3.794551894753868285e-04,-2.252746067405403494e-04,2.196216486405323538e-03,-1.397990414278837794e-03,1.868723562030482135e-03,3.475071537632849414e-03,8.509249401572535620e-03,1.595610410374473462e-03,-3.779149122610691496e-05,-1.666692166845319028e-04,3.266681335398647235e-03,4.151474864908329468e-03,-1.812099842676501670e-03,-9.615043754081609856e-03,3.252812624887813260e-03,7.324025979592572219e-05,-2.523797788961374029e-03,-3.437232127620954331e-05,1.988624459614606933e-04,7.888838684216530452e-04,1.227287190277017532e-04,-1.443947426839937206e-03,-1.884277766956260610e-03,-2.476428642951405360e-03,3.166237468999684706e-03,1.666425105077479728e-03,-5.423011684424974312e-03,9.480270973869329857e-04,-2.417934886525865360e-03,8.127382912252043706e-03,2.022996928513659618e-03,-5.542613887777718146e-04,1.160046078641387103e-03,2.039415039326137116e-03,5.358187629149340631e-03,-9.633528494295824467e-04,1.021577870288140457e-03,2.511612494461035790e-03,4.546540776825837987e-03,6.392556917924293626e-04,-1.488302511792899234e-03,7.868576597846352024e-04,4.094553612880929942e-03,-7.311783742780623985e-03,-2.154514704808304770e-03,9.316057542930143969e-04,4.780566225796806581e-03,1.839788570295330461e-03,2.503443866893149006e-03,-2.048241409926208336e-04,5.601999741854876008e-03,2.103533215242468259e-03,1.863026410260652972e-03,-4.460718720725031540e-03,-8.613723909115825151e-04,-1.058312932798086007e-03,-1.241722328204020393e-03,8.144398871508747723e-03,3.416181421952828486e-03,-5.408030455320496019e-03,2.569552917071585459e-03,-3.612317663975937146e-04,2.780979329355265980e-03,7.273506820417934872e-03,-6.645284080601925741e-03,-3.473800692578720480e-03,6.413162324208718386e-05,-1.060715340563820903e-03,-5.984049815033061839e-03,2.387094023978375470e-03,1.873592585275961038e-03,-4.952271194429932501e-04,1.453511260144677930e-03,-2.994961778240220508e-03,2.772465333359839731e-03,-1.977318753952836134e-04,-4.227820684511209189e-03,-3.232448437711807083e-03,7.190280546188863734e-04,5.467382347683278666e-03,7.328886527175105820e-04,-7.138310883094475291e-03,-1.676219276294037242e-04,3.623204575232621613e-03,-7.834980960757128004e-04,2.380371027042465972e-03,1.429349586301240094e-03,1.765050185690025851e-03,1.083771393271498349e-03,3.307290534802292785e-03,-8.624331412442962433e-03,5.592282279962453896e-03,-3.934970229230744070e-03,-2.217242799436944505e-03,-2.812299020732709329e-06,2.527052355866412844e-03,3.152889923620271709e-03,2.850057549990133322e-03,1.276692839940257599e-03,-5.797318127500881470e-03,-3.476005403492601203e-03,2.970939203048693876e-03,8.367766346815018116e-04,2.881977804441538098e-03,2.042622273755194742e-03,1.734659518036001189e-03,-6.327954189663422121e-04,5.911430266829669974e-03,1.878986817628728202e-03,1.467142730540162273e-03,1.785359157357422266e-03,1.115527605553961413e-03,-2.714795497504141498e-03,1.995264574752585434e-03,5.930008841200193337e-03,-6.370200795126185721e-03,-3.892860198822800395e-03,1.675904137691919477e-03,9.435099911940807334e-05,-7.551576364972605038e-03,1.228459143242951676e-03,4.052864697324480917e-03,2.671349710266962378e-03,2.640780173838774879e-04,-2.170985119965186064e-03,-4.621911668405991394e-03,2.955548628421564902e-03,1.685519872887532343e-03,-4.126433466940094760e-03,-2.748588506925268415e-03,-3.678825141123881395e-03,1.882927794480209437e-03,-4.032287748152924012e-03,9.450745775994965096e-04,-5.012524248357679013e-04,-1.392150197193394878e-05,1.159095053540319491e-02,1.829427446840571929e-03,4.719984151726430884e-03,-2.713367222388368845e-04,-1.759848243846673377e-03,-1.116066899355088208e-03,-4.602279883594558550e-03,-2.876354811901943916e-03,-1.497660388056902417e-03,1.598027239833340165e-03,4.716529311631405263e-03,-1.854896381638068996e-03,3.344891691919900725e-03,7.408348545627518357e-03,5.880429389380254120e-04,-3.673087435162146561e-03,2.905213567587692364e-03,-2.299500783887819351e-04,-7.698273827577459087e-03,-4.128140540212234082e-03,-9.266066895443077212e-03,-2.312671697641041375e-03,-2.258797745650992662e-03,-5.917787361717660906e-03,-9.963390686536460848e-04,1.090512452437602435e-03,4.208926968751415879e-03,1.473843834912221462e-03,-2.566384720828437959e-04,4.475279294952923606e-03,-5.627533640310111891e-03,-1.860416567036133695e-03,-2.915673589487891362e-03,5.751875888526313766e-04,5.053321887976720307e-03,4.607050123194351976e-03,-2.461226251601969679e-03,-4.151811195918118577e-03,1.008693269529300530e-03,-2.330728757988683331e-03,1.882075711673266523e-03,-6.563735188532697495e-03,-1.789839278889103318e-03,1.206361348887842640e-03,1.188054944360199955e-02,-5.806243894194338361e-04,2.009117630633247380e-03,-2.460150997341422480e-03,-2.722598961524289561e-03,5.253346753961263965e-03,-6.090560169170049568e-03,4.857277738562195898e-04,-8.507825042034407315e-03,-6.155465034917714058e-05,-1.280999268527639474e-03,1.743573168563495408e-03,3.784499576176610959e-03,2.323421937073790085e-03,4.258154902988896436e-03,-2.291963884674822274e-03,-5.669273870553997226e-04,-2.175867153670926410e-03,-1.448707442776940362e-03,-4.473239955556791193e-03,4.368257113425080482e-03,5.099070757097693384e-03,-6.246979627450263998e-04,-1.984987834445422605e-03,-3.117636038863893892e-03,1.543238976721156427e-04,2.352418093613183828e-04,-2.285531063993896921e-03,6.756239038789162458e-04,-3.562616752298866651e-03,4.341700330187684038e-03,1.078165857230597340e-03,9.835451554854778217e-05,-3.539408534869890963e-03,2.000110194200006158e-03,1.443601818938943003e-03,-1.814690093103889278e-03,2.524450274440879008e-03,-2.580895292011141547e-03,-9.283842332377173143e-03,-5.419945762038679352e-03,1.438385578906511194e-03,7.044777894492629602e-03,-8.251433271275780343e-04,-4.867706002790599638e-03,-4.396031383306108972e-03,1.785784051404363084e-03,-2.198540184353624076e-03,-3.251963232920460772e-03,4.668840965070443320e-03,5.018280804851956366e-05,2.175728689015670944e-03,-2.542531977101962059e-03,3.946444385518544512e-03,1.694717155528517030e-03,8.107291299042813926e-03,1.286752937921206144e-03,6.243786717491395591e-03,3.516756086967199289e-03,3.637927097747668467e-03,2.243055165539915852e-03,1.321011003151509496e-02,2.619709251450757365e-03,2.101253741799585708e-03,5.206139251077592997e-03,-3.374578288124057204e-03,3.590082173003422434e-03,-1.122436046783220967e-02,3.252257150980714627e-03,-6.854221496568258486e-03,1.526456529548639784e-03,-6.601607412633165922e-04,5.361515437810957917e-04,6.022770515427527255e-03,-2.161324886805993280e-03,-3.948176258969552689e-03,-1.892322267190435460e-03,-9.432261288387024274e-04,4.284060484020241547e-03,-4.560247778977265416e-03,3.895724573375898992e-03,-1.669247122643967036e-03,1.285679013386234687e-03,2.892996039581696537e-03,-3.930120462025032436e-03,5.917815185319324871e-03,3.261231210745032822e-03,-1.243185790235076544e-03,6.912253523457229099e-03,2.059944918122104136e-03,-2.017460779503764488e-03,-1.799074922033285125e-03,5.663304294249296017e-03,-2.779317977350140387e-03,1.602051012959119190e-03,1.020528766646110674e-03,2.325784149359022990e-03,2.494173286412894840e-03,1.299945529442433738e-03,7.499741008707817109e-04,-1.662938589456178619e-03,2.808159219981532732e-03,-1.511570179874348980e-03,-6.178454419524878269e-03,-3.924786058450260677e-03,3.436451972321041912e-04,8.295085179985717304e-04,-1.458756852156599696e-03,1.275766995487237574e-03,-3.081883411785105685e-03,-4.788607311803816553e-03,-5.302680142347636003e-03,-3.887993614508041852e-03,3.067695650590403222e-03,-6.014542981400730105e-03,4.964066619511096554e-03,9.671999544260170270e-04,-1.946709827042448224e-03,8.414768145557402490e-03,3.056171025650282567e-03,-4.296715672568809236e-03,-1.543135875416836193e-03,3.874557576532559802e-03,-2.948516106143466396e-03,-6.274427703940554241e-03,-2.447931910993749599e-03,1.158867383790611327e-03,1.445930113548554025e-03,2.504265524760701349e-03,2.508392813854675406e-03,-2.604898639884842618e-03,-1.269471979763627640e-04,-2.999035889189205929e-03,8.504021815832923416e-04,2.347510016561796720e-04,-4.095560240264506033e-03,1.187384335074016372e-03,1.755091132835374500e-03,1.231424686236911974e-03,-4.807882464514240742e-03,-1.590483405977299912e-03,4.537360404657490506e-03,-6.925124698239717731e-04,6.769796556192178051e-03,1.085909397848051731e-03,-5.244085939730444394e-03,1.278977544124892214e-03,-5.563646576288194031e-04,2.616919970250342845e-03,-4.275324257898379353e-03,5.088579223218505504e-03,5.786647755462717355e-03,-1.819026322647595119e-03,-3.002658539172064697e-03,5.819351211679203197e-04,-4.093682829394902981e-03,-4.239307625395842202e-03,3.385171605333386034e-03,4.737971505108921379e-03,-9.431698219045513577e-04,-2.916873148555332047e-03,5.052079610881618846e-04,3.960872861394506769e-03,-1.214769184492916045e-03,-2.531161271251795310e-04,-1.658698311191417803e-03,4.401742749887437890e-03,3.766098163932745258e-03,-5.109825614986756963e-03,2.346228350941656927e-03,1.273712178733361206e-03,-1.181108733634330743e-03,6.384901613402715675e-04,1.881708044238400651e-03,9.130634934089642760e-03,-1.789062562031954731e-03,-2.592605526128914737e-03,1.275527195843857231e-03,-2.101049084282519564e-03,6.351963672966203130e-03,4.667032763446036202e-03,-2.127041739284802734e-03,-1.339092969713611986e-03,-1.756285281144781074e-03,-1.027046533182398615e-03,-5.803884285446272127e-03,5.158866334683249663e-03,-1.391086833493408552e-03,7.408058482270795915e-04,-1.455726444228458124e-03,-1.680402275592706753e-03,-9.678952586296900133e-04,1.658559879599135704e-03,1.129822501816849954e-03,4.709212281360451702e-04,-2.907988541981489442e-03,2.789278583403667134e-04,-1.479112231489869899e-03,-5.230983493977423016e-03,9.814986748030688109e-04,1.596494227031105455e-03,2.793760263944547375e-03,-1.590894645330433220e-03,1.736776649307246196e-03,-4.341659705693355631e-03,2.452229638830024250e-03,1.719537842458482898e-03,-2.802190501609441459e-03,5.058648411096376349e-03,-1.149803741567762081e-03,2.185971258524016417e-04,-6.687875727675404334e-04,-3.122710424829838738e-03,8.079524827800598288e-03,-5.801035954947014218e-03,-1.523642000678661085e-03,-1.514233608321234777e-03,-2.198445286504056850e-03,2.930234601275146303e-03,6.354437272858141569e-03,2.801863950858117427e-03,5.487573202500363630e-03,-4.352434389774924653e-03,-2.403111101317361928e-03,1.492850492661215852e-03,-1.320550837229454363e-03,5.052651995654855455e-03,2.123640816449424984e-03,-1.611955330779247836e-04,-1.962380920765930683e-06,8.571534638548736033e-04,2.543405409289698806e-03,-2.427293779946437368e-03,-1.058110383276058067e-02,-3.113070917589459610e-03,2.978538038054686331e-03,3.123775532534317934e-03,-2.879764298623802704e-03,2.972361745024095989e-03,-9.566089910424329518e-03,-4.111919179147758598e-03,2.433129364742808026e-03,-7.094681576953337787e-03,2.922038192661675741e-03,-1.514759265405424867e-04,3.186488053825641334e-03,8.828635078782463017e-04,1.976527447136838789e-06,-7.843832676285358841e-05,-1.420180825800399036e-03,6.217730517168135011e-03,-7.987604241835836874e-04,-1.825499532433477474e-03,6.812658206861758707e-03,4.100357286825873603e-03,2.563736105779507602e-03,3.529884448512184917e-03,2.846697191809194425e-03,1.019650959077257482e-03,-7.620711862260234415e-04,7.957572704599026202e-05,-5.416945161579458413e-03,2.459852318284897355e-03,-2.209676696037313984e-03,5.264758009971622944e-03,-4.739988372995122302e-03,-6.449014167667340390e-03,6.493390247352627022e-03,-1.983933952929099569e-03,-2.829716368527475379e-03,-3.743353895635722099e-04,-2.923620850488645694e-03,-2.028632505193276410e-06,7.344519423424333935e-05,-1.695205596182961265e-03,5.052341548146403391e-03,-4.717641085785169100e-05,4.757643868640179519e-03,1.479775981836500571e-03,-4.095967954187080748e-03,5.257393534360746586e-03,-3.114906242043757618e-03,-2.107330638803713192e-03,2.552063207991425695e-05,4.185230022157215613e-05,-4.390819433056683194e-03,-3.767910165387542386e-03,5.892943497632687107e-03,-2.410606624770446349e-03,3.998057226623307966e-03,-5.732527686967734716e-03,7.615793766354595276e-03,1.994966210181482822e-03,-5.792463920793234928e-04,-5.440462392376754427e-03,6.956502840195275157e-03,-4.835325506802981327e-04,9.245600277315534337e-04,-4.222624654549766618e-04,-1.424570540346153024e-03,-1.505097886776389244e-03,-1.463803034787389289e-04,7.505145256945126376e-04,-1.843060113069396825e-03,9.222253914978671523e-04,1.854754274823636846e-03,1.410473355614523050e-03,5.982083758523564290e-03,-1.027470637494033501e-04,2.072801124208002374e-03,4.705906770929722989e-04,-3.661287161369356728e-03,-2.336358654024067727e-03,-2.722692003504271173e-03,-1.645289576264411706e-03,2.264718714152119151e-03,-2.639331544367973844e-03,1.084379790446112976e-03,1.009575281665463491e-03,6.114803223854785655e-03,-3.013825680531448392e-03,-3.478867467200904770e-03,2.046806471871929958e-03,3.991994253758830366e-03,-4.896697803487667228e-03,-5.721718778840253561e-04,4.066333859628830025e-03,2.260098165399837100e-04,1.417131691923264420e-03,5.575170402799476017e-03,-1.354057703051385862e-03,-5.121522340418817147e-03,1.714995314174450752e-03,2.747969206866557150e-03,1.608516215177393637e-03,-5.239863231143575620e-03,-1.360657078438680823e-03,-4.007672807853018306e-03,-2.129179373527475150e-03,4.871788640509664130e-04,-1.266161277432302631e-03,-1.526359753163690621e-03,3.007881053757823723e-03,-2.470373397987378396e-04,5.290849028278689532e-03,8.842901519218338696e-04,-7.210613882612076355e-04,3.999553180968748976e-03,6.655654555101243181e-03,-1.129377987538978311e-03,-5.029056683989259827e-03,-9.819194059122397355e-04,5.352288003357344101e-03,3.209308337174644667e-03,3.371024960300655860e-04,-1.645431166700875693e-03,4.089709920446746132e-03,4.410364954462817218e-04,-8.384891455917241679e-03,2.292830474456910000e-03,-2.826652951712250051e-03,2.493267855321295960e-03,-8.936783685530677590e-03,-2.691209056099560723e-03,-3.316634455028072675e-03,-1.234151078540763691e-03,-1.262961768265463344e-03,-5.189729712466368584e-03,1.314024299594804485e-03,-1.101840044730431389e-04,4.190816780752733284e-03,-3.681657927885963449e-03,-2.720537835155940800e-03,2.258027295803280866e-03,4.420680440384101330e-03,-3.923993747362261239e-03,4.816038542115457476e-03,-5.013243588184784424e-03,2.890656773341122171e-03,4.508323303913751648e-03,4.291042909988574197e-03,-5.318594406176466866e-03,6.743322608113123603e-04,-8.075313317263266147e-05,8.096672436058473254e-04,-2.770334048265654225e-03,-1.268946452808440229e-03,2.422809036711428762e-03,5.443767193459355704e-03,-4.002517920738781800e-04,-4.404586840048878489e-04,9.227898576889487572e-03,7.821819403546950017e-04,6.648928930765487383e-03,-6.261870917717061308e-03,6.958591938959535206e-03,-1.053779882639536676e-03,-7.612732771449041676e-04,-2.767128907321800366e-03,-4.056923645345076462e-03,-9.975869084634849532e-03,1.355106770279807839e-03,2.109451279194168687e-03,-5.057501999176882562e-03,3.953187129221904242e-05,-1.108916001515378039e-03,-2.048047734778905143e-03,3.897334586654006752e-03,1.485241946540530626e-03,6.418164417607257876e-04,-4.750780471514942128e-03,-4.741074699128645237e-03,-3.355276228785146996e-03,-4.117807974517191140e-03,7.278642994019127090e-04,2.692279507931581890e-03,1.541056151513404103e-03,2.204863807568028557e-03,3.385051204556619939e-03,7.165435647355909059e-04,2.065897070277990157e-03,4.328810442245590619e-03,-1.598043845008595160e-03,2.850705225684955352e-03,6.055214777775074983e-03,6.276858850644124327e-03,2.918072329549726337e-03,7.712859477404344975e-05,-2.630318740326897855e-03,-4.331710117889141058e-03,-9.675067369964650797e-04,5.756115407163342121e-03,3.913556109961045804e-03,5.901720214586504221e-04,5.841786609855528778e-03,1.149086133443743152e-03,5.675759652627564676e-03,4.099545001230569532e-05,-7.381374551369202473e-03,-2.494912404904006762e-03,-5.139454953377090712e-03,-2.768881406033836274e-03,-3.924923294175998098e-03,2.003851441041884507e-03,-1.688805692655803844e-03,-2.012426033659288349e-03,2.503803308490488554e-03,6.171406269874635600e-03,9.026540911902060154e-04,8.539736241477483003e-03,-3.977914185714718706e-03,1.062357776615797814e-03,9.701556199831821948e-04,3.175997866166127819e-03,2.360946520617717391e-03,4.509479782422387562e-03,1.228878415626374985e-03,5.921127927585994113e-03,-3.933432882350955916e-03,-2.120690026432405471e-03,-1.018301440165188363e-04,3.218602236571367192e-03,1.354721385279673157e-04,1.168104252745091670e-03,-4.801980088595616050e-03,8.830134089963302766e-04,-4.769922148457042863e-05,2.152193282778306575e-03,-1.421503367654778109e-03,-2.056586695265261600e-03,-8.065868862772624954e-04,3.864325367925286643e-03,-3.203895105518334094e-03,4.735156114300523821e-03,-3.681987995656348447e-03,1.069820723746534843e-04,1.877424417789321518e-03,-4.129232567338666539e-03,1.419854102828446837e-03,-1.815143070498167381e-03,8.766764766844212719e-04,-7.098383834317948489e-04,-4.114575057602131163e-04,-3.347029850223623339e-03,1.774269422206859077e-03,1.385349781312438704e-03,2.198662032367599151e-03,1.271986397382523712e-03,-1.668978669028276570e-03,1.177089580241454450e-02,-1.613628153646823760e-03,-2.148487889989270788e-03,-3.479659392439200024e-03,-2.301177520198838982e-04,4.624648923308506340e-03,-3.610887166637358984e-03,5.985511169725722842e-03,2.570703825831435491e-03,-3.163778231543369531e-05,5.817986226107543096e-03,-5.780413552627388816e-04,-2.647331767135462088e-03,1.431189634196811632e-03,-2.939549692826374464e-03,1.920723266277309495e-03,3.648091726919398380e-03,7.378033300422998965e-03,3.344498053337280775e-03,-1.012400005561663388e-02,1.652426834760625449e-03,-4.904760129792235315e-03,-2.528876028449818670e-03,-8.440483917434076985e-03,8.590413004396588864e-03,-4.283798883050967538e-03,-1.479802468729599736e-03,3.596724370499413629e-03,1.735803451929582254e-03,-2.815020181293878456e-03,-1.005567176315618969e-03,-1.560459098458967476e-03,3.938526283601083400e-04,-7.145694152098117048e-04,2.768026738727437982e-03,-3.045559896244979907e-03,1.029734865834583532e-03,-2.723172986535879296e-03,1.800776816913347541e-03,-4.067618531504667810e-03,1.804025514333990011e-03,-2.487138867723306251e-03,5.288381796608475349e-03,5.330586303062053756e-03,-3.073919186276505115e-03,-7.941887905103008072e-04,-2.476421609484489271e-03,-8.727035051791271912e-05,5.266294338082082435e-04,2.063284820468008502e-03,4.209147157646316029e-03,-2.818833035030399777e-03,-3.053252401438276507e-03,5.882168342943419441e-03,1.053630372722640617e-02,-8.765650233551289684e-04,-5.783908590822078692e-03,8.094020576120679756e-04,3.524591829004281984e-03,-3.460322698179080572e-05,-1.451879359497933912e-03,4.747388364822900035e-04,7.629802477721181822e-03,-2.169155609050252374e-03,-6.714985286765499072e-03,3.103160850482472848e-03,3.122688761240293657e-03,-3.876886708106737703e-03,1.959264759891858696e-03,-1.174484615616637820e-02,4.623487459472778771e-05,-2.426097513315835039e-03,-8.804265828430265714e-03,5.872013239087746708e-03,1.916122279407507902e-03,1.654267195700684021e-03,-1.153598887983622650e-03,-2.519121968560064000e-04,3.563179552018631412e-03,-5.117722879861434475e-03,-5.857739059810595540e-03,7.466287360581132715e-04,7.015200280072142155e-05,-3.890633859567645906e-03,1.247302139449326264e-03,-1.616251847820794878e-03,2.327266574337907238e-03,-6.452976755836550490e-03,8.688748576264228654e-03,1.187070455863996647e-03,-2.554602120882163655e-03,5.183968649141199947e-04,2.815479277976089267e-03,-7.483374521082082967e-03,-6.532902251330684716e-03,6.679602038894771714e-03,2.952635304454095510e-03,1.184543899473516210e-02,-3.333058171809203003e-03,5.455606943413131467e-03,-2.074422855066665721e-03,4.914100532225642269e-04,5.652812379361226575e-03,-1.998140772795790714e-03,5.815970035374609009e-04,3.538233720239032914e-03,1.243274019747276238e-03,-7.023874342353561562e-03,4.182229431939718349e-03,-2.686460708079808869e-04,-1.896979123706414496e-03,1.607305677447465591e-03,-1.678819539951535863e-04,-2.870628572659059130e-03,-2.952768142162603884e-03,-5.826753114713951716e-04,1.460259042011885066e-03,9.508955007239515769e-03,3.354797071072339928e-03,3.259463247673499969e-03,2.994677745504094931e-03 +5.984741835854044852e-03,-9.616071770604235278e-03,5.016923604499034552e-03,2.411189479036791351e-03,4.348191068712575942e-03,-1.743202007711496925e-03,4.919436383703203880e-03,3.474024871070178263e-03,-1.905091775164753165e-03,-3.078415379212803230e-03,1.279124318974609069e-03,-3.010716340974314842e-03,-4.267351123944299225e-03,3.241731071252205824e-03,-4.456819449548205837e-03,-6.723705867683745993e-03,5.284789583145162173e-03,3.860317560219120488e-03,5.337309260307587268e-03,7.171672011266852498e-03,-8.876112007083230724e-04,-4.437403379619596529e-03,-5.822369253796511566e-03,-3.957949724708131715e-03,7.255171744730166787e-03,-8.942164099704680335e-04,7.223144336735389491e-03,7.063333757931944401e-03,-6.519645017837472512e-05,8.026028758878006597e-03,1.141864079768726160e-03,5.502227743979857047e-03,-1.203462392820219690e-03,5.840963329058839436e-03,5.052968679302062213e-03,4.147832798475316850e-03,-1.719884027267911536e-03,-1.361054186469799450e-03,1.120588060705736064e-03,4.732650465998793077e-03,8.755756625285134390e-03,-1.989575348666213026e-03,-4.578013703971127511e-04,-2.167271656268942963e-03,-4.991460956420429480e-03,-2.486064528158703039e-03,-8.570074861486962937e-04,7.680527287157184677e-03,-5.617025699225406624e-04,1.463910591659070603e-03,-3.275454088463320562e-03,-5.113975909179969579e-04,-2.484881360406376600e-03,8.458768337593618181e-03,-4.176590065352223623e-04,-1.167054805570489143e-02,-3.621057408368227697e-03,6.064380690398160807e-03,-1.729420572691511577e-03,4.979300551654473710e-03,1.472848081006948671e-03,6.696551075980698969e-04,-7.119780659349897629e-03,1.037561929923373760e-03,-1.084324851489194591e-04,-4.437409630427810447e-03,-2.420206805262874010e-03,3.756466701165596042e-03,2.546442679311766450e-03,-7.082536387051132634e-04,-3.271073195261703717e-03,4.581642612979068899e-03,-2.083039541143099586e-03,-5.455093513358987532e-03,9.551330519409753292e-03,1.513675475788653834e-03,-3.048128829332747650e-03,5.135968627745224595e-04,-3.693423019349943021e-03,-4.651237730069430272e-04,3.751536801093640402e-03,-3.389169471490333899e-04,1.689185072197593013e-04,-1.135675212287851066e-02,-1.207093061091169678e-03,-6.924955497145674453e-03,3.586166103152149589e-03,-8.446670420016054795e-03,-1.162354695077016768e-03,-3.072655791991421321e-03,3.783121138955834652e-03,2.353807017806827922e-03,-3.088504606222331177e-03,1.023889267984454799e-04,-1.545751026974185845e-03,-1.154188039893995878e-03,-8.073248485251522874e-03,1.442841811359925472e-03,-3.839119126397172455e-03,-2.061312894320979725e-03,7.568534333195118223e-03,2.248440587531316500e-04,5.094807684509428114e-03,3.363056939061728669e-03,3.491474488788752148e-03,-1.478110790117632706e-03,-6.048953579048474243e-03,-2.815287637143054113e-05,4.668599577432394274e-03,-3.863144409790750591e-03,3.920366484648329063e-03,1.709073188552647643e-03,4.025898141122434895e-03,-2.750183482302123381e-03,7.683684941520249221e-04,2.086495156286398162e-03,-2.692039552956773923e-03,-1.860768731035280111e-03,-3.755510117812231423e-03,-6.632051953218071668e-04,9.467766860269586054e-05,-9.065461656059535826e-04,-3.786620162512073767e-03,1.496148946979817358e-03,3.147545610658882258e-03,-1.523481553049101881e-03,5.080048515706393590e-03,1.925079632303594796e-04,1.085401354350893624e-03,3.249986530325569330e-03,-3.068307351263617738e-03,2.460029496312786737e-03,6.194819380263816809e-03,-4.481855644766623639e-03,2.753073129738299943e-03,-6.307660777639935391e-04,-1.015986837534816820e-02,-5.952696945216524350e-03,-3.037569027607777555e-03,-1.458705156441195746e-03,4.048630879725556402e-03,-9.071512628009295934e-03,-3.228722352681619428e-03,1.739150213039649848e-04,4.621407690739215944e-03,-5.832199101376632500e-03,6.138150382976338129e-04,3.138040466776577386e-03,1.437035939228206412e-03,-3.943824825296863255e-03,-5.367813821745066882e-03,-4.463784663830482925e-03,-4.261560310427983840e-03,1.397968257445010706e-03,2.056317028076303649e-03,6.687935116997597044e-04,8.194288772146630581e-03,-4.602562644755485259e-03,3.299759884889266553e-04,3.675143893579732417e-03,-1.429165520463838296e-03,-5.683960321024747421e-04,-1.901916477155874514e-03,2.006141511800279588e-03,5.058433372870746415e-04,6.097551752283562367e-03,-1.729696418471093466e-04,-2.115766374886675783e-03,-5.570373722532678644e-03,-1.304880903031904911e-03,-3.066708199027342804e-03,3.377953139334588517e-03,1.515335172993362072e-03,-4.084794771050588059e-03,-2.977341974360121334e-03,-9.266994071393902478e-04,9.707812078133750029e-04,-4.179714304791603587e-03,-1.782086217136300259e-03,-3.427045350943182375e-04,-4.770620629853542308e-03,-1.464877366718344990e-03,-1.051863765041041211e-02,-4.972379023381918658e-03,8.140344590464069444e-04,-5.636288790560839597e-03,-4.445561213140176299e-03,6.393395668044146273e-05,3.778640684677965142e-03,3.889663068469741830e-03,-7.951348792640858774e-04,-3.926459113669166293e-03,1.473429561887363301e-03,5.311106873535993873e-03,-3.922719230776639844e-03,3.236262220676792110e-03,8.353077697560743961e-03,-3.842814051155134768e-03,-5.136435320321209620e-03,-6.940592970462714298e-03,-5.121566226745827982e-03,2.031815583794806517e-03,5.245180307093181941e-03,3.820804693137550088e-03,-3.524719527378296358e-03,-3.501082855994146203e-03,7.345178529389664868e-04,4.262769509309133407e-04,-8.211766163424928438e-04,-2.345871264656022599e-03,-6.640362250819885391e-04,4.122277321804831084e-04,-4.151056148752748590e-04,2.815523288705776631e-03,1.024501870955497754e-03,-9.054475429456166138e-03,-8.823349530549714484e-04,-1.683809392546332115e-03,5.258500427105636602e-03,-2.397894954065111876e-03,-6.486383269001439258e-03,2.571702459819547818e-03,5.804944009895504804e-03,4.399679065515649202e-04,-1.505985619117285483e-03,8.507544448919676303e-03,3.145899039467003194e-03,-4.817550369532904581e-03,3.309942750963944854e-03,1.082210747116531084e-03,9.676503663546612549e-04,-6.454251394082519318e-05,5.636527228393553753e-03,1.102356568671701738e-02,3.185286802953827406e-03,-9.710036749241739845e-03,-1.999890254872992764e-03,-3.764897285498346007e-03,8.124033722980556621e-03,-8.749278627303687383e-03,3.267056046154209314e-03,-1.523099789786643401e-03,9.309087090823182919e-04,1.590102086705939442e-03,-1.890797066134092611e-03,-1.665239413000357003e-03,5.494539520996382645e-04,-9.503003335761794554e-03,-2.281130984359421802e-03,4.383599292811853065e-03,2.543379238627068318e-03,-3.918429175857327147e-03,-4.447849269638113300e-03,1.050935225207483975e-03,4.465978595366398548e-04,1.300441673341505002e-03,-2.483971376293981400e-04,4.861914698293399507e-04,-2.370352858275809468e-04,1.362228535832109419e-03,1.769739535568824306e-03,-1.115068618660436774e-03,-1.050410834611570279e-03,6.187504892558711919e-05,7.195995148576869943e-04,5.768385188621911498e-03,1.786113211696679481e-03,5.130435101807364652e-03,-1.770362452855528618e-03,1.762817156911375676e-03,-4.686580655088498290e-03,-3.635918881403608222e-03,5.582144875187249533e-04,-4.273995317960624894e-03,1.979649909965571988e-06,6.590959521418894790e-04,-5.066188024575813071e-04,-1.182590290031273160e-03,-3.292552349266479367e-04,1.587648612561726267e-03,-1.751783228967431199e-03,7.329582824956165513e-04,-5.574946930859723399e-03,-4.923143682201823077e-04,2.646464411391341413e-03,-2.451039888001482585e-03,1.419681093064993974e-03,5.553416240894956148e-03,-9.562677291513660763e-03,2.656688683268136879e-03,-2.041104198831559906e-03,1.612482921976768954e-03,6.931677523077578234e-04,-2.471442613018905946e-03,1.702430114497096268e-03,-2.979427324316170911e-03,-1.758067189287350861e-03,-2.430183297503889402e-03,6.520998612280197318e-04,3.198127697528613689e-03,4.709313627222789025e-03,2.142975987668421095e-03,-1.917668421034107295e-03,-1.344596625041372595e-03,5.668154707357733919e-03,-9.967649346507606763e-04,3.951905168902155631e-03,-1.198432922816578287e-03,-2.219519732737485309e-04,6.035693302685843798e-04,2.301302676963730594e-03,-6.511941475684163323e-03,2.568087024365138527e-03,3.999466205603327031e-03,1.876851439403669664e-04,1.540298286291482332e-03,-2.180710078044871113e-03,-6.593921605571882553e-03,-2.294465729851407915e-03,1.334678100502183131e-03,6.497616877833672401e-03,3.130635393972131496e-03,-1.768034350068220430e-03,1.926294151079666192e-03,1.013838112355984873e-04,5.752940177943552044e-03,7.273017065797676445e-04,-7.141606342827747957e-03,-4.000822488984359313e-03,-2.143192402409583881e-03,1.556780635609166224e-03,-3.918633335113092149e-03,-5.881259781598197414e-04,-3.174154216275393205e-03,-7.333686573046342867e-03,5.927351153824488711e-03,2.563270150385541565e-03,-4.369429294831410132e-04,-1.303511919107637473e-03,6.381214719644016757e-03,-3.415402902165595375e-04,-6.082288321461214349e-03,1.790300812134257074e-03,3.731473816010633972e-03,1.180988606679596781e-04,-5.044057386265727097e-03,-6.552858167015016347e-03,2.724679001092835708e-03,3.345022364743319328e-03,-1.321738913311315718e-03,-2.742549396852622754e-03,5.273180162278576352e-04,-2.463284261707194590e-03,2.619282871614015675e-04,-2.280127370470864338e-03,-1.308027123954593786e-03,7.855485501766071993e-03,1.633677482794614879e-03,5.919520706586079524e-04,4.610562281159584670e-03,-1.071225268686476799e-03,-3.827126616886834289e-03,2.683847222286119688e-04,-2.134748376927545713e-03,-2.683620060602805602e-03,3.858613906985411141e-03,-1.679018591163631505e-03,8.786821624756096681e-04,5.023037966246310555e-03,2.523827754246944603e-03,1.665053772010272656e-03,-3.573460670666753561e-03,-6.740351358978876467e-03,2.469692431082382358e-03,-5.124307123503932162e-04,-6.014983371153204313e-03,-3.228755488151885053e-03,5.419088958638559016e-03,6.281045259282001759e-04,1.128858072956646962e-03,-6.541121937381828844e-03,-7.542450289633913230e-04,1.993208960655790812e-03,7.775059574779664799e-03,5.191523833986528245e-04,5.788045599090868402e-03,1.504683114424371440e-04,2.273026688176346677e-03,2.311886655927378360e-03,-1.605063791633716585e-03,8.092432563362355127e-04,4.946474523103783563e-03,-4.382072724397517542e-03,1.711087749958356509e-03,2.154971619924284532e-03,-4.663169804750825001e-03,5.792364444763060082e-03,3.714518120006095759e-03,1.562545354172042208e-03,-3.520493719891623283e-03,-2.089198509192534935e-03,-1.787460302020727485e-03,5.500893805031054594e-03,-5.043309288922136376e-03,-1.619013809689027073e-03,2.898892709784814392e-03,-7.396665424169113212e-03,5.676021652920284523e-03,1.773656804262012160e-04,-1.323156058619177032e-03,-4.448260282288076482e-03,-2.252184497375445908e-03,-9.788209559937978334e-04,5.304020544499445967e-03,6.579350345963710239e-04,-1.727770397140206571e-03,-3.585702258422089790e-03,4.064918754447948389e-03,-8.137400675572607767e-03,4.903010647184055659e-03,-4.757651285107512146e-03,8.294039929208817108e-03,6.993170985611535247e-06,-1.913302169322607122e-03,-3.094801285033816751e-03,4.724088280770147893e-04,6.090593681244093303e-03,-1.774025155233890233e-03,3.864378043456308340e-03,-4.583930688331527142e-03,2.227790336767949790e-03,2.008801686039625879e-03,-1.356464848083176753e-03,9.729896687424671687e-04,-3.166623381264999960e-03,9.765163965524000476e-04,1.163292225592441498e-04,1.142172467079216640e-04,-3.319371800277874673e-04,-7.328528685613088824e-03,-2.981035873745005102e-03,4.307806200699013793e-03,3.565573229328214671e-03,3.317400783570957981e-03,-4.457863050957358293e-04,-5.654177317031343700e-03,-3.356523209244073169e-03,6.767607685289731998e-04,4.108071621190495341e-03,1.294237405132560260e-03,-2.160939185469755181e-03,-3.084251393976996519e-03,-6.348767216181291570e-03,-2.150859288283425534e-03,-5.155275548684150159e-03,2.266140943494834165e-03,1.343812006801061018e-03,6.340007158506557640e-03,1.552268065038129707e-03,-1.928649666744434565e-03,7.777957139061376186e-04,-1.759163337215373900e-03,-2.578728121624658445e-03,-1.003750003612912702e-02,-3.019503795373206737e-03,-4.974424544974696306e-03,-1.635818307165284348e-03,1.883200903848856024e-03,-1.926512984224450220e-03,1.965686322015919481e-03,1.800596431320356612e-03,-1.748032135373002796e-03,1.485833260131168981e-03,-2.392251185301801000e-03,6.504473280425520677e-04,2.945235133098360499e-03,5.116078801648860606e-03,3.653849763603926105e-04,5.762227807380149690e-03,2.349345406938168138e-03,1.204181774165716257e-03,-5.195403672375113399e-03,-4.684341938852798308e-03,-3.764394082702674903e-03,-7.232511322805205804e-04,-3.969688598906466275e-04,7.799050719973095978e-04,4.230786203649214948e-03,-2.973408735651571211e-03,5.940888559708030862e-03,-2.479476279192832904e-03,-1.039593544138805959e-03,-2.245346907996213000e-03,-2.832761191169010356e-03,3.326426232349576594e-03,-2.216688280851098099e-03,-1.864347556552545075e-03,1.347261923293933050e-03,-4.892217897052136269e-04,-1.730047237076681168e-03,-3.936389336780009361e-04,-8.415791172967033431e-04,-1.944822342472235163e-03,-8.437404352342557493e-05,-1.360605305025745359e-04,-2.772101842688236262e-04,1.753717722378790806e-03,-1.726209444106497487e-03,-4.389871830186868086e-03,6.443991999994473120e-03,-5.628727669125516532e-05,1.186326885818438787e-02,-4.927551134284935234e-03,5.640781022203694706e-03,8.671938402955992325e-05,3.196922766360444767e-03,3.382038458791716395e-03,-3.536844107808095709e-03,4.463110460816480086e-04,-1.084292685672951515e-03,7.299587839853752258e-03,3.104228179010946800e-03,3.790143886992101020e-03,5.083879921051486298e-03,2.670137424298635667e-03,8.572587417933633450e-03,2.166834415575550395e-03,6.879920912191069514e-03,-3.513135372671444615e-03,3.876335063866274966e-03,1.278742158143278884e-03,6.975909792095715759e-05,4.395651838759651563e-03,-4.953594321021849260e-03,6.206992783572578068e-03,3.379167474852172968e-03,-5.072283812018695253e-04,1.004170640369571798e-03,-1.338977489244882546e-03,4.885949658782580245e-03,-2.257325448543266895e-03,1.341212882875720928e-03,5.361770328180122044e-03,4.465849007374254019e-03,2.320759524252525869e-03,4.746079497469889337e-03,8.630436480097321283e-03,-4.677198018333762058e-03,-5.498643158776129504e-03,-4.981409989103734691e-04,3.213804849824733814e-03,1.668236680723350109e-03,6.679373504497413197e-03,4.087699028550899685e-03,-4.032071263189893409e-03,-3.640928674451714077e-04,2.906775815626509805e-03,-2.463008802066436742e-03,7.884782807565913348e-03,4.761152670609621052e-03,-6.318922170939656781e-03,4.777741439165105602e-03,-7.357767412023404410e-03,-1.266681308839424707e-03,-6.249748867617241355e-03,4.806448151941158931e-04,-3.135994518575374937e-03,4.782457913258358201e-03,1.466466245628294000e-03,-6.298211830924207652e-03,-1.946117968729037554e-03,3.398281526340951684e-03,5.417522296620562450e-03,-3.942814859287355894e-03,-2.258955454477965235e-03,-4.014689081715901511e-03,6.398994286891967510e-04,-3.864223992380299861e-03,-1.637980335682739453e-03,-1.336901302527089249e-03,-3.345119885946262230e-03,1.081424718531149177e-03,-6.284263872036049275e-03,1.300738572256849668e-04,1.760642258591387378e-04,3.847401599451156107e-03,-1.752750117529043973e-03,-6.303216985397135791e-03,1.635429866171467760e-03,-3.265162671698616705e-03,-2.937361901630912171e-03,-7.172113474188590229e-03,2.448890174936894188e-05,1.063646789578995625e-03,-2.388702553990708268e-03,-5.721032738068809222e-03,1.354655176036766509e-03,9.814656158871301259e-03,1.060191614409342672e-03,4.050194165351975184e-03,-1.323327179885597530e-03,3.007769523543653289e-03,-2.338033105253391284e-03,-7.315324892998978368e-03,-5.900611486391506115e-03,-8.486159162742330092e-03,3.815476777345529029e-03,-3.317190491514041516e-03,-1.754511744201300025e-03,-6.222224104574194947e-03,3.750723177643189733e-03,1.967024481350970744e-03,-4.401088365633230989e-04,-5.178988816765117546e-05,-2.333526264956280270e-03,3.909548422761480006e-03,-9.164148284276043459e-04,-1.816263761568012898e-03,-3.544848785175158581e-03,-7.655525116464237390e-03,8.661561910822439736e-04,4.856404063178292388e-03,5.981579082844528869e-03,2.444481217299759000e-03,2.684942986312791480e-03,-2.008759572025098881e-03,6.314811813473162998e-03,-4.497745869820748456e-03,-2.383472490144755273e-03,2.956809167293442033e-03,7.608084892883012519e-04,3.464715103171058658e-03,6.060456925774573844e-03,2.279208957250175843e-03,7.165810045228677462e-03,2.778660862499315962e-03,3.536238294817787946e-03,5.498124010768281299e-03,-1.280311844428193074e-03,-1.050849739131304956e-03,-4.646829878015117966e-03,2.492060864690679237e-03,6.745794541002295315e-03,-6.217487150718885996e-03,-5.933830538333512497e-03,-1.536603770369764392e-03,1.716618912886634879e-04,2.329366013167856377e-03,9.316076898178970176e-04,-8.645768024255622323e-04,5.333553331132390163e-03,-3.262049484852580223e-04,-6.472568042513449083e-03,1.739529045836621683e-03,6.788298370082938155e-03,-7.322380203766390774e-03,2.629858669062768405e-03,1.600286452569898684e-03,-2.997981300354379754e-04,6.637022049955884281e-03,-1.096745980767150182e-04,1.270644721098578228e-03,4.126596928155396027e-03,5.342304545371772025e-03,4.329260794925782890e-03,-7.067448634544573616e-03,-6.103262872218138783e-03,-2.681965452422610790e-03,2.832243089778423758e-03,3.679700484102399385e-03,5.298291360641295585e-03,4.771049888386066505e-04,1.070389133954142849e-03,1.540570865407182768e-03,5.648549344168697119e-03,-5.200255580846735275e-03,2.989884678221506678e-03,2.907316491999193189e-03,-3.130257167382434307e-03,1.321176565489239930e-03,5.962933994446411191e-04,-2.292232758257042608e-03,3.733677952927846790e-03,-2.344629595503533188e-03,-6.541576025888252814e-03,-2.470745635511124188e-04,3.134092764178858861e-03,-3.296652640738966834e-03,4.923785741896334264e-03,1.456000580278486549e-03,1.924316382111733231e-03,1.385458730756988777e-03,-2.349716870733464889e-03,-2.822165272724905770e-03,-1.774842557369734567e-03,2.125984851605376962e-03,-1.020751146630326017e-03,-2.301431726324407352e-03,-1.117087497683826692e-05,1.187829203681765573e-04,4.377155827691117662e-03,-1.153747066807049365e-03,2.572033385180045890e-03,4.794883797941776674e-03,-1.789081675493793804e-03,-1.670281722561250438e-03,-4.862377224703077518e-03,4.783466439507862503e-03,-6.281823527350773907e-03,-2.673088655717211545e-03,4.801891596604499282e-03,1.811671663067686636e-03,3.618821764593790988e-03,3.111381583491141557e-03,3.638139102186061565e-03,-6.360512910186992639e-04,-1.619349710521248570e-04,-1.787764385728021635e-03,-2.692783132344500618e-03,-6.064039608640791647e-03,2.694961224406875518e-03,-6.360372607275305984e-03,3.718807633751299241e-04,-2.848882220239667713e-03,1.153550163162654759e-03,-7.369758983346412669e-03,9.909278899036585292e-04,3.940158999018839904e-03,-5.604563655795694564e-03,-4.453645640099786543e-03,-1.044379809368569355e-03,-3.399973182260328936e-03,4.767068052478189719e-04,3.164628255307861933e-04,-3.240502567962268501e-03,-3.794461649588973164e-04,7.355041864353253564e-03,1.719862459226652535e-03,-1.854535587965011351e-03,-8.854255657842573929e-03,-1.548822055506781292e-03,-6.163850230211918337e-03,2.185496840904460527e-03,7.922171204979903915e-04,-1.825288166501542369e-03,1.002982418627654942e-02,-6.329384469899833852e-03,2.071356008184854595e-03,1.034894721681407521e-03,2.692092194672838818e-04,-1.664386589322277296e-03,3.335223665833396238e-03,3.557801604700636111e-03,3.655329277689619801e-04,3.968163503974625299e-03,-2.015511229410584925e-04,1.334002548423235792e-03,4.376350502799493218e-03,-2.766053740003485660e-03,2.136526859945393514e-04,-8.151959260643333594e-03,2.190307984679634983e-03,-4.829532690254247952e-03,-2.291053927914742420e-04,-3.152166406751467660e-03,5.055177081581836880e-03,1.519555399544625591e-03,-3.439114957786355495e-03,-6.317911208375969964e-03,-6.348768263387999204e-03,-2.855864931087007900e-04,-2.682755558470736011e-03,-5.056501749471625957e-03,6.614681145461809991e-03,6.580036523821388653e-04,1.929342121040290327e-03,-2.121645786201135572e-03,-3.295243056557521037e-03,1.106224263101300781e-03,3.703586697047729030e-03,4.084619854237905509e-03,2.733241900114976013e-03,4.213991969458458220e-03,-3.115428462035872616e-03,1.449972945021286812e-03,-2.448140219601857223e-04,4.155278942621825310e-03,2.520275397920251968e-04,2.297203750133191939e-03,-1.022944940623956786e-03,2.113405125970993677e-03,-2.543525006181854113e-03,9.931263831677960945e-04,4.949846680868438386e-04,2.268309488632146663e-04,3.333550680575074390e-03,-8.285769355212942514e-04,-5.474176522662779244e-03,7.722778912528572258e-03,-1.322472815642970799e-03,4.566732727830341131e-04,-1.005792133680738498e-03,3.340957215044676378e-03,-2.503386911234475268e-03,-6.045354782132209004e-03,6.364948264029997999e-03,5.107266661038779333e-03,-1.639228742486054796e-03,-7.067606384621500813e-04,4.177023377467733480e-03,3.034248293716160141e-03,-3.868095363278442264e-03,-5.560956403570761590e-03,5.030381720666277090e-03,-2.083533684153443359e-03,-1.386358106306878526e-03,6.023935841861155016e-04,1.319878189320076349e-03,2.058191835778181485e-03,2.659408759934872232e-03,5.328762928622803778e-04,-5.652664640239139435e-04,6.700959991602917221e-04,-7.795570849718573211e-03,3.460124566430473891e-03,-1.644717829991255379e-03,-1.707192850630548592e-03,-6.708347540486065547e-03,-6.065404821121199615e-03,3.014008219404918157e-03,-4.458599191380073837e-03,-4.759230539114330145e-03,1.382621399296375588e-03,-3.662600139641388960e-03,4.089094043699528953e-03,-3.785758536868489947e-03,7.034289877336163347e-04,-1.981202393950853326e-03,2.650829073582070070e-03,1.554603982368380974e-03,2.207326946440616756e-03,-2.021726400778876397e-03,-6.913853262310685078e-04,-2.405037444484591554e-03,-1.409873900493881791e-03,-3.031457631711633512e-03,1.111004349339322081e-03,2.794904389760290847e-03,1.458851053934109940e-03,2.579329117751885062e-03,-4.356973666740361802e-03,-4.489768679242393118e-03,7.112261859786057384e-03,3.995914176094277764e-03,2.824838638148125143e-03,4.331097366641834846e-03,-7.312426486407355274e-04,6.761135122140028708e-04,-5.569709010672524441e-03,1.906264500384635381e-03,-3.726829954571758523e-03,-1.282942603029763300e-03,-1.086404677523248241e-03,2.311303774140379200e-03,4.768849721698558905e-03,3.180005693469786007e-03,-4.306171936709778450e-03,6.188006362234959278e-03,1.976840119573855699e-03,7.252522633831520217e-03,4.452340468773338666e-03,1.124614288334634072e-03,4.210422141240316007e-04,8.468492481130384872e-03,2.994284452477932561e-03,-4.409921980080720380e-03,7.327004125724243325e-03,6.637764898006420083e-03,-2.383617664496128028e-03,-2.007312260059366648e-03,-5.119206788096843840e-05,5.413469327089776018e-03,2.500628809338626031e-03,4.228993926902408461e-03,-3.684139634221844650e-03,6.255248514146427401e-03,-1.198646788749574942e-02,1.262808497533713639e-04,1.983414581531913953e-03,3.492473381631337921e-03,-9.223120368273676761e-03,2.486613855233087839e-03,-3.795020094564476552e-03,4.239907757230676824e-03,-1.475834423476334815e-03,-4.086019491923865987e-03,-2.117595310977426863e-03,8.599865027483052232e-03,9.558645386920636752e-05,-3.068450538501813797e-03,-1.063483385079367748e-03,-4.051696555979981268e-04,-1.156608223859764163e-04,-3.173629709789399424e-03,2.795284643565331111e-03,-7.232388063917335151e-03,-1.807150180592619190e-03,-2.856416978163188545e-03,-2.639475529127509670e-03,6.153036209745816817e-03,8.422199292986268931e-03,8.067413200774842990e-04,9.743770832755668798e-03,7.399517729823550756e-04,6.268396433238117987e-03,-4.726214697114986679e-03,-2.011624507066358137e-04,3.839796846512776246e-04,-2.545200975128525736e-03,-5.497307888617460753e-03,-5.209923206478175688e-03,-6.788105689700816431e-03,1.156205735534774574e-03,4.673516161349418156e-03,2.354685867381633123e-03,1.049478830294845941e-02,9.291289297565405794e-03,-5.104000700525233337e-03,3.815070741445170718e-03,2.368709157816302219e-03,1.566229609934429931e-03,-9.693955469642453375e-04,-5.459374589261597327e-03,-3.046946421193819001e-03,1.431054367166543877e-03,4.966812870464812346e-03,-1.220147025674894270e-03,7.796382459321262587e-04,7.454943749561414139e-03,3.834847900983840655e-03,6.396424962405174814e-04,-4.104759995653331842e-03,-7.759714661385797496e-04,4.404876019389190184e-03,1.369788176396269375e-03,2.292972502681558597e-03,-2.682288180980477686e-03,6.681862049819373671e-03,2.473243955956249025e-03,-8.739180157752230588e-03,2.127836507478950059e-03,2.500784586404848110e-03,-2.753616729598949795e-03,-1.842587065522199126e-03,-9.353678170458764110e-03,-1.593468511056576626e-03,4.046088615545669867e-04,-5.596870784524569757e-03,1.224209596086234817e-03,-8.179104638410407413e-03,-7.176751664973813304e-03,4.615978095345179850e-04,-1.779303928585667435e-03,4.779044667914745734e-03,-5.642923458106939745e-03,-3.475093127974396550e-03,-3.874401905005009166e-05,-5.153615799057022218e-03,4.673010286513117062e-03,5.358512724165884547e-03,-2.176754677553799453e-03,5.463713280347496336e-03,2.099346308342539633e-03,5.918462913680780542e-03,-3.230481862616408750e-03,2.254401338055119983e-03,-8.878840988220174785e-03,-7.057146683604279555e-04,2.716259243941733081e-03,2.869413407143047269e-04,3.049278081624187762e-03,2.774100522798403357e-03,-5.194355804214147859e-03,5.544047778334698640e-03,-3.776734168967006743e-04,-1.114822201745784263e-03,9.104831637585296487e-04,1.961482145006316052e-03,-1.722222011451728920e-03,2.687446934908130532e-03,1.271055331955123864e-03,6.542593085634494481e-03,6.559867489840488959e-03,3.775064640701593192e-03,1.229998862042134015e-03,-3.216653239794817990e-03,-5.009324253063047842e-03,-6.238716170600492987e-03,4.774770743652277140e-03,-1.546027812505645178e-03 +4.751112427892467162e-03,3.598232589289064847e-03,9.794055407459878416e-05,-4.311677383805452568e-03,-6.069646572223588547e-03,1.700006872205484919e-04,-2.683924966989529540e-03,2.726485379570426151e-03,1.204339197307428442e-03,-8.008361037679528199e-03,-4.931701266330589884e-05,-3.860830978319484009e-03,2.947844522490427038e-03,4.847780035457674441e-03,3.088293701058521766e-03,4.001032744047576875e-03,3.742271291951105357e-03,-7.708572203758401985e-04,2.277260791482417881e-04,-1.782340146482208404e-03,-4.432077100071595520e-03,7.649921932901693894e-04,5.362957021730329352e-04,-1.819896738266709422e-04,-9.693123112482396331e-03,5.088443216996132654e-03,-3.096185798789494181e-03,-1.327702024370553367e-03,7.144851145693665543e-05,-4.296687422014252092e-03,-3.226807003285811666e-03,-5.490456708095717211e-05,-6.719552593947813839e-04,-2.321841506949465748e-03,-5.769178819702429654e-04,-1.394403854049465702e-03,-5.544631634609474731e-03,-8.917324187052913867e-03,-7.656833426561658596e-05,-2.871767064521395501e-03,-4.339971027751781535e-03,4.488313301408518655e-03,2.904845731473358096e-03,1.432399842908982845e-03,4.969076957736658431e-03,2.916567949455938034e-03,-1.517695331711829123e-03,-3.528772270057508806e-03,4.198203622430641060e-04,3.377057127671890570e-03,-4.100969831975339631e-03,2.080014754339649594e-03,7.396535841608609281e-03,2.353984603956922172e-03,6.215738728180666972e-03,-2.631278414131971253e-03,-3.611912402223945232e-03,-3.310677578342828640e-03,-5.372180775331567015e-03,-2.275472989581096925e-03,-3.013370939712520929e-03,2.611285546414787197e-03,5.439678892851988398e-03,1.034835891422428156e-02,-1.192896700106387290e-03,2.601120427349489731e-03,2.598609808726827139e-04,-4.093206611996316746e-03,1.783985653421440738e-03,3.982020741486520798e-03,-3.293778413573643891e-03,-1.589464585514752419e-03,-2.975473399364152172e-03,-1.899698567262982259e-03,1.229809835506709284e-03,4.502876150941585026e-03,5.397289558974044561e-03,-1.177817235770882258e-03,-3.945175865265296462e-03,2.760615542192645499e-03,7.141383233800923562e-04,-4.887618966960173214e-03,2.284259973982408470e-03,8.366453484927089193e-03,7.377615667422053299e-04,5.530095971008563982e-03,-2.875047831994934685e-03,2.258295071050656685e-03,-4.690029031712394068e-03,7.036623581234906222e-03,1.419212253548128664e-03,-1.619778653378387955e-03,3.488141338982750448e-03,1.565739863000268923e-03,2.811175037191080903e-03,-3.756213368078062820e-03,4.204337695583065804e-03,-1.826422963391528191e-04,-3.815247987393810205e-05,-2.581835900612219990e-03,-1.477843144350362344e-03,-2.029762196440689295e-03,-7.964893437219091460e-03,4.218531570296037148e-03,1.523983800090666918e-03,-3.567107900425241663e-03,3.432048835258643110e-03,9.070143601454026903e-04,-1.016538084754329933e-02,-2.991067262080778118e-03,-1.759288515687217449e-03,-4.743374174003064415e-03,-6.338125817298717428e-03,3.341500076009308075e-03,-2.095588936277073024e-04,6.317271815914584331e-03,-1.820629418547130805e-03,5.697510359778910037e-03,-1.440568874836346738e-03,1.102947435847957073e-03,-1.320093455041741314e-03,-4.142645163668056893e-03,-6.913376988387914639e-03,-6.845875978157296878e-03,-7.314596171455099716e-03,1.835055550989881474e-03,-6.730296742165187140e-03,-1.766716513027768044e-03,3.570383547588810991e-03,3.727465512863477933e-03,4.539556379957438055e-03,4.612032110016286296e-03,-5.581529153599816925e-05,8.589235415717228622e-03,2.411462066358868988e-03,-1.562226949688242435e-03,4.103716535278355802e-03,2.280448367272880101e-03,5.476980287945992787e-03,8.768893935152221979e-04,1.755933646428625575e-03,7.927756189039961848e-03,5.271679186773656905e-03,3.211827465127205412e-03,7.089049722967491907e-04,1.020792838978193569e-02,3.266769200796097294e-03,1.110547579067372182e-04,-2.665148812275858876e-04,-5.568476132855578256e-03,-3.086721959689193735e-03,-9.154700135932381227e-04,7.133529392529190899e-05,3.230229018439725267e-03,1.433739583392413868e-03,3.602221391652639208e-03,-1.028497755536817966e-03,-1.814109696730121677e-03,2.416551532944177360e-03,-3.579211836510048407e-03,-1.078591391591877659e-04,1.152718832008353114e-03,-1.165911899341168104e-03,2.591976781535125854e-03,-3.281146858235864296e-03,-5.708616009989036198e-03,-1.903245497176509621e-03,5.714554551594777827e-03,7.281491013935387745e-03,-3.246545417884667394e-03,3.656297258968087185e-03,-3.843666627665601708e-03,3.783134598089897115e-03,3.895849919436533259e-03,4.832403020197330768e-04,-6.148105139051103160e-03,4.910431979512591520e-03,-7.311900107240482203e-05,-1.748882792229711084e-03,5.783113382504092952e-03,4.404749838894073469e-03,9.058935675332420792e-03,1.813706708029725776e-03,1.299987642244934336e-02,-4.769044435355784470e-03,-5.586252072213872787e-03,2.880531281087001308e-03,-6.892157280086515930e-03,-3.541451562285494788e-03,-1.574313284382613089e-03,-3.537922304155931980e-03,-7.725828167760379278e-04,-5.997886933219413871e-04,-8.715852950368531546e-04,-1.996920060155536053e-03,4.488911386298337879e-03,-4.386039401698109234e-03,-1.712580809542601796e-03,4.915137489894115704e-03,-4.088432028077722789e-03,1.914018949820286411e-03,6.011584082194996841e-03,1.154192768174430814e-03,9.566052657747872896e-04,3.693925310152990776e-03,2.501912302997262062e-03,5.400761440841256311e-03,-3.240588014774124608e-03,-1.119988598982403103e-03,2.490779794567538757e-03,-1.458347661112163090e-03,-2.768890207800368906e-03,4.469991874051917956e-04,3.079206985534855678e-03,2.564900499607560241e-04,4.919103037617301825e-03,4.103254913170658637e-03,-1.828700947424058637e-03,1.720363639626954193e-03,-3.279230710274231523e-03,5.701987691240804554e-03,-8.277323403528788134e-03,-1.643791127248539312e-03,6.849521940525167421e-04,-3.568923200317348967e-03,-4.649900930295474549e-03,-2.506958671530442034e-03,-3.757044208080899590e-04,-1.962961572365218201e-03,-1.384264028873668931e-03,-1.208669921720957044e-03,2.087274398592452954e-03,5.002614469677960432e-03,-6.694731732156348342e-03,-2.501951544338850450e-04,-4.832982835714080610e-04,9.743483028258384179e-03,4.622636400062545871e-03,-1.883719454214295578e-03,-2.669782487560197395e-03,-3.804197429782694723e-03,4.484653800311718926e-04,1.434318319545963005e-03,1.031966749572373618e-03,7.705375629242765950e-04,3.318863398931122533e-03,2.358707055641781581e-04,3.111643382429137711e-03,3.028555266298476809e-04,-2.696885635196003429e-03,1.803070080207254346e-04,4.608457861470259542e-03,1.793827696738704066e-03,5.594480225663145054e-03,1.494106774420638330e-03,1.914215832407435117e-04,-9.878891150409791280e-03,-1.774334402442475419e-03,-8.399805136990033021e-04,3.871711106715227269e-03,-1.041630272906520068e-03,-2.834889951267230836e-04,4.106874936215859986e-03,-8.777904967998211571e-07,-4.735035712630949328e-03,-2.405742889900766243e-04,-5.074189557736369892e-03,-2.873656719081226895e-03,-3.267667845795819374e-03,-3.829830641262670782e-03,-1.337629409688065275e-03,4.757406862918128927e-03,3.833786605188761569e-03,2.810231785993847105e-03,-1.385282236695593513e-03,4.070523683113263375e-03,1.417645288278920630e-03,2.689443383697935966e-03,1.426368139232484390e-03,-2.392675665004865334e-03,-2.772351592534081418e-03,-2.074684593019271526e-03,3.460150481603524800e-03,-6.183174587505897712e-04,-1.272228982306910974e-03,5.689923664057519419e-03,-2.017658000217812178e-03,-3.911015348685338740e-03,2.014105074243958179e-03,-8.123024855175273867e-03,-1.901113444724840569e-03,-1.955802004838275154e-03,1.011757299034290233e-03,-8.125329533876190363e-03,3.195822046850677815e-04,-5.418759253517751485e-03,-8.264174066299145264e-05,6.187779205828482752e-03,-5.758975653811773329e-04,-2.867911340189416031e-03,5.176686458991207676e-03,-2.349004873897419295e-03,2.633153404353545928e-03,3.826557401242537421e-03,-2.331688506428087129e-03,-4.475583378157468005e-03,-7.720127879082797247e-03,-7.188411237299653471e-03,1.543766568331849916e-03,7.830168663255244327e-04,1.522025256574366771e-03,-1.316563268295094929e-02,-7.887677311696877349e-04,-2.571295848546007248e-03,9.135707851269997057e-04,2.441730826095525348e-03,8.706317246201709936e-03,-4.364614006604841841e-03,5.752485631926571724e-03,-5.144875858239237633e-03,-2.937848931655372489e-03,-1.413268799201748260e-03,1.253318055705798925e-03,-2.193029132980328557e-03,3.464618155300983049e-03,-1.466922123966007225e-03,-7.818531434462849036e-04,-7.188596343205163296e-03,-8.863950014540986685e-04,2.307449384710457980e-03,-1.099163664510496706e-06,-2.779290118249864994e-03,8.580775251340141963e-03,-1.997533413101668662e-04,4.450357147399840001e-03,-1.848469596772093213e-04,-7.181565263396944877e-03,1.178353837457256251e-04,1.039177362005461050e-03,-5.153851542786451294e-03,5.763034243757578570e-04,-3.777643053745036758e-04,2.084905316375686678e-03,4.647526417134976648e-03,4.615344432806515952e-04,2.019755734859851170e-03,-3.165610666588044003e-03,-1.244781439209713229e-03,-1.846219645012776335e-03,2.532248997998019259e-03,5.106337230182365211e-03,1.420198101378595743e-03,-2.023086802999893307e-04,-4.014224771373559042e-03,-1.531063990565432889e-03,-1.565497649488292687e-03,-7.938316242868122263e-03,8.576497585881902438e-04,-2.071648328030385559e-03,-1.097171979203500486e-02,-3.894750770780609685e-03,2.760000546417316208e-03,1.453921691580402917e-03,-2.767831204432912549e-04,1.256110833094983489e-02,9.460581349531815842e-03,4.436172974794994235e-03,6.666701476038137866e-04,-4.036867082045603357e-03,5.461298423198921934e-03,-2.912096642926034762e-03,6.229398400487049479e-03,5.745850197060201753e-03,-3.344469313610214708e-03,3.620081046155145497e-03,4.061739778293655193e-03,4.339739313995588654e-03,2.443247381518564958e-03,3.889822082876485433e-03,-6.167795561387938094e-03,1.603850375056499022e-04,-3.759536787823148252e-03,-5.616228212418992571e-04,-6.425586983716950404e-03,-5.077778528716984496e-04,4.488406876432052273e-03,4.278151488921508316e-03,-4.357952442340203535e-03,-4.909292339236077593e-03,1.354179642067882428e-03,-4.882241675616651871e-03,3.611376141387019623e-03,-1.003071147028167302e-04,-4.116326967176141272e-03,-5.997511364487274638e-04,-1.983332737669708714e-04,-8.367529058004355945e-04,-5.148501948356253542e-03,8.097524097585321809e-04,1.569243803410608120e-03,1.218450997119581783e-02,3.260338244797645908e-03,-4.745530846568861427e-03,3.067025207577692147e-03,-4.020513211348905255e-03,2.383215980077594762e-03,3.636516111800297112e-03,5.976063234252406743e-03,2.645057466917428469e-03,6.171429605416832963e-03,4.030509540197082206e-03,-3.590559805323803415e-03,6.772334742561442970e-04,3.384817062222499648e-04,5.575552565118227499e-03,-9.774628614793595422e-04,-1.762025049054459025e-03,1.581369395940973588e-03,2.646865850744322193e-03,-5.900949530651226904e-03,2.646374355838043008e-03,-1.485958855668142791e-03,3.395228956491116046e-03,-1.574509764637774733e-03,-1.087489695280846212e-03,-6.766633220538289216e-03,1.572449568187522708e-03,1.557023052500946126e-03,2.841268892777637934e-03,1.295175359472168150e-02,-1.972014334918988608e-03,-5.144642815367544801e-03,5.908129189175739121e-03,-6.295980323417176353e-03,-1.882406846066576054e-03,-5.836733888273157702e-04,-4.068017105776406024e-03,4.681410063364341984e-03,2.674225003026122448e-03,-1.777062720897896542e-03,3.009320877705466690e-03,-1.296979194528004786e-03,1.462454344649575556e-03,4.359802807929784784e-04,-7.343822623906283258e-03,-3.465545589820053039e-03,-4.843589929524398999e-03,9.936956927012853893e-04,-2.295591193683914431e-03,-7.210589400708205220e-03,-1.882807970164883230e-04,-3.299191839038448024e-03,-3.155877973573188288e-03,-3.230655355471525724e-03,3.711633193169724346e-03,2.060544535564891571e-03,4.144652302198530494e-03,2.738343539807979853e-03,-4.018231885453742158e-03,-1.628364859033761642e-03,1.308350093435883821e-03,-2.444251667756084517e-03,3.555926152170376612e-03,-7.161475886028894830e-03,2.088979321091222110e-03,2.055447720016645007e-03,2.370165246718790395e-03,1.920965750256538492e-03,-2.813241152936024701e-03,3.170884496082167214e-03,-2.209970724204387334e-03,3.232748312546345273e-03,7.977398133626506689e-04,-1.464136622802916440e-03,3.049734192476167617e-04,4.206753260908350188e-03,-4.646577949816595968e-04,5.323686546173050579e-03,-6.566456868695300618e-03,4.198310135654527778e-03,4.801601629437195033e-03,-4.886674832405915603e-04,3.358138277569465337e-03,2.010669753088312715e-03,2.009879276211852441e-03,4.737380546893341939e-04,-1.626017296667654202e-03,-4.079286275227935604e-03,8.120817229463946768e-04,-4.540083238981619529e-03,-6.529593091548052111e-04,1.011327353497905659e-03,1.885662663392196617e-03,1.127763495411718102e-02,1.342962828607702263e-03,-8.017287855256419182e-03,1.539845265402115838e-03,7.269222136952979653e-04,1.557453291338762669e-03,-1.296268048657572922e-03,-3.066420607258646131e-05,6.274713552944872520e-03,-6.943289330631629988e-04,-4.428517569021453090e-03,4.471167539007219784e-03,-7.604583821036302142e-03,8.788720358140769077e-04,2.514633799212381664e-03,2.380368012367925154e-03,3.409052476468150614e-03,2.073474862294808971e-03,-5.032137011234534898e-03,1.535189688723916177e-03,-3.513088318214838742e-03,9.331031532344911906e-04,2.854129518208823896e-03,5.947730263750751305e-04,-2.783302440030941891e-03,1.234659395754945238e-03,1.017527635716695272e-03,3.162902406757011307e-03,-1.334507408776766744e-03,-9.510994019967366347e-04,4.260009721846605424e-03,-3.210635858944519121e-03,-3.264526551524770531e-03,-2.446007312477111069e-03,3.046030051395212223e-03,4.299232095188510773e-03,-4.668835494575376832e-03,-1.567716501566915202e-03,-5.410013154585566761e-04,-3.946411438568496119e-03,-2.887526313323839598e-03,-5.493168886018728533e-03,-1.154838203187133179e-03,-2.194854580592302956e-03,-5.001363336310201899e-03,-5.265949645967855398e-03,-8.769755406754149198e-04,-6.810757738343563988e-03,-9.219430520789603095e-03,-7.446254886681104648e-03,-2.387132420010726862e-03,-8.007340569408583813e-04,3.044567399123697393e-03,-3.194256637482372797e-03,-3.531301660241670942e-03,1.552878129810169065e-03,-7.972539715337276234e-03,-9.256780408476276718e-04,1.159755540115268426e-03,4.156231075143780769e-03,-1.337181810857181966e-03,2.426130877016236843e-03,1.142579860641108197e-02,3.563622150635041130e-03,-1.037042443429907115e-03,-1.881214105142467626e-03,-4.028500752795211547e-03,-3.480305884255548501e-04,-2.580127425518893326e-03,1.142357298099872789e-03,5.548914907104709332e-03,-8.865942750669232207e-04,2.686923827638904375e-03,1.087463653314211398e-04,-1.017949647389168599e-02,4.114981932917190742e-03,3.644014903667998611e-03,1.077352256158874231e-03,7.196761956956329153e-04,-6.765243172598378292e-04,-2.389862706110729325e-03,4.811825008335057947e-03,4.011236701770482492e-03,-1.983038659744969061e-03,4.964906103037434321e-03,-1.314460159829346428e-05,-7.260528753144077953e-03,-1.118887371285759566e-03,-2.030651356136065153e-03,5.229424347027869860e-03,8.581783467714791756e-04,-2.285337384065555966e-03,-4.291008780473164197e-03,-5.765593320866401437e-03,-4.593436578244689114e-04,5.955229870589043599e-04,1.379549715939392936e-03,4.311581644784506263e-03,7.534621790064061075e-03,3.115831658978458936e-03,-6.051229841385605051e-04,1.176658236103291129e-04,-1.400287446177951199e-03,-3.701452887682181708e-03,1.794533447584954842e-03,-1.677459540794707911e-03,-4.005304453281397122e-03,2.452398647750269386e-03,-6.999971127960778923e-03,-9.698243288170167904e-04,5.960301338506949565e-04,-1.721732606844128674e-03,8.482730840411586634e-04,-2.007330878481313179e-03,1.095108297392178610e-03,-1.231889873959121336e-03,3.956657004268331382e-04,4.543961838866820632e-03,-7.165230543791548112e-03,6.319707667146787396e-03,-4.496621692259972344e-04,2.526346241828932374e-03,2.173744310851195502e-03,-2.545617215802563772e-03,1.510617969282336158e-03,1.616134374610241238e-03,-6.047202148297876369e-04,-8.079447137923965018e-04,-3.754291960267035037e-03,1.383358922135391163e-03,1.027770447307654574e-03,2.321555576390791319e-03,-1.484168739904939737e-04,-2.048796765358495628e-03,6.098838553491736257e-04,-2.596970764473410884e-03,5.724799175273972453e-03,3.239648668288916313e-03,-7.040655100214237780e-03,1.050069581664714920e-03,-1.502950608292353846e-03,-9.547617930805256652e-04,4.314510057047127572e-04,-1.868150343230029096e-03,-3.995973901610490146e-03,-4.996017447937150212e-03,-2.807730312516961996e-03,1.871327658045369166e-03,-2.044898184804357436e-03,-5.366207249754920312e-03,4.377423784145217586e-03,1.287212328671424530e-03,-3.269716759785002910e-03,-1.432982496297582420e-03,-2.236073522098374830e-03,2.701948450389750692e-03,-1.434048775530241421e-03,-2.047464316734545851e-03,1.605038210633806658e-03,2.531690951784758281e-03,6.631831903082437965e-04,-3.563646704062522434e-03,7.405367582396420525e-03,1.057935470122848718e-03,-5.060579627089121894e-03,-6.412993464851403976e-04,-4.871758905672072398e-03,-5.513630137101934239e-03,4.238170402817937298e-03,-1.096264254005418050e-03,1.901058018129636856e-03,-1.238537138306512761e-06,1.930791920275286592e-03,3.487352840206861104e-03,-4.991199854017628083e-04,-2.266886459021990631e-03,-6.528072204606947919e-03,-6.111312702298672163e-03,6.540847968021216811e-03,5.187295330601850336e-03,-2.002361162788652161e-03,9.189855302357739189e-05,4.002583750269361924e-03,-2.331131106388713986e-03,-1.616067803815970060e-03,-2.031154264791040949e-03,-3.270668714146117255e-03,5.605250320944961569e-03,-7.160303748149623657e-04,-2.361420570887925834e-03,1.017876426548137113e-03,-2.650055951567346739e-04,6.653326841949171178e-03,-9.006909549232754338e-04,6.174146948747873814e-03,-8.054297600036687196e-03,-1.796032241703867782e-03,2.886350766756236828e-03,-3.967777414232185468e-03,6.774934932390671433e-03,1.770901068839377196e-03,-6.231345188704826184e-04,-9.564201881207235693e-04,2.585215246288141439e-03,-8.947883746911656014e-03,6.412735693205581561e-05,-3.245390292533721112e-03,-7.609608399784983240e-03,2.730881817065658294e-03,2.242341407706735143e-04,-4.941056959448536338e-03,-6.929455264660078738e-03,-5.481507291456094548e-03,5.039603680174473306e-03,-3.687652881831340618e-03,3.005101950708309860e-03,2.672926614835181413e-03,-1.343359956378081680e-03,-4.939582245007387079e-04,4.016972309272254888e-04,-3.428099701709607511e-03,-4.678641038029422369e-03,-3.370186144524319870e-03,8.218311787608918034e-04,4.790566063618556178e-03,5.935137293145825374e-03,-4.330223720609795482e-04,-1.045726359887029055e-04,4.276468466254991496e-03,3.521037669843529033e-03,-5.222270620271440324e-03,-4.934318747290623516e-03,4.986866586842406655e-03,5.046585524088140207e-03,-3.505065776671744196e-03,-2.044524938741874094e-04,2.276006060528980388e-03,-3.588455157031594268e-03,-3.556968212002972881e-04,-3.993901142075094966e-03,8.123377262530694001e-04,9.554126126860520594e-04,-5.853137236535741091e-03,-5.088651509732769473e-03,-3.476923332402504646e-03,2.594524146278635434e-03,4.502597694826369510e-04,-3.025469708010116929e-03,-2.629874010311601760e-03,-5.051693066630834859e-03,-2.302224236508752971e-03,1.059767290864913839e-03,-5.006690293204859102e-03,4.662824866813388737e-03,1.605502213115322235e-03,3.403188359813787839e-03,2.233542876009323168e-04,-3.824906738621161074e-03,5.064974879025604775e-03,-2.830843647162452955e-03,-8.412165962377787039e-05,-3.749338402712621993e-03,9.702291398101591663e-03,-8.621525126744890299e-03,4.079827043371212283e-03,-7.433948026440317068e-03,-3.721307152996478312e-04,-2.485877912350225802e-04,6.812063714478897632e-04,3.907049075009677401e-03,9.372507754032526062e-03,-8.999413420430886447e-04,7.910691169350325506e-04,4.275897039382986313e-03,-1.468592857881299537e-03,-3.061262766901179204e-03,-6.689897213540837127e-03,-6.729987200311481586e-03,2.536422562242492129e-03,3.740381392675814695e-03,-4.803091286421680428e-03,1.626283589178245106e-03,-1.794947450084344222e-03,5.939145481389971996e-03,-4.266372819517444512e-04,-6.037819104306969137e-03,3.348868539307542271e-03,-5.447479935926996357e-03,-7.937583570217616677e-05,1.157511476076373809e-03,-6.584142164169371749e-04,-2.897960967183493657e-03,-6.863683334172770815e-03,6.074161262977982286e-04,7.028037168190004241e-04,4.684922323806692615e-03,-1.768568371211536212e-03,3.328770041522815994e-03,-4.920653820004120688e-03,-1.029983211487006667e-03,-7.156260592449951085e-04,1.222500339341608695e-03,-2.924214762452508314e-03,2.448469998229624929e-04,-6.125968696906724251e-04,-4.450696140583576543e-03,-6.394903338946505804e-03,8.495781985577585682e-03,-6.179001009166634837e-04,4.363046649936195773e-03,2.772115194104337980e-03,4.976210888783303039e-03,-3.777740356697054623e-03,-1.602766665721805199e-03,-1.290464794960491379e-03,1.631860861996411701e-03,-5.209581002061682009e-03,-3.442865600275215633e-03,-2.539015241196546178e-03,1.960260864564050687e-03,-4.942574332666216548e-03,3.467653241985839581e-03,-9.137510131474440439e-03,2.829736715200712252e-03,9.700106938124623129e-03,6.222301995268797025e-05,3.178892126066510965e-03,-3.151034679341945151e-03,1.387767154950812635e-03,7.034150917184323146e-04,-2.300370942650275044e-03,-3.468632690312592384e-03,1.007864806956379998e-03,-2.124063641288511696e-03,3.396247249888766171e-04,5.648649990999559702e-03,-5.345876289540496019e-03,-1.340740454532797618e-04,5.622628907586368213e-03,-2.795566061664661204e-04,4.181299001029972306e-04,-9.006106465972395485e-04,3.999462584572062267e-03,3.461275259540547676e-03,-6.680957893197607411e-03,5.476291306734493809e-04,-2.002948355493841071e-04,2.447646974774549643e-03,9.914973340390497141e-04,3.845237685245735202e-03,7.808084344882364278e-04,4.764157322419552629e-03,1.285591738079346329e-03,3.561037544516548574e-03,-3.359864809656486553e-03,2.271541689162566609e-03,-5.175805183953040636e-03,-2.212440606339399513e-04,-2.787891918085265604e-03,1.416675754225617126e-03,4.322151331249723602e-03,1.974373922628598708e-03,-3.932741059151222129e-03,4.375376193486411186e-03,1.226619490396479040e-03,3.414430779149061658e-03,1.462293550285664618e-03,1.787019736212461154e-03,-4.077300042032760800e-03,1.795125235207359945e-03,-4.628898813250517490e-03,2.121579549372614414e-03,-2.028765470242215475e-03,1.118805043711563509e-03,4.310171666352410544e-03,-2.923138157835027638e-03,-1.980305737983169279e-03,-3.246038984948019547e-03,-7.582998749114291948e-03,2.984441895680060505e-03,-2.571814783070192414e-03,-5.367480292037356965e-03,4.154993283425494933e-04,3.440106379355834573e-03,-6.368666049142703185e-03,-2.889243292066595841e-03,-4.552380881961968703e-03,5.906235366111033981e-03,-3.931634196465823468e-03,-9.016698517905008138e-06,4.802800843190712862e-03,-8.271348376023896680e-04,2.757983897728925144e-04,-1.053722538927860013e-03,-2.043886839061162530e-03,-3.003458147624496043e-03,-1.910077355016416480e-03,4.896107777631832428e-03,-4.051911343913978947e-03,-4.894936579678134392e-03,-2.957281094174368796e-03,1.114289084363345814e-03,-6.254233659137063174e-03,-2.478142424779338458e-03,-1.949392314596915454e-03,1.010038806271445350e-02,2.210569714792072222e-03,2.499005240119775949e-03,-1.694571030328656872e-03,8.355835350708357145e-03,-3.161598390579907231e-03,5.106429066493475659e-03,2.056300550351295407e-03,-3.608712549414550344e-03,-4.288578818014737899e-03,4.735436347504596265e-03,-1.134795219833583269e-03,-1.244300955500438803e-03,3.978758313868503010e-03,-2.604202415873648792e-03,-7.214013078170075470e-03,-5.281573015081881400e-03,-2.874984402228129396e-05,1.862833770778490232e-03,-1.691171011624666718e-03,5.274857370515546179e-03,-4.221061019977168267e-03,2.768400211397524773e-03,4.457400349303693859e-03,4.647455753258921481e-04,-1.745684633216789284e-04,3.908342000994421105e-03,3.615151648533918884e-03,1.319018687887574520e-03,1.314953668887453020e-02,-4.397296404072330474e-03,-1.673406632952708370e-03,1.223290018603720268e-03,1.177300314500259867e-03,-4.204300117896560008e-05,4.284009208978337320e-03,-2.959348435796815618e-04,3.907750222444522636e-03,-7.420021964832524536e-05,-5.057494441107702500e-03,-2.556160063601692518e-03,2.206878491979379336e-03,1.729458996577468025e-03,2.713897095620614562e-03,-2.342129928036099388e-04,-2.861099176481242574e-03,-2.121554320951775027e-03,-5.259464771001594319e-03,3.183169735226940109e-03,-6.306886501707894242e-03,7.708763803936110812e-03,5.400460782050891216e-03,-2.410202957862492192e-03,-6.527952574787346252e-03,5.278700311260221692e-04,-4.118689207154643296e-03,1.185564764476278133e-03,8.519197515293802040e-04,8.498208577415280237e-04,5.885909989918986125e-03,1.013206709458168257e-02,9.760367018331977257e-03,4.728745628097850984e-03,4.032666339408711928e-03,8.930814313871654822e-03,-9.770277522848031318e-03,9.501115821856645971e-04,-1.837823302952522320e-04,-2.547647287475516046e-04,-3.397116259324008385e-03,-4.802710007783247102e-03,-1.946435745854449431e-03,1.247891778041675462e-03,-5.252463421268743597e-03,7.486794027855189250e-03,3.393081198441694982e-03,1.047701210404152709e-03,-2.412694181860836236e-03,3.846342799512262808e-03,5.683615253840045706e-03,-1.967205689313473137e-03,-6.519742305465518577e-03,-5.282071692048613239e-04,-1.994617015006392574e-03,7.526397762900759701e-03,-2.990573828458643543e-03,-9.975291698262375283e-04,-2.228928386441927749e-03,-2.868656963875749425e-03,1.728173521741053955e-03,4.088471273824374405e-03,-6.545994602868695578e-04,1.638074239495886444e-03,-8.189296034742422903e-03,-2.037857016885272383e-03,3.668595365550832849e-03,-1.943665742930687258e-03,-2.133667790256513555e-03,-2.033554545502615652e-03,8.504163018201278072e-04,-5.857283633386198111e-03,-7.116207231018030922e-04 +-4.244754636845790401e-03,1.814370183751027460e-03,-5.637415291172300467e-03,2.518962139139174598e-03,-5.660020744147198487e-04,-2.613782439886408807e-03,-5.659303821339869457e-03,-9.573795527756090093e-03,-3.578949863604211686e-03,2.954395766287181129e-03,1.426565442928849278e-03,2.883168470728276426e-03,-8.239493439285545950e-03,-3.394196275823122737e-04,3.523039459920337436e-03,-2.577783174330478596e-03,-1.774595730292542924e-04,2.440545095816881846e-05,-1.002248930589685026e-03,-3.329306441566379140e-03,3.019801472329404989e-04,2.628867257420627792e-03,1.164408095223703945e-03,4.037233763349597389e-03,-1.734574732593697089e-03,1.402612306885885106e-03,-5.585415137393799287e-03,-1.296067322134838128e-02,7.004793564211259788e-03,9.182367745657792817e-05,-5.595163298012266126e-04,3.186188144742806237e-03,-1.655025619499868143e-03,1.764490622973579692e-03,-6.412847474522495247e-03,-1.707809184254360270e-03,7.461290802065646951e-04,5.704781402064580328e-03,-2.933674876976547202e-04,9.135804978922847921e-04,3.042668760708262983e-03,-9.051957246048664748e-04,2.498631354434860331e-04,-9.063064335871322957e-04,-1.859670344625082060e-03,-6.480978236169744654e-04,-2.621452733134941020e-03,-5.484171645716907385e-03,-1.454725375745135338e-03,-5.670713805416126123e-03,5.484536391851066277e-03,-2.933535071661688438e-03,6.947176300378498769e-04,-7.222713937846361731e-03,-2.417930692265838830e-03,1.243980268679455636e-03,7.468524397231893902e-03,-7.822192745322614120e-04,6.581162488155814158e-03,-6.856081639279519059e-03,8.937090752647243105e-03,-6.603428442725910348e-04,-4.356595992315570424e-03,9.218895504541735168e-04,1.630420044919521774e-06,-1.606356526146892954e-04,-2.198069381282586861e-04,3.609962043008964859e-03,2.280428267043484256e-03,-8.491431774775323564e-04,-2.366837505508930829e-03,2.202370312203537697e-03,1.322806122772153710e-03,6.383674031235828800e-03,-9.159410669778782557e-03,-4.510177912002862749e-03,-3.169704719233267312e-03,1.675544187439757891e-03,7.443659536768880251e-03,-7.120128068012554663e-03,-5.393398734325999082e-03,-3.124329008574995657e-03,-5.824164916986821275e-03,3.710494984376385471e-03,-7.056853489262398475e-04,2.271424213634538685e-04,4.608012676808020090e-03,8.446591317648057635e-04,3.674328465982742986e-03,-4.529171887773542418e-03,6.609236212523467678e-04,1.714023660559661939e-03,2.274690814583878000e-03,3.184499890937975879e-04,-7.197273297424928995e-03,5.077690463494871978e-03,5.080444297239748372e-03,-1.981743116585405612e-03,-1.633832454757576423e-03,4.482697482143292202e-03,-1.743092123430035195e-03,8.507247868685596445e-04,2.339219424991358098e-03,-3.788308033536441199e-03,5.443341437888615970e-03,7.083592345723477507e-04,-1.986763757403330489e-03,7.716319018699028132e-04,-5.452016257003513807e-04,3.143546541277836455e-03,2.830326880758131120e-03,2.639613924766654168e-03,1.904293829460491872e-03,-7.096024499427331343e-03,-3.446400760998640476e-03,-2.530793117633555606e-03,3.488787229561868784e-03,-4.420447328708699240e-03,-2.469754578207764440e-03,8.815151315527689282e-04,-3.401939939923218775e-03,-3.074275986605284135e-04,6.661036123508478138e-03,2.238862606080540673e-03,1.247164873275220407e-03,2.749638655447579454e-03,6.865004589603693197e-04,5.845576591259202086e-03,-4.584831769723329495e-03,1.318724500203500866e-03,-1.653569478971522082e-03,1.334677055102736001e-03,6.719523861042693558e-03,-3.850379452937370897e-03,-8.976266228228073699e-03,-5.173165777601141865e-03,3.521876470977838066e-03,6.558201194301676792e-04,1.352547710143261203e-03,3.901638119150463283e-04,-2.055676532146103429e-03,1.010270785606737394e-03,4.937022905465415215e-04,2.459448887651183822e-03,-6.518644630793115312e-03,9.499978912052935414e-04,3.221819374411090571e-03,-6.911505083965231033e-06,4.861994634488394675e-03,2.953849842056295496e-03,1.278033887028515343e-03,5.113002795948501074e-04,1.518726448412385972e-03,-9.843548406939362991e-03,-6.240497327307756650e-03,-7.045329888696614043e-03,-3.036839890704331416e-03,1.649090890460934130e-03,-4.061573109438333141e-03,-2.673305845351033917e-03,-1.632141964931617395e-03,-1.884073718559090482e-03,1.185906118598448362e-03,4.560572344758125735e-04,2.421038400121373023e-03,1.587430776939157675e-03,5.112727314297422360e-03,3.588154167094196201e-03,-1.378513574980961979e-03,-1.318680722410606621e-03,-2.335360190566052822e-03,-6.383573646125173355e-03,-3.754458735504152822e-03,-4.617768328806099928e-03,6.329721536355166836e-03,2.108882529161749432e-03,-1.009214340686519391e-02,-6.464968740404289718e-03,-3.526912557225053962e-03,-1.816757746949501282e-04,-2.727573807631912366e-03,-3.405491391554118195e-03,1.012581096289242910e-04,-3.062874250446138806e-03,6.062210722061994565e-03,2.379744139303612959e-03,3.959266740663912494e-03,1.097627816213342898e-03,7.368180257140283240e-04,1.589386793076647464e-03,-8.802963730224641842e-04,1.337312275592788993e-04,4.961837868888285298e-03,-3.879860160203241898e-03,-2.314533832867299995e-04,2.625417738687549585e-05,-7.948607916959950573e-03,-1.215096266565917054e-03,-4.654987733530135258e-03,4.775604586463002427e-03,2.516303329909611898e-03,-4.361821356206667562e-03,4.114499201523773124e-03,-1.397694336433073998e-03,1.617046820535890557e-03,1.127440970450127762e-02,2.352869029694571942e-03,3.740484101635760221e-03,1.012795648415173479e-03,-7.730341387797932387e-04,3.044938846073915427e-03,-3.658212892283898340e-03,-3.097489694885488271e-03,-2.131509768874217947e-03,-1.686446266888107833e-03,-2.145524520382364152e-03,-6.799104851127491661e-03,1.203655288114038359e-03,-5.291585444731064167e-03,3.891385647279208340e-03,-3.474329693573786904e-03,4.179355437968338728e-03,7.740625556430412923e-04,3.635465726926599694e-03,1.487302690316999769e-03,7.761095544418155712e-04,2.487597492928518561e-03,1.048765447126769534e-03,8.785246961261627616e-03,1.110720526721824947e-03,-7.113930575641920712e-04,2.891090963505302258e-03,-2.640299234993034178e-03,2.106772451610798482e-03,2.050001008859205984e-03,3.976031414005258557e-03,4.237787153330252812e-03,4.506265782442071821e-03,-7.479116135541741955e-03,-8.811926906302439003e-04,-8.519408389867469053e-03,9.683427057063149655e-04,-4.010461581922565577e-03,-1.807949888443072251e-03,-1.819828466624868850e-04,-4.070015065230943654e-03,-1.905211090943825358e-04,4.583822939633539796e-03,-2.880819877063860515e-03,-5.893233082910015984e-03,3.509708586024264977e-03,-6.478707319200856718e-04,1.694443984359785644e-03,-9.794827975879161208e-04,-3.587367930779485764e-03,5.650926494068627716e-03,-1.895051192654042161e-04,-5.718040389700558036e-03,-1.128317716362130414e-03,-6.488483918294076815e-03,-3.911783286956895369e-04,4.269281430320344232e-03,-4.297279507213317556e-03,2.264465593879519574e-03,9.519840877215517139e-04,-5.127943676330778099e-03,3.938653599737086675e-03,-6.135959833536634538e-03,-5.534599939608492430e-04,9.657327060898923329e-03,1.415533086879016203e-04,4.595794709013847792e-04,-4.544986649135758158e-03,-3.147922747556240481e-03,3.812808237511650100e-03,7.491239368726154008e-03,-2.046394721514569869e-03,-2.508178545258286235e-03,-1.285881442596082183e-03,5.034103536916058330e-03,-1.409184854994009577e-03,1.595410245256499368e-03,1.677658280011285049e-03,-3.765008089907644941e-03,-7.968639609079418429e-03,-1.439663388472016588e-03,3.531942441798399668e-03,-5.204148067372491287e-04,-1.353620420424870088e-03,-3.790292538358627870e-03,3.581002681122320234e-03,6.883239922739890770e-03,2.017738734980654720e-03,6.697667063568535015e-03,5.202948319890203239e-05,-2.829557867701548105e-03,1.676511459957018106e-03,-3.269404901541118728e-03,-5.969198718164594845e-03,4.390320734093848608e-04,-1.478775826293524803e-03,-8.417292845491661755e-04,3.393433957450245776e-03,-1.433443096224105680e-03,-6.566460142380135118e-03,-1.138446091393417563e-03,2.272231769355184585e-03,1.687931602306033110e-03,-2.875573690741301588e-03,-4.492301337589760702e-04,-4.620370157176393157e-04,6.230629956251549847e-03,-4.442554258026813166e-04,-4.212547112382726902e-03,-4.826185451971305197e-03,-4.717418052079692253e-03,1.953683118182486262e-03,2.345342412783765328e-03,1.395292300003392804e-03,4.478624565689225232e-04,-6.242680770061177602e-03,1.286943219531827857e-03,-1.163734988640732995e-05,8.901877897624126601e-04,6.038064963404401282e-04,-2.220613447935033870e-03,1.380379437837550008e-03,9.957679768926541025e-03,3.724169004710967557e-03,5.137387889440613378e-03,-1.118095091432286486e-04,-2.976486449024609571e-03,-5.017784531016030586e-03,-2.588262623178743771e-04,-1.576684252291555340e-03,3.445279784773663898e-03,1.074603004555385946e-03,2.276709810720884981e-03,-2.745417054274102244e-04,3.848971773501536769e-03,-1.123003539973448789e-03,-2.181528371982937361e-03,-3.236495885567504567e-03,-3.063106195066683194e-03,3.450366787753824261e-04,3.684180743601786056e-03,1.787421339032253852e-03,4.680074089331832075e-03,-3.745489264934488693e-03,-2.971063272987845786e-03,-3.529187995064902907e-03,4.439581998322775745e-03,7.107965508115178348e-03,3.239111593179098102e-03,5.264306173710532784e-03,-2.681258045983615518e-03,-2.939089333983392789e-03,-4.567633380227510698e-03,1.331604732817569551e-03,-7.940235583949330862e-04,2.326454598339320733e-03,5.994344230184573200e-04,-8.516256561652798748e-03,-1.655829438541934692e-03,1.343639500300875369e-03,-1.038736026934850877e-02,-3.863772704855131853e-03,1.843615115084611816e-03,3.213625716879331623e-04,-7.343783891777343371e-03,-9.646300840505521749e-05,-4.967905255453750057e-03,1.292530022564431945e-03,-4.577115897822192983e-03,-8.494856236142513594e-04,-6.952065925699742015e-03,5.084244630056388922e-03,-1.112200099526224235e-02,8.551526839438562764e-04,1.119675692847430784e-03,2.851365966346561601e-03,7.981759664365898612e-04,-8.875853267488815123e-04,4.554522880180861440e-03,9.467291986811492458e-05,-4.522056296171516124e-03,-9.126483744422439828e-03,6.876297500609400469e-04,-5.220532851770016665e-04,-5.999780228466865782e-03,-2.115249239841289226e-03,-6.109568199723637051e-03,2.259620867418073078e-03,-2.382633865174031695e-03,1.794614697915818602e-03,-9.465552708851451185e-04,-5.022526788050903860e-04,2.202913712131120919e-03,1.205933407284825185e-03,1.720913491600641401e-03,-8.557255776236715253e-03,2.034294400954423548e-04,-1.976471332347798577e-04,2.795941024814010793e-03,-9.381799558206004334e-04,-3.345453636489031587e-03,2.012646471654304739e-04,-2.886636588795888497e-03,3.308042384150211828e-03,3.250103011705598251e-04,-3.621730623808304579e-03,-2.597203062746101469e-03,-4.237271489853790263e-03,1.378697787968264114e-03,3.114626142429233451e-03,2.054267052917050761e-03,-5.928023788717243789e-04,-5.479773465041561098e-03,5.915098961252475765e-03,2.155011224777039075e-03,1.452680068180233841e-03,-7.548176598565566227e-03,-5.069762073501607805e-03,6.214203713788079599e-03,2.261377637266010106e-03,4.077624891722404429e-03,-2.748435324045660558e-03,1.396855707079140696e-03,-8.092960446264924274e-04,-4.658816756548530506e-04,3.858899245568958233e-03,1.434674218702493981e-03,-1.056777796567715151e-02,4.457333988410092443e-03,1.707433339431083238e-03,2.329379158041793973e-03,-5.898496784661787836e-04,-1.182881667478894117e-04,-2.846618165456277997e-03,3.736384549594297302e-03,-4.432830681668714114e-03,-2.652381594105811084e-03,-2.584628536725199714e-03,-2.534620633236120239e-03,-2.555361750893203002e-03,9.189675974820762103e-04,-2.921554142630039107e-03,9.102728070453155063e-04,-4.302491186633291588e-03,2.010113027740487428e-04,1.608532987116106493e-03,-5.818410310789319181e-03,4.512944505984278418e-03,8.193874117777536934e-04,-3.353308164697003588e-03,-6.854757612096551780e-03,-7.534910116045989356e-03,5.542017267180256862e-03,-6.041805690889336979e-03,-2.257709129688225975e-03,3.352269434892337589e-03,2.730366935802285618e-03,-8.327217521191576698e-04,7.174172519130612123e-03,3.558400575959208469e-03,6.790484142339736628e-03,-4.833266570717511569e-03,-7.782094015736644877e-04,3.035005712753666434e-04,-2.260517316942962842e-03,3.063502294315079318e-03,5.180738174034379842e-04,3.383547774791845035e-03,6.961977100131254035e-04,4.583949113827725380e-03,-1.229492994138885013e-02,-7.681285609639719719e-04,-2.705809011094017515e-04,-2.920253956454477075e-03,-3.983551039942427943e-03,1.653695543666799462e-03,6.653955930877110229e-03,-8.604122178180722419e-04,3.240830439649074624e-03,-1.083937178258845713e-03,8.028777827690361578e-05,-2.204653076023843899e-03,-2.465593830775833408e-03,2.273616682087680613e-03,1.595514679772958543e-03,4.902422506485631243e-03,-5.516665529967833964e-03,-9.531323872300165659e-03,3.552290394417774964e-03,-3.149992368294374061e-03,8.950290155275476139e-03,6.100361465556037623e-03,-2.172247494634956238e-03,-2.920098402491195632e-03,6.214875298513470800e-03,7.935743754114795226e-03,-1.066097415271968947e-02,1.854134243163844866e-03,-2.337129947293329138e-03,4.283389053842032689e-03,5.432014648986885699e-03,1.670355018186051510e-03,-5.005802834182692627e-06,-3.704812185075554744e-03,-2.822063094415773465e-03,2.315075861778822987e-03,-8.917503395308098990e-03,3.660760414252223118e-03,-1.619971651641653179e-03,2.873094588646866576e-03,1.176375667929291857e-03,-1.970504507455598034e-03,-3.125449444021876863e-04,-5.175277493500501577e-03,-4.255263986610496006e-03,-8.074420324545278360e-03,-1.965731364776901469e-03,-6.099571444572723065e-03,-4.591199249361141779e-03,-4.282406948999470907e-03,2.334503066772129851e-03,2.966292432885021054e-04,-2.085493619491684435e-06,6.170344083017998560e-06,5.273274539082607217e-03,-1.485485816182248670e-03,3.219971260843404784e-04,3.155005370344929425e-03,-3.442209117606566740e-04,2.301490437392107128e-03,8.513720271686788313e-03,2.219147876922917834e-03,5.828831713340228496e-03,-2.740346850895732621e-03,1.820075694915027206e-03,-4.943679204836663044e-05,-2.534993929684746863e-03,-7.742466314644380577e-04,1.548276690589025324e-03,3.231211428501678910e-03,-8.100779312450419930e-04,-4.529075702241261263e-03,-4.237403109372689662e-04,2.059755221806847982e-03,4.855009744439397687e-03,-1.378099488753637206e-03,-3.888235977054031733e-03,-9.577772812397095797e-03,4.239338101593425993e-03,-2.584659655582048719e-03,-5.841303266692569017e-03,-8.171782319091488306e-03,2.469505770487249834e-03,-9.408581671198977536e-03,-3.131598131802845741e-03,6.155497876249545371e-03,-2.816855555403076448e-03,-1.302035978222782669e-04,-4.782680952854649115e-04,-2.531094958350105662e-03,4.238234011865144729e-03,-2.172337012798125286e-03,1.530604196094832075e-03,-4.162351259905035000e-04,-3.709437185525612125e-03,-9.599994919037813882e-04,-1.889743232734609080e-03,-1.523264397855183562e-03,3.095767693144639045e-03,-1.998216483316376645e-03,3.742533252091992065e-04,-4.468044333750353751e-03,1.135038899728862266e-02,-2.019969073103434424e-04,4.191996222510640038e-03,5.424917144377693415e-03,-7.306189442867149463e-04,7.689833875259860117e-04,-2.752465016221874051e-03,3.656166714903777860e-03,5.617653996944458640e-03,1.271630996310602101e-03,5.255079884481314752e-03,5.539302319981859657e-04,-2.534213470270364754e-03,-9.927436336733350825e-04,-5.976102738734999885e-04,-4.422035786667413010e-03,-2.139994831158055673e-03,3.586360657655993708e-03,9.390687240233557432e-04,-1.703798600886888065e-03,-1.196016296693982800e-03,-5.573236251325863408e-03,3.825779660193256906e-03,-2.542895179310836022e-03,3.281753779316488179e-03,8.433707859765537766e-04,9.603205676270180284e-06,5.079490250399515232e-03,7.334245504587508365e-04,-2.232717948024904621e-03,2.148762516670864754e-03,-5.481816662867788036e-03,-3.633238238143748650e-03,-5.420401259987663381e-03,-2.216729082728597592e-03,1.844054658999105421e-03,-1.186906145910762635e-04,-4.206303974615425469e-03,-2.381577719084212053e-03,-9.037155161902071451e-03,-2.224703738890389162e-03,3.710671689950170802e-04,1.982118345957882295e-03,-2.077357799853931080e-03,4.325133528089252985e-03,-8.445235561883805264e-04,6.399308112472594859e-03,-5.120189467939433112e-04,3.340502995104872169e-03,-7.992475932422388185e-03,2.859319900141338994e-03,-1.165356218598390895e-03,4.075122396390985606e-03,-5.866328860166468949e-03,-1.516532437012441331e-03,1.497725847549151402e-03,-4.272855588216637607e-03,-1.804214337454057701e-03,-2.851611262605188019e-03,4.356697989103446370e-03,-7.748395040588862501e-04,3.290900395171836908e-03,-1.153429243791052102e-03,-4.147766916458631853e-03,2.896738485041851999e-03,2.944497406202927544e-03,-6.930866881284700534e-03,-3.298440150470613105e-03,4.165135027550735496e-03,-2.689615863519014341e-03,-1.850246922231349499e-03,-6.092278883318539857e-04,7.474548780262640219e-03,-2.675539697226096084e-03,4.834366949855674681e-03,-4.413883049831269709e-03,2.856799617888627126e-03,-6.692442957765629662e-03,-3.084399820840166275e-04,2.635406572757549148e-03,-6.326434537155622637e-03,3.976199264780513193e-03,1.254353730285029649e-03,4.316755255744552516e-03,-4.485487290033450189e-03,-2.615669292562704251e-03,2.612451897284952945e-03,2.511453395347783887e-03,-6.549112343281764288e-03,3.116674140880384448e-03,-7.494964152112635865e-04,5.219399989254626566e-04,3.479058556650442471e-03,-3.128826442384471528e-04,-2.139102468625161610e-03,4.228534302690690702e-04,-9.121936991447920267e-04,-1.295468762892087317e-03,6.900820830457192814e-03,6.459689517866361134e-03,2.413007775922884103e-03,9.932161745433779054e-03,-4.124925248361910671e-03,-1.844645298970130996e-03,-1.641737745823712569e-03,-1.382339143345938425e-03,-6.012985767077035776e-03,6.871483124579946464e-03,-9.042425808219702738e-03,-5.625167357837656135e-04,-5.097703111048164024e-03,4.952767591691792197e-03,-3.700288068084494134e-03,2.898289473835833057e-03,-7.170719520874139054e-04,6.740189572555652575e-05,2.199548880928798179e-03,-3.747553209639650079e-03,-1.364834109392858586e-03,-1.532474455154667460e-03,2.854564902850819687e-04,1.575165283313826074e-03,4.952393136422782172e-03,-1.923923891834944345e-03,5.156618372822266080e-03,5.718067407223247599e-03,2.191691131855766275e-03,6.135477314733151291e-03,-2.820192289670789970e-03,6.825545927100707322e-04,-1.524498160394408854e-04,-1.155999575908847089e-03,-8.169372471878374314e-03,-2.187827328171589990e-04,6.521220586267094214e-03,-2.748454202563354546e-03,-2.625860730211004770e-03,1.444807471031894254e-03,-1.139519996573236339e-03,-5.328908628138122501e-03,-5.153123298114130509e-03,-2.839370127191163766e-03,-3.948024685810011709e-03,-7.183270287097805878e-04,7.424820866364994013e-03,-7.954552747485847675e-03,1.906762597097350076e-03,-3.751295511437238727e-07,6.872210927815568422e-03,-8.808759603885503008e-04,-3.816465102327710329e-03,4.466701201611343944e-03,9.729408762963444529e-04,3.740727231192068208e-03,-1.782008183277775191e-03,1.012529372899172988e-03,5.590968903926091943e-03,-2.980153082649404390e-03,2.597099847249394623e-03,-7.645665893504294264e-03,-6.126102265559454224e-04,-3.888985156882859536e-04,4.953555107714596902e-03,6.870051819150207149e-03,5.499985619050509408e-03,-1.122975244465720902e-03,8.161539865712927767e-04,-1.718736750429630551e-03,1.164149943976047676e-03,-6.348164280612233860e-03,5.645900613973796854e-03,-3.172922744041212217e-03,-3.894960025600783149e-04,1.332512876798002798e-03,-7.617208247761144378e-03,-1.766968334423036410e-03,3.579899507211116959e-03,-2.232029592858509313e-04,-5.555680081830434262e-03,5.203465895850656678e-03,2.897241182243144673e-03,7.107735050839671456e-03,-2.304048484829815727e-05,-9.382304564638587569e-04,8.304226309079619159e-03,9.314697724575045183e-04,-5.009822425355675742e-03,4.669020629797967538e-03,-2.651164329787659979e-03,-8.628327936046537028e-03,7.022292974973747860e-03,4.858507517776218358e-03,7.653751137026152014e-03,2.261466216680022619e-03,3.780185458355357284e-03,2.197544816152360164e-03,-2.339982363314907672e-03,-3.265026229645346875e-03,2.893202853632785543e-04,-6.710766374867360197e-03,-2.955217525281235609e-03,2.159114923571404422e-03,-1.934960448070760942e-03,-1.250246660892617755e-03,-2.333304716269516809e-03,2.149093563602303206e-03,-3.246678623853766626e-03,3.145183598060183588e-03,3.833944127293973259e-03,-1.717038196950675328e-03,-4.628809465473440396e-03,1.358501507053567993e-03,2.423820345600850162e-03,6.496782959701874818e-04,7.188378260008603665e-03,1.842254366368146958e-03,-1.265780320568194589e-04,2.812391824149712040e-03,3.779172060686786239e-03,2.942672503974840068e-03,5.706858847639317660e-03,-3.361372334989268153e-03,4.995860337090964054e-03,-1.809319286458130208e-03,6.563778632913677344e-03,2.280102338790634486e-04,-6.532399728514925183e-04,5.533737334082615195e-05,-4.893537521419993874e-04,-6.206425679104771338e-03,-3.082552985593557410e-03,-1.040889418253210241e-02,-2.596606779398892757e-04,-1.523417674124831044e-03,2.004684826446812094e-03,4.401932272349130880e-04,-6.809664891090057640e-03,-9.290146325660981683e-03,6.587974226464579641e-03,3.542184341938255359e-04,-7.926624766679777126e-03,4.357345989276133549e-03,-4.058628217658838758e-03,-7.591478233987535322e-04,-5.689401668964759635e-03,-5.691719886558894471e-03,7.159715543339186666e-03,-3.847576982376860102e-03,4.026059385523750311e-03,9.938894627161303560e-04,6.487443464914696874e-03,5.293384245937162932e-03,1.717383030602911758e-03,3.687835901630109100e-03,-2.151707657966321716e-03,4.210007480127325253e-04,3.626570934939678595e-03,2.755391616809081505e-03,2.008093077259121267e-03,-4.280734992999328178e-03,-2.327108406070232602e-03,5.348409545130079898e-04,-2.849258675936757433e-03,2.319045787534839472e-03,-4.876565790049573745e-03,1.526858018754909813e-03,7.088869878346933627e-03,-3.275820483812621510e-03,-1.483683413073295368e-03,-4.704297265692611654e-03,-6.076381715655821553e-03,-5.713529563897378621e-03,5.849117357204720695e-03,4.500240368140256964e-03,1.993763398720991946e-03,-1.779602058413933766e-03,-2.964998114944750272e-03,-1.537517205118511766e-03,5.278365285142162626e-03,7.344824903521426310e-04,-1.420949020924460859e-03,4.314484284004992641e-03,-2.671016617741790462e-03,3.710417453202264054e-03,-2.059868599393084934e-03,1.799809751126999445e-03,-6.955739933943511566e-04,-5.058118980588110179e-03,-2.828203275083891050e-03,-1.833497875957318521e-03,1.580229501260031581e-03,4.318559468746876301e-04,-4.632691243974161599e-03,-4.918063977251676579e-03,7.978922624830681390e-03,2.807365792802196322e-03,-1.465819122763622985e-03,5.009677038861908190e-03,-1.560953997467050920e-03,-6.817932030239854529e-03,3.392855509209601744e-03,3.672832993982274100e-03,1.714015676763900719e-03,-4.119693655960729971e-03,6.661683555867444796e-04,-6.808098929793483366e-04,-1.159404517334696426e-02,-6.564927415567827244e-04,-2.392182098228518616e-05,2.801249158571122392e-03,3.937122773417793715e-03,-3.574602680120276144e-03,-6.263551880829628001e-03,8.310348428649474593e-04,-1.103329647950243055e-03,6.873840383040773347e-04,2.486536772026439975e-04,4.311596072798187622e-03,4.199447755999776051e-03,5.659456379898526691e-04,-8.595108984091211473e-04,-4.405073340182160020e-05,-4.110129896088019451e-03,1.763482277395306838e-03,5.704102983392167134e-03,7.896066512382496220e-04,2.808163141484907796e-03,-1.777407433686517524e-04,4.641288632544630748e-03,6.081219571004724093e-03,5.739878229124543031e-04,6.161734592156127175e-04,-5.405207370977530359e-03,-2.825617231067930300e-03,-4.110026355584336195e-04,-2.020776634571422488e-03,9.747688415299245093e-04,-3.741347161297979215e-03,3.901869262021254604e-03,4.577837913300749988e-04,2.892192116253322100e-03,5.188071992539493131e-04,5.499227567768563479e-04,5.762246461051639089e-03,4.806217307476295074e-03,-4.692679804448891996e-03,1.504495137773180459e-03,-7.421759034110748943e-03,-1.184661566542924427e-02,-9.766763197824634632e-03,-6.303668555832427946e-03,-2.190071676450840686e-03,-2.682119133177485702e-03,7.810372233759436608e-03,5.620739839851181686e-04,5.236901962710221623e-04,-1.393217990660232906e-02,-7.595506383072811668e-04,3.277216577513350623e-04,-2.722900031775676594e-03,3.781229425105929725e-03,-1.316407211157503932e-03,-2.817991928313649634e-03,2.195291024428970388e-03,-2.207693270361796474e-03,-1.274571512320531001e-03,-9.330777322558126644e-05,-4.215291462706643316e-03,-4.768956542200548866e-04,2.692165692465541341e-03,-9.226680866096285093e-04,1.116395963897117349e-03,-1.616674939783183584e-03,5.870811778109667279e-04,5.606414427242883101e-03,-4.120451688162444365e-03,7.212639105637552381e-04,4.416054895528136875e-03,9.750371417007689528e-03,4.868180854476694859e-03,-1.413671671184706363e-03,-1.379948083720419739e-04,9.298006508006585302e-04,-7.106499182783087990e-05,-2.388298792793646774e-03,2.478534065214612909e-03,1.502576863239386915e-03,1.188773893589955893e-03,-1.415781426195430797e-03,6.498410665993984391e-03,-1.532927701289221473e-03,5.479220080568964618e-03,5.338966395195592291e-04,1.815096839260890748e-04,-1.907963591346218670e-03,8.906305764279446799e-03,-6.964762163644943726e-04,-1.982892765054320664e-03,-2.846855614605070094e-03,-5.289143588611394491e-03,-7.250630801151364963e-03,-8.277067621467210090e-03,5.744980654405829230e-03,-8.834199475025936166e-04,-6.356168670025273693e-03,8.740538039150293420e-04,-2.545950633176502931e-03,5.792515194702579613e-04,5.143679798986748467e-04,3.637242898665698880e-03,-3.962817080427952915e-03,4.675721855139764968e-04,-4.483586516733729932e-03,-1.945566514850028631e-03,-5.546157383154598237e-04,4.325314985367676585e-03,5.751359172100629479e-04,1.589941252852946740e-04,2.311964533053196321e-03,-6.191373121589886612e-03,4.380774000253994348e-03,-7.195743098005339192e-04,-1.254141693930187467e-03 +-4.011190479730338335e-03,-4.248652605526495704e-04,5.602158023433947802e-03,-5.841452699828287784e-03,1.141937976703647634e-03,1.702938669412549133e-04,1.132855429771144340e-03,1.516251632389390780e-03,6.049638143041972775e-03,6.089523546137489730e-03,-9.330605714195147962e-03,-2.024150517270188602e-04,-7.418033974929328549e-04,1.417864571307929800e-03,-1.838318216469466836e-04,1.485399393053556377e-03,-7.369660068975906683e-03,-1.983311177084323088e-03,-6.727438459125915753e-03,-4.312767251233539084e-04,2.779834927393850207e-03,-2.500428377048239705e-03,1.261375993987135565e-03,-1.432662918821457848e-03,6.999734881434321876e-03,-5.182906056096945810e-03,1.474658844402427539e-03,1.680656724414484552e-03,1.267521443965554610e-03,-3.645575997325135095e-03,2.750413408205234968e-03,-7.557106660393349447e-03,2.160098203272438865e-03,-3.130355438471219432e-03,-9.187545143203314744e-04,-5.906966083195458158e-04,1.566876587841232321e-03,1.321585418800523245e-03,-6.896150116913773130e-03,-2.122926296107457804e-03,-3.244286320999500723e-03,1.836258883479035707e-03,5.383068302880245374e-04,1.459919716655463549e-03,3.199115255038940692e-03,4.917204178524592351e-03,5.828790693963342880e-03,-2.459650482203809725e-03,5.879025798518430594e-03,-2.827544374166316397e-04,1.629675930863566267e-03,5.067673907057916594e-03,3.328615245496643026e-03,1.232044957830977358e-03,-9.626270929844005318e-04,4.926064547223873817e-03,-3.617453530943783805e-03,-1.638263965815238378e-03,2.013545705612643667e-03,1.819473509101763404e-03,-3.101586855279137803e-03,3.288964962699392116e-03,8.058715996405615284e-03,-8.382424200092906952e-03,2.239940096034008149e-05,-5.702822739156770048e-04,-1.703355190632996731e-03,-6.865305201525303972e-04,-7.638052155461795556e-03,3.231537643431854710e-03,1.653643108948566094e-03,-7.048777428316656442e-03,1.009173901826121086e-03,2.243167523207967361e-04,5.114826474570908013e-03,4.566291167927604214e-03,7.405449183036358135e-04,3.901620190143342652e-03,-1.309385405975861151e-03,6.733710360650030195e-03,1.359721628658257546e-03,5.531212446178360512e-03,2.386200801929502183e-03,5.263564257180395126e-03,1.988329401069360066e-03,-4.727926551587820908e-03,-5.423037166680437157e-03,6.100394715333113576e-04,8.348066840577414438e-04,2.017952576486557216e-03,-5.060030677812397439e-03,-1.254091169195371185e-03,-5.439898588139919014e-03,-1.600026998501424391e-03,2.501511995844280835e-03,1.656909187060960284e-03,1.726232137024159667e-03,-2.806407437205629685e-04,5.118117103457379101e-03,-5.456289302423095481e-04,-2.090364158990374189e-03,1.186345688698104512e-03,5.292553321128326375e-04,-1.481845408468408266e-03,-2.496555901040298057e-03,-2.410055949686453532e-03,4.403361466140480115e-03,-1.965552971314441389e-03,4.447106826468433770e-03,4.717120286941565988e-03,-2.968846511384547800e-03,2.350801917080679645e-03,3.939718658934943107e-03,9.226618419157480225e-03,1.419322276107737573e-04,1.198458292169052091e-03,2.274667434771528423e-03,3.909397025108742561e-03,1.836111560570106039e-03,-7.265649224061112438e-03,-6.753879783286333323e-04,1.802459105134822373e-05,1.029719102039919169e-03,4.339230694690609201e-03,-3.577964224637291617e-04,-2.184565711661893769e-03,-4.716128145871975944e-03,-9.638100894826043263e-03,2.082556556625658490e-03,-5.450026900100175126e-03,1.582009825321585485e-03,-5.659022231450516402e-03,-1.071562044639295941e-02,2.545001538803219783e-03,-2.665390507551236837e-03,4.668438104454185333e-03,-1.307344388840842985e-03,2.743171477387548740e-03,-3.029128332317037459e-03,-7.329363987785762725e-05,7.672793994912610729e-06,1.530030700050040654e-03,-6.720242189412464415e-04,-8.459641581524398679e-05,-1.182367768107723616e-03,2.796120111479737363e-03,-1.081169134833307767e-02,3.104186656094210742e-03,-3.752766288261704265e-03,3.007631654090637315e-03,-4.232368823553746490e-04,2.982455760255871453e-03,1.330017405675314700e-03,4.821685858094456635e-03,2.425341871363497978e-03,1.555351454258059726e-03,-2.642537654617571879e-03,-8.782871972262718289e-04,-2.094595996622683563e-03,2.281788442842345131e-03,2.493699718007813190e-03,8.139485279653494929e-03,3.445438891898577015e-04,9.152725094072837854e-04,2.739661741194065006e-04,2.043179113218400369e-03,1.003030921741127242e-03,8.478408553336170715e-04,-1.947831940549732410e-03,5.496445271069702251e-03,4.960965184009466858e-03,4.216957201347236103e-03,1.365926128746594928e-04,3.160168015606743853e-03,-6.156788160854963741e-03,8.169237030631957674e-04,2.724182746958846569e-04,8.081631862086935403e-03,8.891068617342370167e-03,-1.450360398980247425e-03,4.137582526186429389e-03,4.866442215509968715e-03,-5.278516044032934441e-04,3.705256599807932576e-03,-1.141342296962768229e-03,8.584434890472458085e-03,2.506969358903150748e-04,5.906403699255344773e-03,2.384336456481616750e-03,-4.042784260111253504e-03,-1.814162777304065537e-03,1.506760214944458933e-03,-4.977996874177227291e-03,1.942705432226992778e-03,-1.277436801322032450e-03,-5.474651951074932760e-05,-2.031594713027741299e-03,6.147179702260376598e-03,9.242969802292336267e-04,3.283080221725259967e-03,1.528776487626948939e-03,-2.154543719229401379e-03,-9.174431506264993721e-03,-5.578140448724790493e-03,1.396902129495656165e-03,-2.319237599890884073e-04,-2.043079213934606737e-03,1.277624731754988191e-03,-3.263623953265190093e-03,-5.305239099116044153e-03,-1.302010149355159029e-03,6.240149974644371676e-03,8.693796359502342988e-04,-2.365230091087532766e-03,-1.463269216058638760e-03,2.805825374588336116e-03,-4.931064510560688972e-03,7.132446414818666798e-04,-1.649487130775445206e-03,1.952409233744623702e-03,9.920439359357130071e-04,-2.625209359167373236e-03,-3.123115595613532112e-03,4.854657926550910718e-03,3.347935042298321546e-04,-4.706993332861907769e-03,-6.027400719037857065e-04,4.178861664490436494e-03,-1.033109058582178455e-02,-1.597551113386401619e-03,8.296838939027009968e-04,-3.469875421317004591e-03,-6.114564696122243466e-03,-3.959177763220028332e-03,-8.151330126378780738e-03,4.550878513730416235e-03,-6.558368242290601828e-03,-6.312031994393184180e-03,3.656736753301334346e-03,4.172870893242092670e-03,7.033552844982305687e-03,6.605530928269433191e-04,4.851884746528720778e-04,-2.853533987161383564e-03,-4.055945279277023419e-03,3.379743928729715685e-03,-1.616381418857593642e-03,-7.040754807619261160e-04,3.125545579676370896e-04,3.567263733501776016e-03,-4.745092320879139465e-03,-8.290156134774601332e-04,-3.134976024341306136e-03,1.645851089497897199e-03,3.801178001630524817e-03,-8.074395504943921581e-03,5.536227181507813455e-03,5.166394752018389769e-03,-2.981103510044639691e-04,1.459368416739448672e-03,-5.938930675821506647e-03,-4.974257031775634365e-03,-6.222110046516107036e-04,2.135255868416684015e-03,3.924824500963314602e-03,6.584457094970290686e-04,5.911450745066536196e-04,-4.265217420698289540e-03,2.175308870659360076e-03,-2.182283121227110087e-03,3.313103839017065427e-03,-1.219835686018344622e-03,-2.627993772926975804e-03,-2.661820540894927877e-03,4.215778429875876102e-03,-8.747058311402565456e-03,1.071236612451191474e-03,2.062040792155440862e-03,6.172818353323309033e-03,-6.616170508451312514e-03,4.059727091219547494e-03,2.415431847100682190e-04,-1.016373090899783029e-03,7.870601695118651514e-03,3.821938846635188590e-03,-1.601488512188733136e-03,1.293855149865633146e-03,2.110462352239445092e-03,8.183164583075660387e-03,3.789246362582490094e-03,-3.716736902834547355e-04,5.983900432160594966e-04,-3.555041858693299729e-03,2.759005080939648351e-04,-1.290543706305375413e-03,8.847373418493018407e-03,-1.265152116307862069e-03,-2.253241192473513267e-03,4.809225029046165951e-03,-4.076538965550882514e-03,2.171071525224312288e-04,-4.544524109184253959e-03,-1.739487115389213114e-04,1.168725119459880588e-03,3.232806240471217119e-03,4.083742048335158373e-03,-1.656898982794817498e-03,3.848855007820111297e-03,2.770662557429140081e-04,4.859962064665759515e-03,1.147144856721514619e-04,1.047600499933481512e-02,-2.171840502074272750e-03,-9.760104911611887618e-05,1.682307249148705212e-03,-9.992705783433131466e-04,-7.846494867373009219e-03,2.701762932563284755e-03,-6.732299019707296307e-03,1.895192570627962821e-03,8.975536665254720122e-04,-4.119837419856158846e-03,3.241149141752914555e-03,-2.618717382614355136e-03,-1.009981730407723786e-02,4.304796189083700576e-03,2.567032197851718857e-03,2.696618779414448365e-03,1.068697486608083435e-03,2.249931493231085034e-03,-2.672331106044389427e-03,5.621545205063075389e-03,-5.646214452431273963e-03,3.368655802519515598e-03,6.630998797903319732e-03,-4.565872310514936146e-03,5.881434800345137224e-04,-3.643122137870996678e-03,4.665309729469672463e-03,-2.327746443433824711e-03,4.567065546938138369e-03,6.758653204338455761e-03,3.393577505210450349e-03,-6.260968615678440090e-03,-4.234175578882430776e-04,-6.459575902240342069e-04,-3.659903040832376483e-03,-7.989399098055488535e-03,-2.473297606522551102e-03,2.031889910539964872e-03,2.925248405581846838e-03,-5.271031216574236650e-03,1.599073174865751825e-04,3.389539702935015324e-03,4.454557538257263651e-05,3.956755579593179174e-03,-1.694609236545927509e-03,3.931202520482774895e-03,-3.196800167365673045e-03,-2.531674763571568963e-04,2.051478502189801271e-03,4.140779082613186071e-03,3.888736580256075236e-03,4.297311014301548500e-03,-3.522853943070474846e-03,1.196305553043532999e-03,1.037268521666688710e-02,-1.076295727522941746e-03,9.512642897623477473e-04,5.276445076049096974e-03,2.339844947974448284e-03,1.221455073195905697e-03,-4.506955829397235776e-03,3.978048945437873476e-03,-2.001526238107689815e-03,4.430030223606359722e-03,-5.676948155900377697e-04,5.120081222141200684e-03,-2.457405703260669497e-03,3.344074206731250439e-03,-1.523950954447099741e-03,-8.914442728444101766e-04,1.917225438936899246e-03,-1.752184275325468533e-03,-1.114740719924371118e-03,-3.423667421362678719e-03,2.815788232385221367e-03,7.961031192635702886e-03,4.909298247374811915e-03,5.044303029144904353e-03,-5.692301784480254499e-03,-1.867658075347716469e-03,2.136413410490530223e-04,7.248024079733282089e-03,-6.272362198670464271e-04,5.547115954416490533e-04,1.637201309012476869e-03,-1.254657657637176221e-03,4.929593870819037014e-03,2.918910752294686653e-04,-2.570564172388285838e-04,-3.419880551435839841e-03,-4.342215401404101761e-03,-3.143078880543331063e-03,2.319552073869632965e-03,3.553088313014081162e-04,4.125812052258787978e-03,-6.589581144705875491e-03,-4.681758088716910828e-03,-7.000438924113645519e-04,-3.287757475257907882e-04,3.340876608347629652e-03,5.163556934336484619e-03,-5.036212204244499765e-03,-6.230477703279998364e-03,4.966423080303815222e-04,5.705287876986904830e-03,2.119016378646446704e-03,-1.100188040303121725e-03,2.405544410988978872e-03,-3.683103469098485388e-03,-3.380703322056769692e-04,1.569185430476361005e-03,8.130167550421757644e-04,-7.919685115142560455e-05,7.729976817998693685e-04,-3.099917832282071597e-03,-3.704303878787111592e-03,-3.315455599596365318e-03,1.381901101641853837e-03,1.305270514620720471e-03,2.627813317188914134e-04,-1.028664269908023546e-03,1.690799993392213532e-03,8.209302890691046878e-03,1.673809217539302171e-03,2.755753510279028776e-03,-2.478798958970745633e-03,3.756293575378483532e-03,7.003658918462024596e-04,4.354362869659687656e-03,-2.534174101080855206e-03,9.913293984939713227e-05,-5.165204816646347397e-03,8.650253524366690802e-03,9.346401032655253180e-05,9.834914343477279761e-03,-8.824515985767025089e-03,-1.026745327840543473e-03,2.077413595053882213e-03,-1.502368170169725119e-03,-1.008256487710301741e-03,2.371991432319463158e-03,2.460873490177587029e-03,-4.091887308662217637e-04,5.902650421160878479e-03,-1.543636365956943925e-03,-3.396007497662624584e-03,5.255512360324319371e-03,1.266894515203464099e-02,-6.964871771782962274e-03,2.133208810432553684e-03,-6.806278222076688660e-04,4.002032887599890273e-03,-4.665512148712158171e-04,7.666894158783731387e-05,5.991241898354392192e-03,-2.082731123693007651e-03,1.521930818647873130e-04,1.684194277822194039e-03,-6.549852574806939130e-03,-3.335428719328327788e-04,-6.952799861671926478e-03,2.671940585099135518e-04,-1.609249399092841553e-03,-7.748736379372222864e-04,-7.144523656448264516e-03,-4.175304831188978230e-03,-3.187770505687647499e-03,-4.624049420772386419e-03,-5.642018167766009798e-03,8.291901467719123807e-04,-3.476688415147859146e-03,1.292211867315475656e-03,-1.804741978631599049e-03,-1.177585739721705204e-03,7.249811513352303477e-04,-1.800793840583304211e-04,-1.412235198824952995e-03,-3.746294101370192461e-03,-1.070483286817600679e-04,2.736772500627159682e-03,1.140257829677850283e-02,-5.818709737841033965e-03,2.405389365787348292e-03,9.400407835998777530e-04,-6.605367692404231182e-03,1.556820209802314619e-03,5.760999053703363742e-04,-1.066766009941689749e-04,-2.722833302560456314e-03,1.053051985941918373e-02,4.673010646879620193e-03,3.782325909247854535e-03,-2.603953080945978216e-03,-2.514287263192891125e-03,-5.270144730804901881e-03,1.163291274770745544e-03,-2.700452142662899610e-03,-1.008715240769702572e-02,-3.554777481355693219e-05,3.629507423775147051e-03,-4.142956545223807664e-03,2.440795053796303727e-03,2.381510578029619272e-03,-4.779496041504788587e-03,-3.165174361501765354e-03,5.186761378692663835e-03,9.900415269032125654e-04,1.813636222712087251e-03,2.168287178194197270e-04,3.229577925191017408e-04,6.259562848766568946e-03,-5.603092575120274810e-03,4.588154381989224644e-03,-3.547003692916546151e-03,-1.204840681460988324e-03,-1.167895660280216311e-02,-2.023691752837009084e-03,3.271083561407649902e-04,3.364943565583215692e-03,-4.388115313204264331e-03,-2.911733300712124588e-03,1.415544989914122812e-03,-4.101223732794001889e-03,-5.493963603621395200e-03,-7.960424592536160995e-04,-1.275274359770723048e-03,6.728354015858099314e-03,-1.553725555123776315e-03,4.028940755716690567e-03,4.626563812135927288e-03,4.677757512613086796e-03,-6.243347387805711591e-04,-5.333172016981182692e-03,-2.886886135953613784e-03,3.332203485022147606e-03,5.247068384179361632e-03,-2.851961697949820847e-03,4.558840791712885122e-03,2.006845828331917971e-03,5.550357951273063913e-04,-5.218704628638587591e-03,-5.775086134794262145e-03,4.443716168880913926e-03,-3.561704161081934855e-03,-2.700358397057477100e-03,-2.735552688923616974e-03,8.514838583762349492e-03,5.271786304677605043e-05,-7.622572956176410603e-04,1.800350275391210961e-03,5.707123550405441420e-03,-5.685673547218224322e-03,5.368031669446008064e-04,-5.616740092666157140e-03,7.792190692170969032e-03,2.590907168694650195e-03,-3.064163968272514207e-03,1.167043981561949810e-05,-2.838267558972058097e-03,-1.011727500172407098e-04,-1.878640611791924844e-03,4.993195153398275604e-03,4.723934626416736028e-04,5.433083340182506306e-03,6.523172301228876736e-04,-1.105998427445231171e-02,1.112315996364224855e-03,5.861160277388959700e-03,7.194923884469908975e-04,2.647740840521363003e-03,-1.372703742116896872e-03,6.343903104078647522e-04,-2.017814784833395474e-03,-2.266058273940988431e-03,5.967784583744451497e-03,2.986592990230109001e-03,2.446100408748830019e-03,3.438327751226513858e-03,-1.977970336511456189e-03,-2.558658305946557698e-03,2.872609871270016997e-03,-5.530562358960707556e-05,3.026335778417754523e-03,3.730021821393427698e-03,2.331058470073851807e-03,-7.610982808152835961e-03,1.131855766614858153e-03,-2.720865630696044698e-03,1.195226585593783071e-03,1.379235397868210956e-03,5.587197072923714286e-03,-1.369833274328561808e-03,8.343889797783173023e-03,8.428103528921114529e-03,1.938805657481893624e-03,2.271764963955038522e-03,5.537983679753070466e-03,3.105359369432939779e-03,-5.676147707380467013e-03,1.927361942668791165e-03,-3.371219099807626959e-03,3.023253773302146327e-03,2.520633505081534744e-03,-2.381164177299006490e-03,7.446535210477426940e-03,4.067087147267106325e-04,1.718842774647826510e-03,6.280089366256946630e-03,1.161992858709211089e-03,-7.970651040290207406e-03,-4.093120668845090862e-03,7.095440556806226510e-04,-1.381408698320159712e-03,-4.161864587144025601e-03,6.026853517734102536e-04,3.908306412954013279e-03,3.173437728192517442e-03,-3.190640828534052793e-03,5.977790881736992634e-03,2.659343069312803103e-03,-1.513570778035099778e-03,5.745590465971350987e-04,-4.255357988153623573e-03,-3.544988659424513477e-03,-6.907649448569455099e-03,-7.292871325460131317e-04,3.063867223956404269e-03,6.432190121239644148e-03,7.055386192602822876e-04,-2.545140740744582849e-03,-2.498585165016741372e-03,1.958272040996597661e-03,3.844701073306846118e-03,-1.922550603175532391e-03,4.210520200158109961e-04,-1.089742760647258385e-03,-4.043979210953050664e-03,-4.413852016080804450e-03,-6.901250442177055437e-04,-6.962550504247731970e-04,5.894907822275056650e-03,-3.049835157996115195e-03,-1.796966718226461479e-03,4.965440976449115792e-03,1.258134557241670720e-04,3.293337464322199093e-03,-1.051167835330841594e-03,-1.899005060413708971e-04,1.680884868997708104e-03,1.900293016605564527e-03,-4.126347490820256769e-04,-9.929259655020573547e-03,-5.144270056952322465e-03,6.633427509404654643e-03,-4.535876980112376017e-04,-8.270620156046123734e-04,-2.567072611518382910e-03,3.465281118041202858e-03,-4.131489548464966494e-03,-1.763944246190877075e-03,-4.573207256021354430e-03,1.348463364446330585e-03,-4.486831434521827526e-03,-1.312329566823170531e-03,-3.350532924311595395e-03,-9.597199961738868065e-03,-2.360143688489834031e-03,2.076360170395510386e-03,1.375629265548295333e-03,-2.965792887458898117e-03,-1.984884448875444320e-03,7.918985328111739080e-03,5.375560888841829713e-03,-4.320329310373675034e-03,-1.187352522791461406e-03,1.295648775307678673e-03,-1.399993268096544081e-03,5.464890269855969193e-03,-6.203858735927407150e-03,3.445770939041419186e-03,-5.243134483077237055e-03,6.947754360261022832e-04,5.223304894381979729e-03,-1.659484828915411270e-03,-1.442463000117675566e-03,4.981775224427458307e-03,-1.525374701519646324e-03,-3.898586888465242241e-03,4.685785786835865163e-03,-3.072465961711463855e-03,-6.177976279149853360e-03,6.771740331552826694e-04,4.228349201685138378e-03,7.707262589536063510e-03,1.779550496186463196e-03,-2.027743532083247074e-03,3.423145870885788665e-03,2.054731288905643945e-03,-2.259232268777949511e-04,-4.360066557633129891e-03,-3.318871264829520440e-03,-1.049415405329412552e-03,4.492392268299187121e-03,5.717929310000266843e-03,6.026785608005330109e-04,1.924311803683618300e-03,-1.820115725533363177e-03,4.869916263712259670e-03,-5.180038566569491066e-04,-2.193943849258500449e-04,2.346639000092711619e-03,3.416421036547153105e-03,2.172627498501738478e-03,7.505446998320105005e-04,-3.795980375164569130e-03,7.389044687833629457e-03,3.471494321585976914e-03,7.175198392235235863e-04,2.158269012640386553e-03,7.064037939902087157e-03,-5.032160898296798423e-04,-6.472732115911229538e-03,-2.560599035300682304e-05,2.751193402323340743e-03,6.100336927144966309e-03,-1.629882081236959683e-03,-7.006744597726602235e-03,4.579818768184296812e-03,2.733296628355985376e-03,4.275658027385265819e-03,-1.363116533165255155e-03,-2.515455207735139628e-03,2.147155130036139392e-03,-4.541852670346804843e-03,3.925013963251977947e-03,-9.763795330720262400e-03,7.119731118463243358e-03,-2.395897978965053684e-03,6.983433402857658519e-03,-3.276258152419200299e-03,9.976794062415516098e-03,-1.170101719256779133e-03,3.321012313051926318e-03,-2.710909114789357768e-03,3.347018450736454018e-03,-6.163689015947495901e-03,1.778242416009357578e-03,2.917025186264692103e-04,5.147960727589441857e-03,-7.494082737321198021e-03,2.711551677943081860e-03,-6.391607231688700881e-03,-5.037593321387537175e-03,7.289118786330219717e-04,-1.983163044996493537e-03,2.898658428878722170e-03,1.630009684159847453e-03,8.765910359890061784e-04,4.630645667515756935e-04,1.684741944049331129e-03,-1.555756720167865599e-03,6.091456374473863894e-04,1.710717444791505981e-04,2.346619091946408695e-03,4.162213132487005418e-03,4.254288827079057318e-03,-2.671287275825136656e-03,-4.717242996210621771e-03,3.053565426586648656e-03,-9.548459925032802553e-03,-8.302778949491827418e-03,3.715923715410764583e-04,4.564675341819080662e-03,-3.684038710120579249e-03,-1.991876989329366323e-03,4.435251486007329297e-03,-5.573498673671638086e-03,4.424616611579686339e-03,3.884015621170827659e-03,-1.079306204102412200e-03,-3.914848817243140634e-03,5.404721422391891780e-03,-4.301254983646789036e-03,-3.079591977293923751e-03,-3.108948334976033290e-04,-3.517420041939922290e-03,-1.395952383496244092e-03,2.079699375737811481e-03,-2.392355500387547892e-03,-1.990116991876611876e-04,-4.576737870074846365e-03,4.502319664498779204e-03,2.859422206061919183e-04,-4.790133663122566644e-03,1.160869532274377055e-03,3.807382715472081534e-03,6.098742754441193424e-03,5.756747377981966465e-04,-1.338620895941492655e-04,7.361533578256851764e-05,4.758546156780394873e-03,3.871152277405051721e-03,1.850811990053507225e-03,-2.340964839327356814e-03,-6.704421063130459532e-03,-3.170488955538917474e-03,-3.847442104680150361e-03,2.552037449546623073e-03,4.344812946874861484e-03,-8.892144291254954879e-04,4.046526857192096868e-04,2.346054227571039465e-03,-1.985701503596482963e-03,-4.538292495932576449e-03,-2.838392623424656428e-03,-1.597160994298468567e-04,2.504745135553679454e-03,3.109397444436725125e-03,6.044292288580389340e-03,4.057190695528130331e-03,2.400857753033363694e-03,-2.385952136443194628e-03,-4.255069321255518060e-03,-2.093710913034829203e-04,-2.387772562765372308e-03,4.817862423344114985e-03,-4.635953249958752430e-03,-7.044786712359707610e-03,-2.996105523035256374e-03,4.844437080173620395e-03,-5.650865997752729103e-03,-8.640638734516732991e-03,-2.439409458730768237e-03,-1.279930475716820840e-03,-1.196623043789618807e-03,7.202142079660260729e-04,5.916569703151672299e-03,-1.131951264571159649e-03,1.798075032506122250e-04,2.065294962035300452e-03,-6.884807694125681145e-03,-6.521171645144283567e-03,1.540284732937410687e-03,-6.559735001629158312e-03,-4.330916813713163449e-03,-2.633977264464252600e-03,-7.377026848267577127e-04,1.359045262336724307e-03,-9.640203485657329206e-04,3.555785876530288998e-03,6.953647967072682651e-04,-1.721987081795989163e-03,1.849677705173236519e-03,1.569980979481641094e-03,3.143440351166178551e-03,-7.949174962508812059e-03,-9.054120114420088775e-04,1.175617418623953322e-03,2.835086016741923502e-03,-8.106997806191967903e-04,-5.801392396846102688e-03,-1.083828725072949820e-03,-4.410750621509299495e-03,4.170026867892774429e-03,-6.147840507207767875e-03,-4.933940755455817201e-03,3.269006631608752361e-03,-6.925218337157126348e-03,-1.217214886225495351e-04,4.844037785743257299e-07,1.668857174597864531e-03,2.792368155273754291e-03,5.431182900724808868e-04,-2.896237916299650595e-03,4.253430098126708900e-03,-4.590220609941469618e-03,4.626284028528276568e-03,-1.136830371892791217e-03,4.074019103039667848e-03,5.315958903766597118e-03,6.571383001741690211e-03,1.408269352567433552e-03,-5.870773999962497491e-03,2.492713668141666693e-03,-3.348241202656083819e-03,-9.135459867814291202e-03,-2.792372756517069824e-05,3.315583885037084837e-03,1.705755997356572101e-03,-1.075486269015650097e-03,-5.892972621265118137e-04,-5.063348045512244648e-03,-3.440174083639188293e-03,2.014601349751028898e-03,-4.262081211497003100e-03,4.835204521335892923e-03,1.028859037011444632e-04,1.392533557380971291e-03,-2.791822007958917173e-03,-4.768349626747662301e-03,-4.404222367100755348e-03,2.731265724930352374e-03,5.800083639386747689e-03,-1.766395867185562810e-04,6.037178751338970238e-04,-3.385777606193263092e-03,8.191549368637397960e-04,7.364420637483808790e-03,-8.335845982477188944e-04,-7.763893763687725914e-03,-2.258857809473834716e-03,-2.929523649524411535e-03,1.952919956244985765e-03,2.130973234313135337e-04,-7.562744371104314313e-04,-2.268496866325132345e-03,7.090125186099895550e-04,-2.222330549332428296e-03,-7.781058827267197005e-03,2.283273649917159746e-03,-9.044409487738655235e-04,2.158813391591423662e-03,5.009961380755844663e-04,-3.418376159838685136e-03,3.207845219486765102e-03,-3.027965058934700086e-03,-3.547773247820426232e-03,-1.771855105151607605e-03,-5.039131353729257336e-03,-4.031246307326724447e-03,4.453911580313005616e-03,5.264516217083121778e-03,1.863896756779722524e-03,3.206991612998111546e-04,6.838394613947155077e-04,-1.411572221393703761e-03,4.464424323769073549e-04,4.909159440889752403e-03,2.121382785888396242e-03,7.225019389569849529e-03,4.741851475476489722e-04,3.323890082705597930e-03,2.097791314753683078e-03,-7.855223769496832292e-03,-5.870698376916819519e-03,-2.438547086228323637e-03,-6.100559002434436523e-03,3.346676029088356541e-03,1.772442292645681500e-03,-2.176117358950326042e-03,-5.739410590932996457e-03,2.241353852244628349e-03,5.120289830152086920e-03,2.747390310127212701e-03,2.480748376401659800e-04,1.394911183405985692e-03,-6.536590815162769859e-03,-1.391371496948848796e-03,2.289563506719137021e-04,-1.118765545708656946e-03,-1.100907157939505325e-02,-2.082165644427244611e-03,-2.513928621628171156e-03,5.251315395672986208e-05,-1.523797217415897264e-03,5.605788387480912377e-03,2.072407123425808705e-03,2.562243165412047413e-03,-2.129061018139320575e-03,-7.612721712797321900e-05,-1.207954989805848627e-03,-5.891203202370504707e-04,-2.742282652986368936e-03,1.586108588541714631e-03,5.344805243805039741e-03,-3.909068018259122430e-03,-2.565175377078656328e-03,4.347718165818898958e-03,-2.570868734048391974e-03,2.369200641418532996e-03,-5.976696885663826224e-03,-5.066027781299806826e-03,1.137348067074662496e-03,1.578097454986257097e-03,3.725296912916078139e-03,-2.347271202545977552e-03,-1.457376048139028815e-03,5.171124840335755007e-04 diff --git a/projects/resources/python/other/data/ridge_intercept.csv b/projects/resources/python/other/data/ridge_intercept.csv new file mode 100644 index 00000000..c27e430a --- /dev/null +++ b/projects/resources/python/other/data/ridge_intercept.csv @@ -0,0 +1,5 @@ +-1.270395982723125705e+00 +-8.357880016779333232e-01 +-3.836522329792435571e-01 +3.789999466034074116e-01 +-8.891637292231081569e-01 diff --git a/projects/resources/python/other/train_ensemble.py b/projects/resources/python/other/train_ensemble.py new file mode 100755 index 00000000..13e4ab65 --- /dev/null +++ b/projects/resources/python/other/train_ensemble.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- + +import numpy as np +from sklearn.naive_bayes import MultinomialNB +from sklearn.linear_model import RidgeClassifier + + +def softmax(X): + return np.exp(X) / np.sum(np.exp(X), axis=1).reshape(X.shape[0], 1) + + +def logsumexp(X): + return np.log(np.sum(np.exp(X))) + + +def naive_bayes_predict(X, feature_log_prob, log_class_prior): + num_features = X.shape[1] + num_classes = len(log_class_prior) + jll = np.zeros((X.shape[0], num_classes)) + jll += log_class_prior + + # K1 + for i in range(num_features): + for j in range(num_classes): # col Y.T, i.e. feature_log_prob + for q in range(X.shape[0]): # row X + jll[q, j] += X[q, i] * feature_log_prob[j, i] + # Same as + # jll = X.dot(feature_log_prob.T) + log_class_prior + + # K2 + amax = np.amax(jll, axis=1) + + # K3 + # l = np.zeros(X.shape[0]) + # for i in range(X.shape[0]): + # logsum = 0 + # for j in range(num_classes): + # logsum += np.exp(jll[i, j] - amax[i]) + # l[i] = np.log(logsum) + amax[i] + l = logsumexp(jll - np.atleast_2d(amax).T) + amax + + # K4 + for q in range(X.shape[0]): + for j in range(num_classes): + jll[q, j] = np.exp(jll[q, j] - l[q]) + + return jll + +def normalize(X): + return (X - np.mean(X, axis=0)) / np.std(X, axis=0) + + +def ridge_pred(X, coef, intercept): + return np.dot(X, coef.T) + intercept + + +#%% + +if __name__ == "__main__": + + + rng = np.random.RandomState(1) + + num_features = 1000 + max_occurrence_of_ngram = 10 + num_classes = 5 + + X = rng.randint(max_occurrence_of_ngram, size=(6000, num_features)) + + y = rng.randint(num_classes, size=6000) + + + #%% Training; + + naive_bayes = MultinomialNB() + naive_bayes.fit(X, y) + + ridge = RidgeClassifier(random_state=rng) + ridge.fit(X, y) + + + #%% Testing; + + # Create some random inputs; + + num_test_docs = 100 + X_test = rng.randint(max_occurrence_of_ngram, size=(num_test_docs, num_features)) + + nb_scores = naive_bayes.predict_proba(X_test) + print(naive_bayes.predict(X_test)) + ridge_scores = ridge.decision_function(X_test) + print(ridge.predict(X_test)) + + print(np.argmax(softmax(nb_scores) + softmax(ridge_scores), axis=1)) + + + #%% Testing, using hand-made functions; + + nb_res_2 = naive_bayes_predict(X_test, naive_bayes.feature_log_prob_, naive_bayes.class_log_prior_) + print(np.argmax(nb_res_2, axis=1)) + + ridge_pred_2 = ridge_pred(X_test, ridge.coef_, ridge.intercept_) + print(np.argmax(ridge_pred_2, axis=1)) + + print(np.argmax(softmax(nb_res_2) + softmax(ridge_pred_2), axis=1)) + + + #%% Store matrices used in predicting results; + np.savetxt("data/nb_feat_log_prob.csv", naive_bayes.feature_log_prob_, delimiter=",") + np.savetxt("data/nb_class_log_prior.csv", naive_bayes.class_log_prior_, delimiter=",") + np.savetxt("data/ridge_coeff.csv", ridge.coef_, delimiter=",") + np.savetxt("data/ridge_intercept.csv", ridge.intercept_, delimiter=",") + + \ No newline at end of file From a7a08ad3795475bc66951baa0b4871e57e398e44 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 9 May 2020 19:47:45 +0200 Subject: [PATCH 062/236] updated ensemble benchmark --- .../python/benchmark/bench/bench_6.py | 23 +++++++++++++++---- .../resources/python/benchmark/benchmark.py | 2 +- .../python/benchmark/benchmark_result.py | 18 ++++++++++++--- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index c3923cc6..ca16e662 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -10,7 +10,7 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 1024 +NUM_THREADS_PER_BLOCK = 128 NB_KERNEL = """ extern "C" __global__ void nb_1(const int* x, const float* y, float* z, int size, int n_feat, int n_classes) { @@ -135,10 +135,23 @@ class Benchmark6(Benchmark): """ - Compute a complex pipeline of kernels, doing mock computations, and using read-only arguments; - ┌─> B(const Y, R1) ───────────────────┐ - A: (const X, Y) ─┤ ├─> E(const R1, const R2, R) - └─> C(const Y, Z) ─> D(const Z, R2) ──┘ + Compute a an ensemble of Categorical Naive Bayes and Ridge Regression classifiers. + Predictions are aggregated averaging the class scores after softmax normalization. + The computation is done on mock data and parameters, but is conceptually identical to a real ML pipeline. + In the DAG below, input arguments that are not involved in the computation of dependencies are omitted; + + RR-1: standard normalization + RR-2: matrix multiplication + RR-3: add vector to matrix, row-wise + NB-1: matrix multiplication + NB-2: row-wise maximum + NB-3: log of sum of exponential, row-wise + NB-4: exponential, element-wise + + ┌─> RR-1(const X,Z) ─> RR-2(const Z,R2) ─> RR-3(R2) ─> SOFTMAX(R1) ─────────────┐ + ─┤ ├─> ARGMAX(const R1,const R2,R) + └─> NB-1(const X,R1) ─> NB-2(const R1,AMAX) ─> (...) │ + (...) -> NB-3(const R1,const AMAX,L) ─> NB-4(R1,const L) ─> SOFTMAX(R2) ──┘ """ def __init__(self, benchmark: BenchmarkResult): diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py index af5ed1c2..24daefbb 100644 --- a/projects/resources/python/benchmark/benchmark.py +++ b/projects/resources/python/benchmark/benchmark.py @@ -94,7 +94,7 @@ def run(self, policy: str, size: int, realloc: bool, reinit: bool) -> None: self.init() # Reset the result; - # self.reset_result() + self.reset_result() # Execute the benchmark; gpu_result = self.execute() diff --git a/projects/resources/python/benchmark/benchmark_result.py b/projects/resources/python/benchmark/benchmark_result.py index 1afe5ee8..6956877a 100644 --- a/projects/resources/python/benchmark/benchmark_result.py +++ b/projects/resources/python/benchmark/benchmark_result.py @@ -112,11 +112,17 @@ def add_total_time(self, total_time: float) -> None: :param total_time: execution time of the benchmark iteration """ self._dict_current["total_time_sec"] = total_time - tot_time_phases = sum([x["time_sec"] if "time_sec" in x else 0 for x in self._dict_current["phases"]]) + + # Keep only phases related to GPU computation; + blacklisted_phases = ["allocation", "initalization", "reset_result"] + filtered_phases = [x for x in self._dict_current["phases"] if x["name"] not in blacklisted_phases] + tot_time_phases = sum([x["time_sec"] if "time_sec" in x else 0 for x in filtered_phases]) self._dict_current["overhead_sec"] = total_time - tot_time_phases + self._dict_current["computation_sec"] = tot_time_phases if self.debug: BenchmarkResult.log_message(f"\ttotal execution time: {total_time:.4f} sec," + - f" overhead: {total_time - tot_time_phases:.4f} sec") + f" overhead: {total_time - tot_time_phases:.4f} sec, " + + f" computation: {tot_time_phases:.4f} sec") def add_phase(self, phase: dict) -> None: """ @@ -149,9 +155,15 @@ def print_current_summary(self, name: str, policy: str, size: int, realloc: bool exec_times = [x["total_time_sec"] for x in results_filtered][skip:] mean_time = np.mean(exec_times) if exec_times else np.nan std_time = np.std(exec_times) if exec_times else np.nan + + comp_exec_times = [x["computation_sec"] for x in results_filtered][skip:] + comp_mean_time = np.mean(comp_exec_times) if comp_exec_times else np.nan + comp_std_time = np.std(comp_exec_times) if comp_exec_times else np.nan + BenchmarkResult.log_message(f"summary of benchmark={name}, policy={policy}, size={size}," + f" realloc={realloc}, reinit={reinit};" + - f" mean execution time={mean_time:.4f}±{std_time:.4f} sec") + f" mean total time={mean_time:.4f}±{std_time:.4f} sec;" + + f" mean computation time={comp_mean_time:.4f}±{comp_std_time:.4f} sec") def save_to_file(self) -> None: with open(self._output_path, "w+") as f: From a98b9cbf7ca899470ac642e6d9173b3f403e2797 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 9 May 2020 20:03:59 +0200 Subject: [PATCH 063/236] updated notes --- NOTES.md | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/NOTES.md b/NOTES.md index 50369d90..148fc7a7 100644 --- a/NOTES.md +++ b/NOTES.md @@ -38,6 +38,12 @@ The main idea is to **represent GrCUDA computations as vertices of a DAG**, conn * The `cudaStreamAttachMemAsync` is also exposed, to exclusively associate a managed memory array to a given stream. This is used, on Pre-Pascal GPUs, to access arrays on CPU while a kernel is using other arrays on GPU * Most of the new code is unit-tested and integration-tested, and there is a Python benchmarking suite to measure execution time with different settings + * For example, the file `projects/resources/python/benchmark/bench/bench_6` is a fairly complex ML ensemble using multiple GPU kernels on different streams. + Compared to sequential scheduling, we are up to **40% faster**! +* **Streams** are managed internally by the GrCUDA runtime: we keep track of existing streams that are currently empty, and schedule computations on them in a FIFO order. + New streams are created only if no existing stream is available +* **Read-only** input arguments can be specified with the `const` keyword; they will be ignored in the dependency computations if possible: + for example, if there are 2 kernels that use the same read-only input array, they will be executed concurrently * **Current limitations** 1. **Dependency computation does not consider disjoint parameter subsets.** @@ -48,16 +54,16 @@ The main idea is to **represent GrCUDA computations as vertices of a DAG**, conn If `Y` was read-only in `K1`, this wait would have been unnecessary. Instead, we can assign computations to different threads, block the thread execution, and start child computations with callbacks. This was the first approach, but it gave sync errors (probably due to other problems that are now solved) - 3. **Streams are not reused if they are free:** I'm creating new streams for computations without dependencies, but I could re-use existing streams that are currently free. - This avoids memory leaks, but requires a bit of extra book-keeping. - 4. **Scalar values are not considered for dependencies**: they are read-only when used as input, but there could be output-input depenencies ([API Design, point 4](#api-design)) + 3. **Scalar values are not considered for dependencies**: they are read-only when used as input, but there could be output-input depenencies in libraries ([API Design, point 4](#api-design)) + 4. Read-only arguments are visible on the **default stream**, instead of having their visibility limited to the stream where they are used. + This makes the arguments visible to kernels running on different streams, but accesses by the CPU to these arguments require full device synchronization. ## Open questions ### Questions on API design (i.e. how do we provide the best user experience) -1. How to understand if a parameter is read-only? ([API Design, point 4](#api-design)) -2. How do we track scalar values? ([API Design, point 5](#api-design)) +1. ~~How to understand if a parameter is read-only? ([API Design, point 4](#api-design))~~ We can use the `const` keyword in the computation signature +2. How do we track scalar values in library function outputs? ([API Design, point 5](#api-design)) 3. How can user specify options cleanly? ([API Design, point 2](#api-design)) * Using only context startup options is limiting, but it simplify the problem (we don't have to worry about changing how the DAG is built at runtime) * If we want provide more flexibility, we can add functions to the DSL, but that's not very clean @@ -93,15 +99,15 @@ Dependencies can be explicitely specified by the user using handles, or we can t 4. How do we identify if a **parameter is read-only**? If two kernels use the same parameter but only read from it, they can execute in parallel * This is not trivial: LLVM can understand, for example, if a scalar value is read-only, but doing that with an array is not always possible * Users might have to specify which parameters are read-only in the kernel signature, which is still better than using explicit handles + * For now, we let programmers manually specify read-only array arguments using the `const` keyword, as done in `CUDA` 5. How do we handle scalar values? We could also have dependencies due to scalar values (e.g. a computation is started only if the error in the next iteration is above a threashold) * Currently, only reads from `DeviceArray` (and similar) return scalar values, and they must be done synchronously, as the result is immediately exposed to the guest language. * Array reads (and writes) are done synchronously by the host, and we guarantee that no kernel that uses the affected array is running * Kernels do not return scalar values, and scalar outputs are stored in a size-1 array (which we can treat as any other array) - * Moreover, **a user can extract a scalar from a size-1 array, and use it as input to another kernel. This creates a dependency that cannot be found automatically!** - * The only way around that is to have the option to manually specify dependencies - * Library functions can return scalars! + * Then the programmer can pass the size-1 array to another computation (handled like any array), or extract the value with an array read that triggers synchronization + * Scalar values are only problematic when considering library functions that return them * One idea could be to *box* scalar values with Truffle nodes and store the actual value using a `Future`. - If the user reads or writes the value, we wait for the GPU computation to end. Then the scalar value can be unboxed to avoid further overheads. + If the user reads or writes the value, we wait for the GPU computation to end. Then the scalar value can be unboxed to avoid further overheads. * But running library functions on streams is problematic (see problem 6), so this solution might not be required 6. Library functions: library functions are more complex to handle as they could also have code running on the host side. * They also do not expose streams, so it could be difficult to pipeline them From b39e3883b45aee7f6773da722606182bbb4c3d8c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 18 May 2020 17:57:09 +0200 Subject: [PATCH 064/236] adding strategy to compute parent stream --- .../gpu/stream/GrCUDAStreamManagerTest.java | 18 ++--- .../test/mock/GrCUDAExecutionContextMock.java | 4 +- .../GrCUDAExecutionContextMockBuilder.java | 6 +- .../test/mock/GrCUDAStreamManagerMock.java | 17 ++++- .../src/com/nvidia/grcuda/GrCUDAContext.java | 45 ++++++++---- .../src/com/nvidia/grcuda/GrCUDAOptions.java | 11 ++- .../gpu/stream/GrCUDAStreamManager.java | 73 ++++++++++++++----- ...ieveStream.java => RetrieveNewStream.java} | 6 +- ....java => RetrieveNewStreamPolicyEnum.java} | 6 +- .../gpu/stream/RetrieveParentStream.java | 14 ++++ .../RetrieveParentStreamPolicyEnum.java | 16 ++++ 11 files changed, 156 insertions(+), 60 deletions(-) rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/{RetrieveStream.java => RetrieveNewStream.java} (91%) rename projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/{RetrieveStreamPolicyEnum.java => RetrieveNewStreamPolicyEnum.java} (64%) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveParentStream.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveParentStreamPolicyEnum.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index d1de0747..4e104558 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -2,7 +2,7 @@ import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; -import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; import com.nvidia.grcuda.test.mock.ArgumentMock; import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMockBuilder; import com.nvidia.grcuda.test.mock.GrCUDAStreamManagerMock; @@ -23,20 +23,20 @@ @RunWith(Parameterized.class) public class GrCUDAStreamManagerTest { /** - * Tests are executed for each of the {@link com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum} values; + * Tests are executed for each of the {@link RetrieveNewStreamPolicyEnum} values; * @return the current stream policy */ @Parameterized.Parameters public static Collection data() { return Arrays.asList(new Object[][]{ - {RetrieveStreamPolicyEnum.ALWAYS_NEW}, - {RetrieveStreamPolicyEnum.LIFO}, + {RetrieveNewStreamPolicyEnum.ALWAYS_NEW}, + {RetrieveNewStreamPolicyEnum.FIFO}, }); } - private final RetrieveStreamPolicyEnum policy; + private final RetrieveNewStreamPolicyEnum policy; - public GrCUDAStreamManagerTest(RetrieveStreamPolicyEnum policy) { + public GrCUDAStreamManagerTest(RetrieveNewStreamPolicyEnum policy) { this.policy = policy; } @@ -235,9 +235,9 @@ public void generateManyStreamsTest() throws UnsupportedTypeException { ExecutionDAG dag = context.getDag(); // Check that kernels have been given the right stream; - int numStreams = this.policy == RetrieveStreamPolicyEnum.LIFO ? 2 : numLoops * 2; - int streamCheck1 = this.policy == RetrieveStreamPolicyEnum.LIFO ? 0 : numLoops * 2 - 2; - int streamCheck2 = this.policy == RetrieveStreamPolicyEnum.LIFO ? 1 : numLoops * 2 - 1; + int numStreams = this.policy == RetrieveNewStreamPolicyEnum.FIFO ? 2 : numLoops * 2; + int streamCheck1 = this.policy == RetrieveNewStreamPolicyEnum.FIFO ? 0 : numLoops * 2 - 2; + int streamCheck2 = this.policy == RetrieveNewStreamPolicyEnum.FIFO ? 1 : numLoops * 2 - 1; assertEquals(numStreams, context.getStreamManager().getNumberOfStreams()); assertEquals(streamCheck1, dag.getVertices().get(numLoops * 3 - 3).getComputation().getStream().getStreamNumber()); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java index eea54ad3..e653d885 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java @@ -4,7 +4,7 @@ import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; -import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; /** * Mock class to test the GrCUDAExecutionContextTest, it has a null CUDARuntime; @@ -26,7 +26,7 @@ public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy) { new GrCUDAStreamManagerMock(null), dependencyPolicy); } - public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy, boolean syncStream, RetrieveStreamPolicyEnum retrieveStreamPolicy) { + public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy, boolean syncStream, RetrieveNewStreamPolicyEnum retrieveStreamPolicy) { super(null, null, new GrCUDAStreamManagerMock(null, syncStream, retrieveStreamPolicy), dependencyPolicy); } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java index eabbf01b..1776ad18 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java @@ -1,13 +1,13 @@ package com.nvidia.grcuda.test.mock; import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; -import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; public class GrCUDAExecutionContextMockBuilder { boolean syncStream = false; DependencyPolicyEnum dependencyPolicy = DependencyPolicyEnum.DEFAULT; - RetrieveStreamPolicyEnum retrieveStreamPolicy = RetrieveStreamPolicyEnum.LIFO; + RetrieveNewStreamPolicyEnum retrieveStreamPolicy = RetrieveNewStreamPolicyEnum.FIFO; public GrCUDAExecutionContextMock build() { return new GrCUDAExecutionContextMock(dependencyPolicy, syncStream, retrieveStreamPolicy); @@ -23,7 +23,7 @@ public GrCUDAExecutionContextMockBuilder setDependencyPolicy(DependencyPolicyEnu return this; } - public GrCUDAExecutionContextMockBuilder setRetrieveStreamPolicy(RetrieveStreamPolicyEnum retrieveStreamPolicy) { + public GrCUDAExecutionContextMockBuilder setRetrieveStreamPolicy(RetrieveNewStreamPolicyEnum retrieveStreamPolicy) { this.retrieveStreamPolicy = retrieveStreamPolicy; return this; } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index d11e663a..13558ebd 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -5,20 +5,29 @@ import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; -import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; import java.util.Map; import java.util.Set; public class GrCUDAStreamManagerMock extends GrCUDAStreamManager { - GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents, RetrieveStreamPolicyEnum retrieveStreamPolicy) { - super(runtime, retrieveStreamPolicy); + GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents, + RetrieveNewStreamPolicyEnum retrieveStreamPolicy, + RetrieveParentStreamPolicyEnum parentStreamPolicyEnum) { + super(runtime, retrieveStreamPolicy, parentStreamPolicyEnum); + this.syncParents = syncParents; + } + + GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents, + RetrieveNewStreamPolicyEnum retrieveStreamPolicy) { + super(runtime, retrieveStreamPolicy, RetrieveParentStreamPolicyEnum.DEFAULT); this.syncParents = syncParents; } GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents) { - super(runtime, RetrieveStreamPolicyEnum.ALWAYS_NEW); + super(runtime, RetrieveNewStreamPolicyEnum.ALWAYS_NEW, RetrieveParentStreamPolicyEnum.DEFAULT); this.syncParents = syncParents; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index 118ad7ae..9175cb02 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -39,15 +39,13 @@ import com.nvidia.grcuda.functions.map.MapFunction; import com.nvidia.grcuda.functions.map.ShredFunction; import com.nvidia.grcuda.gpu.CUDARuntime; -import com.nvidia.grcuda.gpu.computation.dependency.DefaultDependencyComputationBuilder; -import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputationBuilder; import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; -import com.nvidia.grcuda.gpu.computation.dependency.WithConstDependencyComputationBuilder; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.ExecutionPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.SyncGrCUDAExecutionContext; -import com.nvidia.grcuda.gpu.stream.RetrieveStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.TruffleLanguage.Env; @@ -65,7 +63,8 @@ public final class GrCUDAContext { public static final ExecutionPolicyEnum DEFAULT_EXECUTION_POLICY = ExecutionPolicyEnum.DEFAULT; public static final DependencyPolicyEnum DEFAULT_DEPENDENCY_POLICY = DependencyPolicyEnum.DEFAULT; - public static final RetrieveStreamPolicyEnum DEFAULT_RETRIEVE_STREAM_POLICY = RetrieveStreamPolicyEnum.LIFO; + public static final RetrieveNewStreamPolicyEnum DEFAULT_RETRIEVE_STREAM_POLICY = RetrieveNewStreamPolicyEnum.FIFO; + public static final RetrieveParentStreamPolicyEnum DEFAULT_PARENT_STREAM_POLICY = RetrieveParentStreamPolicyEnum.DEFAULT; private static final String ROOT_NAMESPACE = "CU"; @@ -75,7 +74,8 @@ public final class GrCUDAContext { private final ArrayList disposables = new ArrayList<>(); private final AtomicInteger moduleId = new AtomicInteger(0); private volatile boolean cudaInitialized = false; - private final RetrieveStreamPolicyEnum retrieveStreamPolicy; + private final RetrieveNewStreamPolicyEnum retrieveNewStreamPolicy; + private final RetrieveParentStreamPolicyEnum retrieveParentStreamPolicyEnum; // this is used to look up pre-existing call targets for "map" operations, see MapArrayNode private final ConcurrentHashMap, CallTarget> uncachedMapCallTargets = new ConcurrentHashMap<>(); @@ -84,7 +84,10 @@ public GrCUDAContext(Env env) { this.env = env; // Retrieve the stream retrieval policy; - retrieveStreamPolicy = parseRetrieveStreamPolicy(env.getOptions().get(GrCUDAOptions.RetrieveStreamPolicy)); + retrieveNewStreamPolicy = parseRetrieveStreamPolicy(env.getOptions().get(GrCUDAOptions.RetrieveNewStreamPolicy)); + + // Retrieve how streams are obtained from parent computations; + retrieveParentStreamPolicyEnum = parseParentStreamPolicy(env.getOptions().get(GrCUDAOptions.RetrieveParentStreamPolicy)); // Retrieve the dependency computation policy; DependencyPolicyEnum dependencyPolicy = parseDependencyPolicy(env.getOptions().get(GrCUDAOptions.DependencyPolicy)); @@ -172,8 +175,12 @@ public ConcurrentHashMap, CallTarget> getMapCallTargets() { return uncachedMapCallTargets; } - public RetrieveStreamPolicyEnum getRetrieveStreamPolicy() { - return retrieveStreamPolicy; + public RetrieveNewStreamPolicyEnum getRetrieveNewStreamPolicy() { + return retrieveNewStreamPolicy; + } + + public RetrieveParentStreamPolicyEnum getRetrieveParentStreamPolicyEnum() { + return retrieveParentStreamPolicyEnum; } /** @@ -215,16 +222,28 @@ private static DependencyPolicyEnum parseDependencyPolicy(String policyString) { } @TruffleBoundary - private static RetrieveStreamPolicyEnum parseRetrieveStreamPolicy(String policyString) { + private static RetrieveNewStreamPolicyEnum parseRetrieveStreamPolicy(String policyString) { switch(policyString) { - case "lifo": - return RetrieveStreamPolicyEnum.LIFO; + case "fifo": + return RetrieveNewStreamPolicyEnum.FIFO; case "always_new": - return RetrieveStreamPolicyEnum.ALWAYS_NEW; + return RetrieveNewStreamPolicyEnum.ALWAYS_NEW; default: return GrCUDAContext.DEFAULT_RETRIEVE_STREAM_POLICY; } } + @TruffleBoundary + private static RetrieveParentStreamPolicyEnum parseParentStreamPolicy(String policyString) { + switch(policyString) { + case "disjoint": + return RetrieveParentStreamPolicyEnum.DISJOINT; + case "default": + return RetrieveParentStreamPolicyEnum.DEFAULT; + default: + return GrCUDAContext.DEFAULT_PARENT_STREAM_POLICY; + } + } + /** * Cleanup the GrCUDA context at the end of the execution; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java index 6a14094c..e494b833 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java @@ -54,12 +54,15 @@ private GrCUDAOptions() { @Option(category = OptionCategory.USER, help = "Set the location of the cuml library.", stability = OptionStability.STABLE) // public static final OptionKey CuMLLibrary = new OptionKey<>(CUMLRegistry.DEFAULT_LIBRARY); - @Option(category = OptionCategory.USER, help = "Chose the scheduling policy of GrCUDA computations", stability = OptionStability.EXPERIMENTAL) // + @Option(category = OptionCategory.USER, help = "Choose the scheduling policy of GrCUDA computations", stability = OptionStability.EXPERIMENTAL) // public static final OptionKey ExecutionPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_EXECUTION_POLICY.getName()); - @Option(category = OptionCategory.USER, help = "Chose how data dependencies between GrCUDA computations are computed", stability = OptionStability.EXPERIMENTAL) // + @Option(category = OptionCategory.USER, help = "Choose how data dependencies between GrCUDA computations are computed", stability = OptionStability.EXPERIMENTAL) // public static final OptionKey DependencyPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_DEPENDENCY_POLICY.getName()); - @Option(category = OptionCategory.USER, help = "Chose how streams for new GrCUDA computations are provided", stability = OptionStability.EXPERIMENTAL) // - public static final OptionKey RetrieveStreamPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_RETRIEVE_STREAM_POLICY.getName()); + @Option(category = OptionCategory.USER, help = "Choose how streams for new GrCUDA computations are created", stability = OptionStability.EXPERIMENTAL) // + public static final OptionKey RetrieveNewStreamPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_RETRIEVE_STREAM_POLICY.getName()); + + @Option(category = OptionCategory.USER, help = "Choose how streams for new GrCUDA computations are obtained from parent computations", stability = OptionStability.EXPERIMENTAL) // + public static final OptionKey RetrieveParentStreamPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_PARENT_STREAM_POLICY.getName()); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index ab366935..bdc16fac 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -30,23 +30,39 @@ public class GrCUDAStreamManager { */ protected final Map> activeComputationsPerStream = new HashMap<>(); - private final RetrieveStream retrieveStream; + private final RetrieveNewStream retrieveNewStream; + private final RetrieveParentStream retrieveParentStream; - public GrCUDAStreamManager(CUDARuntime runtime) { - this(runtime, runtime.getContext().getRetrieveStreamPolicy()); + public GrCUDAStreamManager(CUDARuntime runtime) { + this(runtime, runtime.getContext().getRetrieveNewStreamPolicy(), runtime.getContext().getRetrieveParentStreamPolicyEnum()); } - public GrCUDAStreamManager(CUDARuntime runtime, RetrieveStreamPolicyEnum retrieveStreamPolicyEnum) { + public GrCUDAStreamManager( + CUDARuntime runtime, + RetrieveNewStreamPolicyEnum retrieveNewStreamPolicyEnum, + RetrieveParentStreamPolicyEnum retrieveParentStreamPolicyEnum) { this.runtime = runtime; - switch(retrieveStreamPolicyEnum) { - case LIFO: - this.retrieveStream = new LifoRetrieveStream(); + // Get how streams are retrieved for computations without parents; + switch(retrieveNewStreamPolicyEnum) { + case FIFO: + this.retrieveNewStream = new FifoRetrieveStream(); break; case ALWAYS_NEW: - this.retrieveStream = new AlwaysNewRetrieveStream(); + this.retrieveNewStream = new AlwaysNewRetrieveStream(); break; default: - this.retrieveStream = new LifoRetrieveStream(); + this.retrieveNewStream = new FifoRetrieveStream(); + } + // Get how streams are retrieved for computations with parents; + switch(retrieveParentStreamPolicyEnum) { + case DISJOINT: + this.retrieveParentStream = new DisjointRetrieveParentStream(); + break; + case DEFAULT: + this.retrieveParentStream = new DefaultRetrieveParentStream(); + break; + default: + this.retrieveParentStream = new DefaultRetrieveParentStream(); } } @@ -62,13 +78,10 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { CUDAStream stream; if (vertex.isStart()) { // Else, if the computation doesn't have parents, provide a new stream to it; - stream = retrieveStream.retrieve(); + stream = retrieveNewStream.retrieve(); } else { // Else, compute the streams used by the parent computations. - // If more than one stream is available, keep the first; - // TODO: this should be more complex! - // If 2 child computations have disjoint set of dependencies, they can use 2 streams and run in parallel! - stream = vertex.getParentComputations().get(0).getStream(); + stream = this.retrieveParentStream.retrieve(vertex); } // Set the stream; vertex.getComputation().setStream(stream); @@ -190,7 +203,7 @@ protected void removeActiveComputation(GrCUDAComputationalElement computation) { // If this stream doesn't have any computation associated to it, it's free to use; if (activeComputationsPerStream.get(stream).isEmpty()) { activeComputationsPerStream.remove(stream); - retrieveStream.update(stream); + retrieveNewStream.update(stream); } } @@ -204,7 +217,7 @@ private void resetActiveComputationState() { // Streams don't have any active computation; activeComputationsPerStream.clear(); // All streams are free; - retrieveStream.update(streams); + retrieveNewStream.update(streams); } /** @@ -213,14 +226,14 @@ private void resetActiveComputationState() { public void cleanup() { streams.forEach(runtime::cudaStreamDestroy); activeComputationsPerStream.clear(); - retrieveStream.cleanup(); + retrieveNewStream.cleanup(); streams.clear(); } /** * By default, create a new stream every time; */ - private class AlwaysNewRetrieveStream extends RetrieveStream { + private class AlwaysNewRetrieveStream extends RetrieveNewStream { @Override public CUDAStream retrieve() { @@ -231,7 +244,7 @@ public CUDAStream retrieve() { /** * Keep a queue of free (currently not utilized) streams, and retrieve the oldest one added to the queue; */ - private class LifoRetrieveStream extends RetrieveStream { + private class FifoRetrieveStream extends RetrieveNewStream { /** * Keep a queue of free streams; @@ -259,4 +272,26 @@ CUDAStream retrieve() { } } } + + /** + * By default, use the same stream as the parent computation; + */ + private static class DefaultRetrieveParentStream extends RetrieveParentStream { + + @Override + public CUDAStream retrieve(ExecutionDAG.DAGVertex vertex) { + return vertex.getParentComputations().get(0).getStream(); + } + } + + /** + * TODO: keep track of disjoint argument sets + */ + private class DisjointRetrieveParentStream extends RetrieveParentStream { + + @Override + public CUDAStream retrieve(ExecutionDAG.DAGVertex vertex) { + return vertex.getParentComputations().get(0).getStream(); + } + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveNewStream.java similarity index 91% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStream.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveNewStream.java index b3c0933d..1cdbaa46 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStream.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveNewStream.java @@ -8,19 +8,19 @@ * that has no dependency on active computations. * For example, it could create a new stream or provide an existing stream that is currently not used; */ -public abstract class RetrieveStream { +public abstract class RetrieveNewStream { abstract CUDAStream retrieve(); /** * Initialize the class with the provided stream, - * for example a new stream that can be provided by {@link RetrieveStream#retrieve()} + * for example a new stream that can be provided by {@link RetrieveNewStream#retrieve()} * @param stream a stream that should be associated to the class */ void update(CUDAStream stream) { } /** * Initialize the class with the provided streams, - * for example new streams that can be provided by {@link RetrieveStream#retrieve()} + * for example new streams that can be provided by {@link RetrieveNewStream#retrieve()} * @param streams a stream that should be associated to the class */ void update(Collection streams) { } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStreamPolicyEnum.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveNewStreamPolicyEnum.java similarity index 64% rename from projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStreamPolicyEnum.java rename to projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveNewStreamPolicyEnum.java index b4c3f059..77a62a79 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveStreamPolicyEnum.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveNewStreamPolicyEnum.java @@ -1,12 +1,12 @@ package com.nvidia.grcuda.gpu.stream; -public enum RetrieveStreamPolicyEnum { - LIFO("lifo"), +public enum RetrieveNewStreamPolicyEnum { + FIFO("fifo"), ALWAYS_NEW("always_new"); private final String name; - RetrieveStreamPolicyEnum(String name) { + RetrieveNewStreamPolicyEnum(String name) { this.name = name; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveParentStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveParentStream.java new file mode 100644 index 00000000..efef59f7 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveParentStream.java @@ -0,0 +1,14 @@ +package com.nvidia.grcuda.gpu.stream; + +import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; + +/** + * This abstract class defines how a {@link GrCUDAStreamManager} + * will assign a {@link CUDAStream} to a {@link com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement} + * that has at least one parent active computation. + * For example, it use the same stream of the parent, or understand that a different stream can be used, + * to have multiple children computation run in parallel. + */ +public abstract class RetrieveParentStream { + abstract CUDAStream retrieve(ExecutionDAG.DAGVertex vertex); +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveParentStreamPolicyEnum.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveParentStreamPolicyEnum.java new file mode 100644 index 00000000..408d08a1 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/RetrieveParentStreamPolicyEnum.java @@ -0,0 +1,16 @@ +package com.nvidia.grcuda.gpu.stream; + +public enum RetrieveParentStreamPolicyEnum { + DEFAULT("default"), + DISJOINT("disjoiint"); + + private final String name; + + RetrieveParentStreamPolicyEnum(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} From ad35851fc14b422c26565abc4970ea4d80f37961 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 19 May 2020 11:56:52 +0200 Subject: [PATCH 065/236] added disjoint arg set stream retrieval --- .../gpu/stream/GrCUDAStreamManagerTest.java | 104 ++++++++++++++++-- .../test/mock/GrCUDAExecutionContextMock.java | 7 +- .../GrCUDAExecutionContextMockBuilder.java | 11 +- .../gpu/stream/GrCUDAStreamManager.java | 36 +++++- 4 files changed, 143 insertions(+), 15 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 4e104558..2e136785 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -3,6 +3,7 @@ import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; import com.nvidia.grcuda.test.mock.ArgumentMock; import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMockBuilder; import com.nvidia.grcuda.test.mock.GrCUDAStreamManagerMock; @@ -42,7 +43,7 @@ public GrCUDAStreamManagerTest(RetrieveNewStreamPolicyEnum policy) { @Test public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveNewStreamPolicy(this.policy).build(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); @@ -68,7 +69,7 @@ public void streamSelectionSimpleMockTest() throws UnsupportedTypeException { @Test public void streamSelectionMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveNewStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // \----> C(2) @@ -98,7 +99,7 @@ public void streamSelectionMockTest() throws UnsupportedTypeException { @Test public void streamSelection2MockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveNewStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) // \----> C(2) @@ -129,7 +130,7 @@ public void streamSelection2MockTest() throws UnsupportedTypeException { @Test public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveNewStreamPolicy(this.policy).build(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); @@ -158,7 +159,7 @@ public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeExcept @Test public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveNewStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // C(2) @@ -190,7 +191,7 @@ public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { @Test public void streamSelection2WithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveNewStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) // C(2) @@ -222,7 +223,7 @@ public void streamSelection2WithSyncMockTest() throws UnsupportedTypeException { @Test public void generateManyStreamsTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveNewStreamPolicy(this.policy).build(); // Create 2 parallel branches on dependent computations, and check that the total amount of streams created is what is expected; int numLoops = 10; @@ -243,4 +244,93 @@ public void generateManyStreamsTest() throws UnsupportedTypeException { assertEquals(streamCheck1, dag.getVertices().get(numLoops * 3 - 3).getComputation().getStream().getStreamNumber()); assertEquals(streamCheck2, dag.getVertices().get(numLoops * 3 - 2).getComputation().getStream().getStreamNumber()); } + + @Test + public void disjointArgumentStreamTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true) + .setRetrieveNewStreamPolicy(this.policy).setRetrieveParentStreamPolicy(RetrieveParentStreamPolicyEnum.DISJOINT).build(); + + // A(1,2) -> B(1) + // \-> C(2) + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check that kernels have been given the right stream; + assertEquals(2, context.getStreamManager().getNumberOfStreams()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(1).getComputation().getStream())); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(2).getComputation().getStream())); + } + + @Test + public void disjointArgumentStreamCrossTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(false) + .setRetrieveNewStreamPolicy(this.policy).setRetrieveParentStreamPolicy(RetrieveParentStreamPolicyEnum.DISJOINT).build(); + + // A(1,2) -> C(1,3) + // X + // B(3,4) -> D(2,4) + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(3), new ArgumentMock(4))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(2), new ArgumentMock(4))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check that kernels have been given the right stream; + assertEquals(2, context.getStreamManager().getNumberOfStreams()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(2).getComputation().getStream())); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(3).getComputation().getStream())); + } + + @Test + public void disjointArgumentStreamCross2Test() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(false) + .setRetrieveNewStreamPolicy(this.policy).setRetrieveParentStreamPolicy(RetrieveParentStreamPolicyEnum.DISJOINT).build(); + + // A(1,2,7) -> D(1,3,5) + // X + // B(3,4,8) -> E(2,4,6) + // X + // C(5,6,9) -> F(7,8,9) + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2), new ArgumentMock(7))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(3), new ArgumentMock(4), new ArgumentMock(8))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(5), new ArgumentMock(6), new ArgumentMock(9))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(3), new ArgumentMock(5))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(2), new ArgumentMock(4), new ArgumentMock(6))).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(7), new ArgumentMock(8), new ArgumentMock(9))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check that kernels have been given the right stream; + assertEquals(3, context.getStreamManager().getNumberOfStreams()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(2, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); + assertEquals(2, dag.getVertices().get(5).getComputation().getStream().getStreamNumber()); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(3).getComputation().getStream())); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(4).getComputation().getStream())); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(5).getComputation().getStream())); + } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java index e653d885..38f71e17 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java @@ -5,6 +5,7 @@ import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; /** * Mock class to test the GrCUDAExecutionContextTest, it has a null CUDARuntime; @@ -26,9 +27,11 @@ public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy) { new GrCUDAStreamManagerMock(null), dependencyPolicy); } - public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy, boolean syncStream, RetrieveNewStreamPolicyEnum retrieveStreamPolicy) { + public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy, boolean syncStream, + RetrieveNewStreamPolicyEnum retrieveStreamPolicy, + RetrieveParentStreamPolicyEnum parentStreamPolicyEnum) { super(null, null, - new GrCUDAStreamManagerMock(null, syncStream, retrieveStreamPolicy), dependencyPolicy); + new GrCUDAStreamManagerMock(null, syncStream, retrieveStreamPolicy, parentStreamPolicyEnum), dependencyPolicy); } public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java index 1776ad18..a8cc93cd 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java @@ -2,15 +2,17 @@ import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; public class GrCUDAExecutionContextMockBuilder { boolean syncStream = false; DependencyPolicyEnum dependencyPolicy = DependencyPolicyEnum.DEFAULT; RetrieveNewStreamPolicyEnum retrieveStreamPolicy = RetrieveNewStreamPolicyEnum.FIFO; + RetrieveParentStreamPolicyEnum parentStreamPolicyEnum = RetrieveParentStreamPolicyEnum.DEFAULT; public GrCUDAExecutionContextMock build() { - return new GrCUDAExecutionContextMock(dependencyPolicy, syncStream, retrieveStreamPolicy); + return new GrCUDAExecutionContextMock(dependencyPolicy, syncStream, retrieveStreamPolicy, parentStreamPolicyEnum); } public GrCUDAExecutionContextMockBuilder setSyncStream(boolean syncStream) { @@ -23,8 +25,13 @@ public GrCUDAExecutionContextMockBuilder setDependencyPolicy(DependencyPolicyEnu return this; } - public GrCUDAExecutionContextMockBuilder setRetrieveStreamPolicy(RetrieveNewStreamPolicyEnum retrieveStreamPolicy) { + public GrCUDAExecutionContextMockBuilder setRetrieveNewStreamPolicy(RetrieveNewStreamPolicyEnum retrieveStreamPolicy) { this.retrieveStreamPolicy = retrieveStreamPolicy; return this; } + + public GrCUDAExecutionContextMockBuilder setRetrieveParentStreamPolicy(RetrieveParentStreamPolicyEnum retrieveStreamPolicy) { + this.parentStreamPolicyEnum = retrieveStreamPolicy; + return this; + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index bdc16fac..a8e851b8 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -14,6 +14,7 @@ import java.util.Optional; import java.util.Queue; import java.util.Set; +import java.util.stream.Collectors; public class GrCUDAStreamManager { @@ -56,7 +57,7 @@ public GrCUDAStreamManager( // Get how streams are retrieved for computations with parents; switch(retrieveParentStreamPolicyEnum) { case DISJOINT: - this.retrieveParentStream = new DisjointRetrieveParentStream(); + this.retrieveParentStream = new DisjointRetrieveParentStream(this.retrieveNewStream); break; case DEFAULT: this.retrieveParentStream = new DefaultRetrieveParentStream(); @@ -285,13 +286,40 @@ public CUDAStream retrieve(ExecutionDAG.DAGVertex vertex) { } /** - * TODO: keep track of disjoint argument sets + * If a vertex has more than one children, each children is independent (otherwise the dependency would be added + * from one children to the other, and not from the actual parent). + * As such, children can be executed on different streams. In practice, this situation happens when children + * depends on disjoint arguments subsets of the parent kernel, e.g. K1(X,Y), K2(X), K3(Y). + * This policy re-uses the parent(s) stream(s) when possible, + * and computes other streams using the current {@link RetrieveNewStream}; */ - private class DisjointRetrieveParentStream extends RetrieveParentStream { + private static class DisjointRetrieveParentStream extends RetrieveParentStream { + private final RetrieveNewStream retrieveNewStream; + + // Keep track of computations for which we have already re-used the stream; + private final Set reusedComputations = new HashSet<>(); + + public DisjointRetrieveParentStream(RetrieveNewStream retrieveNewStream) { + this.retrieveNewStream = retrieveNewStream; + } @Override public CUDAStream retrieve(ExecutionDAG.DAGVertex vertex) { - return vertex.getParentComputations().get(0).getStream(); + // Keep only parent vertices for which we haven't reused the stream yet; + List availableParents = vertex.getParentVertices().stream() + .filter(v -> !reusedComputations.contains(v)) + .collect(Collectors.toList()); + // If there is at least one stream that can be re-used, take it; + if (!availableParents.isEmpty()) { + // The computation cannot be considered again; + reusedComputations.add(availableParents.get(0)); + // Return the stream associated to this computation; + return availableParents.get(0).getComputation().getStream(); + } else { + // If no parent stream can be reused, provide a new stream to this computation + // (or possibly a free one, depending on the policy); + return retrieveNewStream.retrieve(); + } } } } From 93a83dd059eed7af66de7d6e57648b5eafb841a9 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 24 May 2020 12:28:28 +0200 Subject: [PATCH 066/236] modified async exec model with CompletableFuture, still not working --- .../grcuda/test/gpu/ExecutionDAGTest.java | 198 +------------- .../GrCUDAExecutionContextTest.java | 258 ++++++++++++++++++ ...MultithreadGrCUDAExecutionContextTest.java | 156 +++++++++++ .../SyncGrCUDAExecutionContextTest.java | 127 --------- .../test/mock/GrCUDAStreamManagerMock.java | 5 + .../test/mock/GrCUDAThreadManagerMock.java | 16 ++ .../grcuda/test/mock/KernelExecutionMock.java | 26 +- ...MultithreadGrCUDAExecutionContextMock.java | 64 +++++ .../src/com/nvidia/grcuda/GrCUDAContext.java | 9 +- .../nvidia/grcuda/GrCUDAThreadManager.java | 20 +- .../nvidia/grcuda/array/AbstractArray.java | 2 +- .../com/nvidia/grcuda/array/DeviceArray.java | 2 + .../com/nvidia/grcuda/gpu/CUDARuntime.java | 3 + .../nvidia/grcuda/gpu/KernelArguments.java | 5 + .../gpu/computation/KernelExecution.java | 9 +- .../executioncontext/ExecutionPolicyEnum.java | 1 + .../GrCUDAExecutionContext.java | 42 --- .../MultithreadGrCUDAExecutionContext.java | 188 +++++++++++++ .../grcuda/gpu/stream/DefaultStream.java | 2 +- .../gpu/stream/GrCUDAStreamManager.java | 5 + .../python/benchmark/bench/bench_6.py | 4 +- 21 files changed, 761 insertions(+), 381 deletions(-) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/MultithreadGrCUDAExecutionContextTest.java delete mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/SyncGrCUDAExecutionContextTest.java create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAThreadManagerMock.java create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/MultithreadGrCUDAExecutionContext.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 61f430cb..b71e55b6 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -3,12 +3,10 @@ import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; +import com.nvidia.grcuda.test.mock.ArgumentMock; import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; import com.nvidia.grcuda.test.mock.KernelExecutionMock; -import com.nvidia.grcuda.test.mock.ArgumentMock; import com.oracle.truffle.api.interop.UnsupportedTypeException; -import org.graalvm.polyglot.Context; -import org.graalvm.polyglot.Value; import org.junit.Test; import java.util.Arrays; @@ -17,7 +15,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; public class ExecutionDAGTest { @@ -183,197 +180,4 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { assertTrue(dag.getVertices().get(5).isFrontier()); assertFalse(dag.getVertices().get(5).isStart()); } - - private static final int NUM_THREADS_PER_BLOCK = 128; - - private static final String SQUARE_KERNEL = - "extern \"C\" __global__ void square(float* x, int n) {\n" + - " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (idx < n) {\n" + - " x[idx] = x[idx] * x[idx];\n" + - " }" + - "}\n"; - - private static final String SQUARE_2_KERNEL = - "extern \"C\" __global__ void square(const float* x, float *y, int n) {\n" + - " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (idx < n) {\n" + - " y[idx] = x[idx] * x[idx];\n" + - " }" + - "}\n"; - - private static final String DIFF_KERNEL = - "extern \"C\" __global__ void diff(float* x, float* y, float* z, int n) {\n" + - " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (idx < n) {\n" + - " z[idx] = x[idx] - y[idx];\n" + - " }\n" + - "}"; - - private static final String REDUCE_KERNEL = - "extern \"C\" __global__ void reduce(float *x, float *res, int n) {\n" + - " __shared__ float cache[" + NUM_THREADS_PER_BLOCK + "];\n" + - " int i = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (i < n) {\n" + - " cache[threadIdx.x] = x[i];\n" + - " }\n" + - " __syncthreads();\n" + - " i = " + NUM_THREADS_PER_BLOCK + " / 2;\n" + - " while (i > 0) {\n" + - " if (threadIdx.x < i) {\n" + - " cache[threadIdx.x] += cache[threadIdx.x + i];\n" + - " }\n" + - " __syncthreads();\n" + - " i /= 2;\n" + - " }\n" + - " if (threadIdx.x == 0) {\n" + - " atomicAdd(res, cache[0]);\n" + - " }\n" + - "}"; - - @Test - public void dependencyPipelineSimpleTest() { - - try (Context context = Context.newBuilder().allowAllAccess(true).build()) { - - final int numElements = 10; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); - - assertNotNull(squareKernel); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 2.0); - y.setArrayElement(i, 4.0); - } - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, numElements); - configuredSquareKernel.execute(y, numElements); - - // Verify the output; - assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); - assertEquals(16.0, y.getArrayElement(0).asFloat(), 0.1); - } - } - - @Test - public void dependencyPipelineSimple2Test() { - - try (Context context = Context.newBuilder().allowAllAccess(true).build()) { - - // FIXME: this test fails randomly with small values (< 100000, more or less), - // but the same computation doesn't fail in Graalpython. - final int numElements = 100000; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value z = deviceArrayConstructor.execute("float", numElements); - Value res = deviceArrayConstructor.execute("float", 1); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 1.0 / (i + 1)); - y.setArrayElement(i, 2.0 / (i + 1)); - } - res.setArrayElement(0, 0.0); - - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); - Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "const pointer, const pointer, pointer, sint32"); - Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "const pointer, pointer, sint32"); - assertNotNull(squareKernel); - assertNotNull(diffKernel); - assertNotNull(reduceKernel); - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, numElements); - configuredSquareKernel.execute(y, numElements); - configuredDiffKernel.execute(x, y, z, numElements); - configuredReduceKernel.execute(z, res, numElements); - - // Verify the output; - float resScalar = res.getArrayElement(0).asFloat(); - assertEquals(-4.93, resScalar, 0.01); - } - } - - /** - * The read on "y" has to sync on the stream where the kernel is running, although that kernel doesn't use "y". - * This is due to the pre-Pascal limitations on managed memory accesses, - * and the inability to access an array while it is being used by a running kernel; - */ - @Test - public void dependencyPipelineSimple3Test() { - - try (Context context = Context.newBuilder().allowAllAccess(true).build()) { - - final int numElements = 100000; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value z = deviceArrayConstructor.execute("float", numElements); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 2.0); - } - - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_2_KERNEL, "square", "const pointer, pointer, sint32"); - assertNotNull(squareKernel); - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, z, numElements); - - // Verify the output; - assertEquals(0.0, y.getArrayElement(0).asFloat(), 0.1); - assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); - } - } - - @Test - public void dependencyPipelineSimple4Test() { - - try (Context context = Context.newBuilder().allowAllAccess(true).build()) { - - final int numElements = 100000; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value z = deviceArrayConstructor.execute("float", numElements); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 2.0); - } - // FIXME: if I write on array x, launch K(Y) then read(x), the last comp on x is array access, so no sync is done!!! - y.setArrayElement(0, 0); - - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_2_KERNEL, "square", "const pointer, pointer, sint32"); - assertNotNull(squareKernel); - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, z, numElements); - - // Verify the output; - assertEquals(0.0, y.getArrayElement(0).asFloat(), 0.1); - assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); - } - } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java new file mode 100644 index 00000000..064e0bfc --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java @@ -0,0 +1,258 @@ +package com.nvidia.grcuda.test.gpu.executioncontext; + +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Value; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Arrays; +import java.util.Collection; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(Parameterized.class) +public class GrCUDAExecutionContextTest { + + /** + * Tests are executed for each of the {@link com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext} values; + * @return the current stream policy + */ + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[][]{ +// {"sync"}, +// {"default"}, + {"multithread"}, + }); + } + + private final String policy; + + public GrCUDAExecutionContextTest(String policy) { + this.policy = policy; + } + + private static final int NUM_THREADS_PER_BLOCK = 128; + + private static final String SQUARE_KERNEL = + "extern \"C\" __global__ void square(float* x, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " x[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + + private static final String SQUARE_2_KERNEL = + "extern \"C\" __global__ void square(const float* x, float *y, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " y[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + + private static final String DIFF_KERNEL = + "extern \"C\" __global__ void diff(float* x, float* y, float* z, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " z[idx] = x[idx] - y[idx];\n" + + " }\n" + + "}"; + + private static final String REDUCE_KERNEL = + "extern \"C\" __global__ void reduce(float *x, float *res, int n) {\n" + + " __shared__ float cache[" + NUM_THREADS_PER_BLOCK + "];\n" + + " int i = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (i < n) {\n" + + " cache[threadIdx.x] = x[i];\n" + + " }\n" + + " __syncthreads();\n" + + " i = " + NUM_THREADS_PER_BLOCK + " / 2;\n" + + " while (i > 0) {\n" + + " if (threadIdx.x < i) {\n" + + " cache[threadIdx.x] += cache[threadIdx.x + i];\n" + + " }\n" + + " __syncthreads();\n" + + " i /= 2;\n" + + " }\n" + + " if (threadIdx.x == 0) {\n" + + " atomicAdd(res, cache[0]);\n" + + " }\n" + + "}"; + + @Test + public void dependencyKernelSimpleTest() { + + try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", this.policy).allowAllAccess(true).build()) { + + final int numElements = 10; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + + assertNotNull(squareKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + +// Thread.sleep(10000); + + // Verify the output; + assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); + } + } + + @Test + public void dependency2KernelsSimpleTest() { + + try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", this.policy).allowAllAccess(true).build()) { + + final int numElements = 10; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + + assertNotNull(squareKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + y.setArrayElement(i, 4.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + configuredSquareKernel.execute(y, numElements); + + // Verify the output; + assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(16.0, y.getArrayElement(0).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineSimple2Test() { + + try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", this.policy).allowAllAccess(true).build()) { + + // FIXME: this test fails randomly with small values (< 100000, more or less), + // but the same computation doesn't fail in Graalpython. + final int numElements = 100000; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value res = deviceArrayConstructor.execute("float", 1); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 1.0 / (i + 1)); + y.setArrayElement(i, 2.0 / (i + 1)); + } + res.setArrayElement(0, 0.0); + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "const pointer, const pointer, pointer, sint32"); + Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "const pointer, pointer, sint32"); + assertNotNull(squareKernel); + assertNotNull(diffKernel); + assertNotNull(reduceKernel); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + configuredSquareKernel.execute(y, numElements); + configuredDiffKernel.execute(x, y, z, numElements); + configuredReduceKernel.execute(z, res, numElements); + + // Verify the output; + float resScalar = res.getArrayElement(0).asFloat(); + assertEquals(-4.93, resScalar, 0.01); + } + } + + /** + * The read on "y" has to sync on the stream where the kernel is running, although that kernel doesn't use "y". + * This is due to the pre-Pascal limitations on managed memory accesses, + * and the inability to access an array while it is being used by a running kernel; + */ + @Test + public void dependencyPipelineSimple3Test() { + + try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", this.policy).allowAllAccess(true).build()) { + + final int numElements = 100000; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_2_KERNEL, "square", "const pointer, pointer, sint32"); + assertNotNull(squareKernel); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, z, numElements); + + // Verify the output; + assertEquals(0.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineSimple4Test() throws InterruptedException { + + try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", this.policy).allowAllAccess(true).build()) { + + final int numElements = 100000; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + // FIXME: if I write on array x, launch K(Y) then read(x), the last comp on x is array access, so no sync is done!!! + y.setArrayElement(0, 0); + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_2_KERNEL, "square", "const pointer, pointer, sint32"); + assertNotNull(squareKernel); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, z, numElements); + // Verify the output; + assertEquals(0.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); + } + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/MultithreadGrCUDAExecutionContextTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/MultithreadGrCUDAExecutionContextTest.java new file mode 100644 index 00000000..3a190f20 --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/MultithreadGrCUDAExecutionContextTest.java @@ -0,0 +1,156 @@ +package com.nvidia.grcuda.test.gpu.executioncontext; + +import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; +import com.nvidia.grcuda.test.mock.ArgumentMock; +import com.nvidia.grcuda.test.mock.KernelExecutionMock; +import com.nvidia.grcuda.test.mock.MultithreadGrCUDAExecutionContextMock; +import com.oracle.truffle.api.interop.UnsupportedTypeException; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class MultithreadGrCUDAExecutionContextTest { + + @Test + public void multithreadAddVertexToDAGTest() throws UnsupportedTypeException { + MultithreadGrCUDAExecutionContextMock context = new MultithreadGrCUDAExecutionContextMock(); + // Create two mock kernel executions; + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2)), 100).schedule(); + + ExecutionDAG dag = context.getDag(); + + assertEquals(1, dag.getNumVertices()); + assertEquals(0, dag.getNumEdges()); + assertEquals(1, dag.getFrontier().size()); + assertTrue(dag.getFrontier().get(0).isFrontier()); + assertTrue(dag.getFrontier().get(0).isStart()); + + KernelExecutionMock k2 = new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2)), 100); + k2.schedule(); + + assertEquals(2, dag.getNumVertices()); + assertEquals(1, dag.getNumEdges()); + assertEquals(1, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(dag.getVertices().get(1), dag.getFrontier().get(0)); + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(1).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isStart()); + // Check if the first vertex is a parent of the second; + assertEquals(dag.getVertices().get(0), dag.getVertices().get(1).getParentVertices().get(0)); + // Check if the second vertex is a child of the first; + assertEquals(dag.getVertices().get(1), dag.getVertices().get(0).getChildVertices().get(0)); + + context.waitFinish(k2); + assertEquals(0, dag.getFrontier().size()); + } + + @Test + public void dependencyPipelineSimpleMockTest() throws UnsupportedTypeException { + MultithreadGrCUDAExecutionContextMock context = new MultithreadGrCUDAExecutionContextMock(); + // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, + // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), + // and kernel 4 (argument "3" is active); + // A(1) -> C(1,2,3) -> D(3) + // B(2) / + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1)), 100).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2)), 100).schedule(); + new KernelExecutionMock(context, + Arrays.asList(new ArgumentMock(1), new ArgumentMock(2), new ArgumentMock(3)), 100).schedule(); + KernelExecutionMock k3 = new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(3)), 100); + k3.schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(4, dag.getNumVertices()); + assertEquals(3, dag.getNumEdges()); + assertEquals(2, dag.getFrontier().size()); + // Check updates to frontier and start status; + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3))), + new HashSet<>(dag.getFrontier())); + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertTrue(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertFalse(dag.getVertices().get(2).isStart()); + assertTrue(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + // Check if the third vertex is a child of first and second; + assertEquals(2, dag.getVertices().get(2).getParents().size()); + assertEquals(new HashSet<>(dag.getVertices().get(2).getParentVertices()), + new HashSet<>(Arrays.asList(dag.getVertices().get(0), dag.getVertices().get(1)))); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(0).getChildVertices().get(0)); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(1).getChildVertices().get(0)); + // Check if the fourth vertex is a child of the third; + assertEquals(1, dag.getVertices().get(3).getParents().size()); + assertEquals(1, dag.getVertices().get(2).getChildren().size()); + assertEquals(dag.getVertices().get(2), dag.getVertices().get(3).getParentVertices().get(0)); + assertEquals(dag.getVertices().get(3), dag.getVertices().get(2).getChildVertices().get(0)); + + context.waitFinish(k3); + assertEquals(0, dag.getFrontier().size()); + } + + @Test + public void complexFrontierMockTest() throws UnsupportedTypeException, InterruptedException { + MultithreadGrCUDAExecutionContextMock context = new MultithreadGrCUDAExecutionContextMock(); + + // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) + // \ C(2) + KernelExecutionMock k1 = new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(2)), 100); + k1.schedule(); + KernelExecutionMock k2 = new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1)), 200); + k2.schedule(); + KernelExecutionMock k3 = new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2)), 100); + k3.schedule(); + KernelExecutionMock k4 = new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(3)), 100); + k4.schedule(); + KernelExecutionMock k5 = new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(4)), 100); + k5.schedule(); + KernelExecutionMock k6 = new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(4)), 100); + k6.schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check the DAG structure; + assertEquals(6, dag.getNumVertices()); + assertEquals(5, dag.getNumEdges()); + assertEquals(4, dag.getFrontier().size()); + + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3), dag.getVertices().get(4), dag.getVertices().get(5))), + new HashSet<>(dag.getFrontier())); + + assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isStart()); + assertFalse(dag.getVertices().get(1).isFrontier()); + assertFalse(dag.getVertices().get(1).isStart()); + assertTrue(dag.getVertices().get(2).isFrontier()); + assertFalse(dag.getVertices().get(2).isStart()); + assertTrue(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(3).isStart()); + assertTrue(dag.getVertices().get(4).isFrontier()); + assertFalse(dag.getVertices().get(4).isStart()); + assertTrue(dag.getVertices().get(5).isFrontier()); + assertFalse(dag.getVertices().get(5).isStart()); + + context.waitFinish(k3); + context.waitFinish(k6); + + // Check the DAG structure; + assertEquals(6, dag.getNumVertices()); + assertEquals(5, dag.getNumEdges()); + assertEquals(0, dag.getFrontier().size()); + } + +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/SyncGrCUDAExecutionContextTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/SyncGrCUDAExecutionContextTest.java deleted file mode 100644 index ec28bda8..00000000 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/SyncGrCUDAExecutionContextTest.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.nvidia.grcuda.test.gpu.executioncontext; - -import org.graalvm.polyglot.Context; -import org.graalvm.polyglot.Value; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class SyncGrCUDAExecutionContextTest { - - private static final int NUM_THREADS_PER_BLOCK = 128; - - private static final String SQUARE_KERNEL = - "extern \"C\" __global__ void square(float* x, int n) {\n" + - " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (idx < n) {\n" + - " x[idx] = x[idx] * x[idx];\n" + - " }" + - "}\n"; - - private static final String DIFF_KERNEL = - "extern \"C\" __global__ void diff(float* x, float* y, float* z, int n) {\n" + - " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (idx < n) {\n" + - " z[idx] = x[idx] - y[idx];\n" + - " }\n" + - "}"; - - private static final String REDUCE_KERNEL = - "extern \"C\" __global__ void reduce(float *x, float *res, int n) {\n" + - " __shared__ float cache[" + NUM_THREADS_PER_BLOCK + "];\n" + - " int i = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (i < n) {\n" + - " cache[threadIdx.x] = x[i];\n" + - " }\n" + - " __syncthreads();\n" + - " i = " + NUM_THREADS_PER_BLOCK + " / 2;\n" + - " while (i > 0) {\n" + - " if (threadIdx.x < i) {\n" + - " cache[threadIdx.x] += cache[threadIdx.x + i];\n" + - " }\n" + - " __syncthreads();\n" + - " i /= 2;\n" + - " }\n" + - " if (threadIdx.x == 0) {\n" + - " atomicAdd(res, cache[0]);\n" + - " }\n" + - "}"; - - @Test - public void dependencyPipelineSimpleSyncTest() { - - try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", "sync").allowAllAccess(true).build()) { - - final int numElements = 10; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); - - assertNotNull(squareKernel); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 2.0); - y.setArrayElement(i, 4.0); - } - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, numElements); - configuredSquareKernel.execute(y, numElements); - - // Verify the output; - assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); - assertEquals(16.0, y.getArrayElement(0).asFloat(), 0.1); - } - } - - @Test - public void dependencyPipelineSimple2SyncTest() { - - try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", "sync").allowAllAccess(true).build()) { - - // FIXME: this test fails randomly with small values (< 100000, more or less), - // but the same computation doesn't fail in Graalpython. - final int numElements = 100000; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value z = deviceArrayConstructor.execute("float", numElements); - Value res = deviceArrayConstructor.execute("float", 1); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 1.0 / (i + 1)); - y.setArrayElement(i, 2.0 / (i + 1)); - } - res.setArrayElement(0, 0.0); - - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); - Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32"); - Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32"); - assertNotNull(squareKernel); - assertNotNull(diffKernel); - assertNotNull(reduceKernel); - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, numElements); - configuredSquareKernel.execute(y, numElements); - configuredDiffKernel.execute(x, y, z, numElements); - configuredReduceKernel.execute(z, res, numElements); - - // Verify the output; - float resScalar = res.getArrayElement(0).asFloat(); - assertEquals(-4.93, resScalar, 0.01); - } - } -} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index 13558ebd..830e9634 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -46,6 +46,11 @@ public CUDAStream createStream() { return newStream; } + @Override + public void syncStream(CUDAStream stream) { + + } + @Override public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { if (syncParents) { diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAThreadManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAThreadManagerMock.java new file mode 100644 index 00000000..4a5ed722 --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAThreadManagerMock.java @@ -0,0 +1,16 @@ +package com.nvidia.grcuda.test.mock; + +import com.nvidia.grcuda.GrCUDAThreadManager; + +public class GrCUDAThreadManagerMock extends GrCUDAThreadManager { + public GrCUDAThreadManagerMock(int numberOfThreads) { + super(null, numberOfThreads); + } + + @Override + protected Thread createJavaThread(Runnable runnable) { + Thread thread = new Thread(runnable); + toJoin.add(thread); + return thread; + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java index 4ed9aa6c..0a0d9366 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/KernelExecutionMock.java @@ -3,7 +3,7 @@ import com.nvidia.grcuda.NoneValue; import com.nvidia.grcuda.gpu.computation.ComputationArgumentWithValue; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; -import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import java.util.List; import java.util.stream.Collectors; @@ -13,12 +13,32 @@ */ public class KernelExecutionMock extends GrCUDAComputationalElement { - public KernelExecutionMock(GrCUDAExecutionContext grCUDAExecutionContext, List args) { + /** + * Simulate an execution by forcing a wait that last the given number of milliseconds; + */ + private int durationMs = 0; + + public KernelExecutionMock(AbstractGrCUDAExecutionContext grCUDAExecutionContext, List args) { super(grCUDAExecutionContext, args); } + public KernelExecutionMock(AbstractGrCUDAExecutionContext grCUDAExecutionContext, List args, int durationMs) { + super(grCUDAExecutionContext, args); + this.durationMs = durationMs; + } + @Override - public Object execute() { return NoneValue.get(); } + public Object execute() { + if (this.durationMs > 0) { + try { + Thread.sleep(this.durationMs); + } catch (InterruptedException e) { + System.out.println("ERROR; failed to pause " + this + " for " + this.durationMs + " msec"); + e.printStackTrace(); + } + } + return NoneValue.get(); + } @Override public boolean canUseStream() { return true; } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java new file mode 100644 index 00000000..fd7635ef --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java @@ -0,0 +1,64 @@ +package com.nvidia.grcuda.test.mock; + +import com.nvidia.grcuda.gpu.computation.ArrayStreamArchitecturePolicy; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.computation.PrePascalArrayStreamAssociation; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; +import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; +import com.nvidia.grcuda.gpu.executioncontext.MultithreadGrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +/** + * Mock class to test the GrCUDAExecutionContextTest, it has a null CUDARuntime; + */ +public class MultithreadGrCUDAExecutionContextMock extends MultithreadGrCUDAExecutionContext { + + private static final int THREAD_NUM = 16; + + public MultithreadGrCUDAExecutionContextMock(boolean syncStream) { + super(null, new GrCUDAThreadManagerMock(THREAD_NUM), + new GrCUDAStreamManagerMock(null, syncStream), DependencyPolicyEnum.DEFAULT); + } + + public MultithreadGrCUDAExecutionContextMock() { + super(null, new GrCUDAThreadManagerMock(THREAD_NUM), + new GrCUDAStreamManagerMock(null), DependencyPolicyEnum.DEFAULT); + } + + public MultithreadGrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy) { + super(null, new GrCUDAThreadManagerMock(THREAD_NUM), + new GrCUDAStreamManagerMock(null), dependencyPolicy); + } + + public MultithreadGrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy, boolean syncStream, + RetrieveNewStreamPolicyEnum retrieveStreamPolicy, + RetrieveParentStreamPolicyEnum parentStreamPolicyEnum) { + super(null, new GrCUDAThreadManagerMock(THREAD_NUM), + new GrCUDAStreamManagerMock(null, syncStream, retrieveStreamPolicy, parentStreamPolicyEnum), dependencyPolicy); + } + + public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { + return new PrePascalArrayStreamAssociation(); + } + + // Used to wait the end of a specific computation; + public void waitFinish(GrCUDAComputationalElement computation) { + System.out.println("-- forcing wait of " + computation); + for (Map.Entry> entry : activeComputations.entrySet()) { + if (entry.getKey().getComputation().equals(computation)) { + try { + CompletableFuture task = entry.getValue(); + task.get(); + } catch (InterruptedException | ExecutionException e) { + System.out.println("failed to wait for computation " + computation + " to finish"); + e.printStackTrace(); + } + } + } + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index 9175cb02..d615f4ad 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -43,9 +43,10 @@ import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.ExecutionPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.executioncontext.MultithreadGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.SyncGrCUDAExecutionContext; -import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.TruffleLanguage.Env; @@ -101,6 +102,9 @@ public GrCUDAContext(Env env) { case SYNC: this.grCUDAExecutionContext = new SyncGrCUDAExecutionContext(this, env, dependencyPolicy); break; + case MULTITHREAD: + this.grCUDAExecutionContext = new MultithreadGrCUDAExecutionContext(this, env, dependencyPolicy); + break; case DEFAULT: this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env ,dependencyPolicy); break; @@ -130,7 +134,6 @@ public GrCUDAContext(Env env) { new CUBLASRegistry(this).registerCUBLASFunctions(blas); } this.rootNamespace = namespace; - } public Env getEnv() { @@ -202,6 +205,8 @@ private static ExecutionPolicyEnum parseExecutionPolicy(String policyString) { switch(policyString) { case "sync": return ExecutionPolicyEnum.SYNC; + case "multithread": + return ExecutionPolicyEnum.MULTITHREAD; case "default": return ExecutionPolicyEnum.DEFAULT; default: diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java index 987973cc..64756d62 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java @@ -8,23 +8,29 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; public class GrCUDAThreadManager { private final ExecutorService threadPool; private final GrCUDAContext context; - private final List toJoin; + protected final List toJoin; public GrCUDAThreadManager(GrCUDAContext context) { + this(context, context.getNumberOfThreads()); + } + + public GrCUDAThreadManager(GrCUDAContext context, int numberOfThreads) { this.toJoin = new LinkedList<>(); this.context = context; - this.threadPool = Executors.newFixedThreadPool(context.getNumberOfThreads(), this::createJavaThread); + this.threadPool = Executors.newFixedThreadPool(numberOfThreads, this::createJavaThread); } - private Thread createJavaThread(Runnable runnable) { + protected Thread createJavaThread(Runnable runnable) { Thread thread = context.getEnv().createThread(runnable); toJoin.add(thread); + System.out.println("-- created thread " + thread); return thread; } @@ -36,6 +42,10 @@ public Future submitCallable(Callable task) { return threadPool.submit(task); } + public void submitTask(FutureTask task) { + threadPool.submit(task); + } + public List getResults(Collection> futures) { List results = new LinkedList<>(); futures.forEach(f -> { @@ -49,6 +59,10 @@ public List getResults(Collection> futures) { return results; } + public ExecutorService getThreadPool() { + return threadPool; + } + public void finalizeManager() { if (threadPool == null) return; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 1f308642..0961cb24 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -89,7 +89,7 @@ public void setStreamMapping(CUDAStream streamMapping) { public boolean isLastComputationArrayAccess() { return isLastComputationArrayAccess; } - public void setLastComputationArrayAccess(boolean lastComputationArrayAccess) { + public synchronized void setLastComputationArrayAccess(boolean lastComputationArrayAccess) { isLastComputationArrayAccess = lastComputationArrayAccess; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index 49744f93..f0227bd5 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -175,6 +175,7 @@ Object readArrayElement(long index, throw InvalidArrayIndexException.create(index); } try { +// System.out.println("reading index " + index + " on array " + this.toString()); if (this.canSkipScheduling()) { // Fast path, skip the DAG scheduling; return readArrayElementImpl(index, elementTypeProfile); @@ -188,6 +189,7 @@ Object readArrayElement(long index, } public Object readArrayElementImpl(long index, ValueProfile elementTypeProfile) { +// System.out.println("read array impl[" + index + "] of " + this); switch (elementTypeProfile.profile(elementType)) { case BYTE: case CHAR: diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index ba303065..b534e22c 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -831,6 +831,8 @@ public void cuLaunchKernel(Kernel kernel, KernelConfig config, KernelArguments a Object callable = CUDADriverFunction.CU_LAUNCHKERNEL.getSymbol(this); Dim3 gridSize = config.getGridSize(); Dim3 blockSize = config.getBlockSize(); + System.out.println("LAUNCH KERNEL " + kernel.getKernelName() + "; GRID=" + gridSize + "; BLOCK=" + blockSize + "; SMEMORY=" + config.getDynamicSharedMemoryBytes() + + "; STREAM=" + stream + "; ARGS=" + args); Object result = INTEROP.execute(callable, kernel.getKernelFunction(), gridSize.getX(), @@ -956,6 +958,7 @@ private static void checkCUReturnCode(Object result, String... function) { result.getClass().getName()); } if (returnCode != 0) { + System.out.println("ERROR CODE=" + returnCode); throw new GrCUDAException(returnCode, DriverAPIErrorMessages.getString(returnCode), function); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java index 7730c760..42bd18d9 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/KernelArguments.java @@ -6,6 +6,7 @@ import java.io.Closeable; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public final class KernelArguments implements Closeable { @@ -49,6 +50,10 @@ public List getKernelArgumentWithValues() { return kernelArgumentWithValues; } + @Override + public String toString() { + return "KernelArgs=" + Arrays.toString(originalArgs); + } @Override public void close() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index e4aba3c4..64f78236 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -83,8 +83,11 @@ public CUDAStream getStream() { public void associateArraysToStreamImpl() { for (ComputationArgumentWithValue a : args.getKernelArgumentWithValues()) { if (this.getDependencyComputation().keepArgument(a)) { - // Attach the array to the stream, synchronously; - grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(this.getStream(), (AbstractArray) a.getArgumentValue()); + AbstractArray array = (AbstractArray) a.getArgumentValue(); + // Attach the array to the stream, synchronously, if the array isn't already attached to this stream; + if (!array.getStreamMapping().equals(this.getStream())) { + grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(this.getStream(), (AbstractArray) a.getArgumentValue()); + } } } } @@ -110,7 +113,7 @@ static class KernelExecutionInitializer implements InitializeArgumentList { @Override public List initialize() { - // TODO: what aboout scalars? We cannot treat them in the same way, as they are copied and not referenced + // TODO: what about scalars? We cannot treat them in the same way, as they are copied and not referenced // There should be a semantic to manually specify scalar dependencies? For now we have to skip them; return this.args.getKernelArgumentWithValues().stream() .filter(ComputationArgument::isArray).collect(Collectors.toList()); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java index 4583e528..6c95a60e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java @@ -2,6 +2,7 @@ public enum ExecutionPolicyEnum { SYNC("sync"), + MULTITHREAD("multithread"), DEFAULT("default"); private final String name; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java index 160bc950..0c59cf10 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java @@ -20,10 +20,6 @@ public class GrCUDAExecutionContext extends AbstractGrCUDAExecutionContext { * scheduling computations on different streams; */ private final GrCUDAStreamManager streamManager; - /** - * Store a reference to the thread manager used to schedule GPU computations; - */ - private final GrCUDAThreadManager threadManager; public GrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyPolicyEnum dependencyPolicy) { this(new CUDARuntime(context, env), new GrCUDAThreadManager(context), dependencyPolicy); @@ -35,7 +31,6 @@ public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threa public GrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, GrCUDAStreamManager streamManager, DependencyPolicyEnum dependencyPolicy) { super(cudaRuntime, dependencyPolicy); - this.threadManager = threadManager; this.streamManager = streamManager; } @@ -54,11 +49,6 @@ public Object registerExecution(GrCUDAComputationalElement computation) throws U // Start the computation; return executeComputationSync(vertex); - -// // If the computation can be executed immediately, start it; -// if (vertex.isExecutable() && threadManager != null) { -// threadManager.submitRunnable(new ComputationThread(vertex)); -// } } @Override @@ -75,7 +65,6 @@ public GrCUDAStreamManager getStreamManager() { */ @Override public void cleanup() { - threadManager.finalizeManager(); streamManager.cleanup(); } @@ -90,35 +79,4 @@ private Object executeComputationSync(ExecutionDAG.DAGVertex vertex) throws Unsu vertex.getComputation().updateIsComputationArrayAccess(); return vertex.getComputation().execute(); } - - private class ComputationThread implements Runnable { - - private final ExecutionDAG.DAGVertex vertex; - - public ComputationThread(ExecutionDAG.DAGVertex vertex) { - this.vertex = vertex; - } - - public void run(){ - // Perform the computation; - System.out.println("Starting execution of " + vertex.getComputation()); - vertex.getComputation().setComputationStarted(); - try { - vertex.getComputation().execute(); - } catch (UnsupportedTypeException e) { - e.printStackTrace(); - } - // Synchronize on the stream associated to this computation; - System.out.println("\tsync thread on stream " + vertex.getComputation().getStream()); - cudaRuntime.cudaStreamSynchronize(vertex.getComputation().getStream()); - vertex.getComputation().setComputationFinished(); - System.out.println("\tfinish sync thread on stream " + vertex.getComputation().getStream()); - // Update the status of this computation and of its children; - vertex.getChildVertices().forEach(v -> { - if (v.isExecutable() && threadManager != null) { - threadManager.submitRunnable(new ComputationThread(v)); - } - }); - } - } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/MultithreadGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/MultithreadGrCUDAExecutionContext.java new file mode 100644 index 00000000..20ae658b --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/MultithreadGrCUDAExecutionContext.java @@ -0,0 +1,188 @@ +package com.nvidia.grcuda.gpu.executioncontext; + +import com.nvidia.grcuda.GrCUDAContext; +import com.nvidia.grcuda.GrCUDAThreadManager; +import com.nvidia.grcuda.NoneValue; +import com.nvidia.grcuda.gpu.CUDARuntime; +import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; +import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; +import com.oracle.truffle.api.TruffleLanguage; +import com.oracle.truffle.api.interop.UnsupportedTypeException; + +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.CompletableFuture; + +/** + * Class used to monitor the state of GrCUDA execution, keep track of memory allocated, + * kernels and other executable functions, and dependencies between elements. + */ +public class MultithreadGrCUDAExecutionContext extends AbstractGrCUDAExecutionContext { + + /** + * Reference to the {@link GrCUDAStreamManager} that takes care of + * scheduling computations on different streams; + */ + private final GrCUDAStreamManager streamManager; + /** + * Store a reference to the thread manager used to schedule GPU computations; + */ + private final GrCUDAThreadManager threadManager; + + protected final HashMap> activeComputations = new HashMap<>(); + + public MultithreadGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyPolicyEnum dependencyPolicy) { + this(new CUDARuntime(context, env), new GrCUDAThreadManager(context), dependencyPolicy); + } + + public MultithreadGrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, DependencyPolicyEnum dependencyPolicy) { + this(cudaRuntime, threadManager, new GrCUDAStreamManager(cudaRuntime), dependencyPolicy); + } + + public MultithreadGrCUDAExecutionContext(CUDARuntime cudaRuntime, GrCUDAThreadManager threadManager, + GrCUDAStreamManager streamManager, DependencyPolicyEnum dependencyPolicy) { + super(cudaRuntime, dependencyPolicy); + this.threadManager = threadManager; + this.streamManager = streamManager; + } + + /** + * Register this computation for future execution by the {@link MultithreadGrCUDAExecutionContext}, + * and add it to the current computational DAG. + * The actual execution might be deferred depending on the inferred data dependencies; + */ + @Override + public Object registerExecution(GrCUDAComputationalElement computation) throws UnsupportedTypeException { + + // Add the new computation to the DAG + ExecutionDAG.DAGVertex vertex = dag.append(computation); + + // Compute the stream where the computation will be done; + streamManager.assignStream(vertex); + + // Update for each input array if the latest scheduled computation (i.e. this one) is an array access; + vertex.getComputation().updateIsComputationArrayAccess(); + + // Schedule the computation on a thread if it support asynchronous execution on a stream, + // else do it synchronously; + if (vertex.getComputation().canUseStream() && threadManager != null) { + + System.out.println("-- schedule " + vertex.getComputation()); + + if (vertex.isExecutable()) { + // If the computation can be executed immediately, start it; + CompletableFuture futureResult = CompletableFuture.supplyAsync( + () -> new ComputationThread(vertex).call(), threadManager.getThreadPool()) + .exceptionally(ex -> { + System.out.println("Exception encountered in computation thread of " + + vertex.getComputation() + ": " + ex.getMessage()); + return NoneValue.get(); + }); + activeComputations.put(vertex, futureResult); + } else { + // If the computation has dependencies, add the callback logic; + List parents = vertex.getParentVertices(); + CompletableFuture parentResult = CompletableFuture.allOf(parents.stream().map(activeComputations::get).toArray(CompletableFuture[]::new)); + CompletableFuture futureResult = parentResult.thenCompose((res) -> CompletableFuture.supplyAsync(() -> new ComputationThread(vertex).call(), threadManager.getThreadPool()) + .exceptionally(ex -> { + System.out.println("Exception encountered in computation thread of " + + vertex.getComputation() + ": " + ex.getMessage()); + return NoneValue.get(); + }) + ); + activeComputations.put(vertex, futureResult); + } + return NoneValue.get(); + } else { + return executeComputationSync(vertex); + } + } + + @Override + public boolean isAnyComputationActive() { + return this.streamManager.isAnyComputationActive(); + } + + public GrCUDAStreamManager getStreamManager() { + return streamManager; + } + + /** + * Delete internal structures that require manual cleanup operations; + */ + @Override + public void cleanup() { + threadManager.finalizeManager(); + streamManager.cleanup(); + } + + private Object executeComputationSync(ExecutionDAG.DAGVertex vertex) { + + // Before starting this computation, ensure that all active threads are finished; + System.out.println("-- running sync " + vertex.getComputation()); + + List parents = vertex.getParentVertices(); + if (parents.size() == 1) { + CompletableFuture result = activeComputations.get(parents.get(0)); + System.out.println("\t* parent 0 iscanc=" + result.isCancelled() + "; isdone=" + result.isDone() + "; isdoneexc=" + result.isCompletedExceptionally()); + return result.thenApply((r) -> { + // Perform the computation; + return executeComputationSyncInternal(vertex); + }); + } else if (parents.size() > 1) { + System.out.println("\t* must sync " + parents.size() + " parents"); + CompletableFuture result = CompletableFuture.allOf(parents.stream().map(activeComputations::get).toArray(CompletableFuture[]::new)); + System.out.println("\t* parents iscanc=" + result.isCancelled() + "; isdone=" + result.isDone() + "; isdoneexc=" + result.isCompletedExceptionally()); + return result.thenApply((r) -> { + // Perform the computation; + return executeComputationSyncInternal(vertex); + }); + } else { + // No parents; + return executeComputationSyncInternal(vertex); + } + } + + private Object executeComputationSyncInternal(ExecutionDAG.DAGVertex vertex) { + // Perform the computation; + vertex.getComputation().setComputationStarted(); + try { + return vertex.getComputation().execute(); + } catch (UnsupportedTypeException e) { + System.out.println("Error in sync execution of " + vertex.getComputation() + " = " + e.getMessage()); + e.printStackTrace(); + return NoneValue.get(); + } + } + + protected class ComputationThread implements Callable { + + private final ExecutionDAG.DAGVertex vertex; + + public ComputationThread(ExecutionDAG.DAGVertex vertex) { + this.vertex = vertex; + } + + public Object call() { + // Perform the computation; + System.out.println("-- running async " + vertex.getComputation()); + vertex.getComputation().setComputationStarted(); + try { + vertex.getComputation().execute(); + } catch (UnsupportedTypeException e) { + System.out.println("Error in async execution of " + vertex.getComputation() + " = " + e.getMessage()); + e.printStackTrace(); + throw new RuntimeException(e); + } + // Synchronize on the stream associated to this computation; + System.out.println("\tsync thread on stream " + vertex.getComputation().getStream() + " by " + vertex.getComputation()); + streamManager.syncStream(vertex.getComputation().getStream()); + vertex.getComputation().setComputationFinished(); + System.out.println("\tfinish sync thread on stream " + vertex.getComputation().getStream()); + + return NoneValue.get(); + } + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java index 00644885..48e056de 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java @@ -2,7 +2,7 @@ public class DefaultStream extends CUDAStream { - static final int DEFAULT_STREAM_NUMBER = 0; + static final int DEFAULT_STREAM_NUMBER = -1; private static final DefaultStream defaultStream = new DefaultStream(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index a8e851b8..19d07eda 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -162,9 +162,14 @@ private void syncParentStreamsImpl( public CUDAStream createStream() { CUDAStream newStream = runtime.cudaStreamCreate(streams.size()); streams.add(newStream); + System.out.println("craeted stream " + newStream); return newStream; } + public void syncStream(CUDAStream stream) { + runtime.cudaStreamSynchronize(stream); + } + /** * Obtain the number of streams managed by this manager; */ diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index ca16e662..f570132b 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -189,8 +189,8 @@ def __init__(self, benchmark: BenchmarkResult): self.nb_amax = None self.nb_l = None - self.num_features = 1000 # self.nb_feat_log_prob_np.shape[1] - self.num_classes = 5 # self.nb_feat_log_prob_np.shape[0] + self.num_features = 10000 # self.nb_feat_log_prob_np.shape[1] + self.num_classes = 50 # self.nb_feat_log_prob_np.shape[0] self.num_blocks_size = 0 self.num_blocks_feat = (self.num_features + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK From fb582b6e0a2da8f81b91982c37b2cccbe6185346 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 27 May 2020 12:00:33 +0200 Subject: [PATCH 067/236] temporarily switched to java 11; fixed multiple args not working with nvrtc; added mock classes to test multithreaded scheduling --- README.md | 3 +- install.sh | 5 ++ mx.grcuda/suite.py | 4 +- .../GrCUDAExecutionContextTest.java | 4 +- ...MultithreadGrCUDAExecutionContextMock.java | 15 ++++ .../nvidia/grcuda/GrCUDAThreadManager.java | 2 +- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 49 +++++++++++- .../nvidia/grcuda/gpu/NVRuntimeCompiler.java | 3 +- .../com/nvidia/grcuda/gpu/UnsafeHelper.java | 3 +- .../gpu/computation/KernelExecution.java | 5 +- .../MultithreadGrCUDAExecutionContext.java | 78 +++++++++++-------- 11 files changed, 129 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 164031b7..20e3bd14 100644 --- a/README.md +++ b/README.md @@ -262,7 +262,8 @@ graalpython -m ginstall install numpy; 8. **Setup your IDE with** `mx ideinit` * Also update the project SDK and the default JUnit configurations to use the GraalVM SDK in `$GRAAL_HOME`, and update the `PATH` variable so that it can find `nvcc` - +* Modify the template Junit test configuration adding `-Djava.library.path="/path/to/graalvmbuild/lib` to the VM options to find `trufflenfi` + and update the environment variables with `PATH=your/path/env/var` to find `nvcc` 9. **Run tests with** `mx unittest com.nvidia` * Run a specific test using, for example, `mx unittest com.nvidia.grcuda.test.gpu.ExecutionDAGTest#executionDAGConstructorTest` diff --git a/install.sh b/install.sh index 5e87f8dc..c956fb50 100755 --- a/install.sh +++ b/install.sh @@ -1,6 +1,11 @@ #!/bin/sh mx build; + +# Java 8; mkdir -p $GRAAL_HOME/jre/languages/grcuda; cp mxbuild/dists/jdk1.8/grcuda.jar $GRAAL_HOME/jre/languages/grcuda/.; +# Java 11; +mkdir -p $GRAAL_HOME/languages/grcuda; +cp mxbuild/dists/jdk11/grcuda.jar $GRAAL_HOME/languages/grcuda/.; diff --git a/mx.grcuda/suite.py b/mx.grcuda/suite.py index ded1c0b0..ea5c8f26 100644 --- a/mx.grcuda/suite.py +++ b/mx.grcuda/suite.py @@ -109,7 +109,7 @@ "subDir": "projects", "license": ["BSD-3"], "sourceDirs": ["src"], - "javaCompliance": "1.8", + "javaCompliance": "11", "annotationProcessors": ["truffle:TRUFFLE_DSL_PROCESSOR"], "dependencies": [ "truffle:TRUFFLE_API", @@ -128,7 +128,7 @@ "truffle:TRUFFLE_TEST", ], "checkstyle": "com.nvidia.grcuda", - "javaCompliance": "1.8", + "javaCompliance": "11", "annotationProcessors": ["truffle:TRUFFLE_DSL_PROCESSOR"], "workingSets": "Truffle,CUDA", "testProject": True, diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java index 064e0bfc..2015d93d 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java @@ -34,7 +34,7 @@ public GrCUDAExecutionContextTest(String policy) { this.policy = policy; } - private static final int NUM_THREADS_PER_BLOCK = 128; + private static final int NUM_THREADS_PER_BLOCK = 32; private static final String SQUARE_KERNEL = "extern \"C\" __global__ void square(float* x, int n) {\n" + @@ -107,7 +107,7 @@ public void dependencyKernelSimpleTest() { // Thread.sleep(10000); // Verify the output; - assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, x.getArrayElement(1).asFloat(), 0.1); } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java index fd7635ef..d4f9c024 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java @@ -61,4 +61,19 @@ public void waitFinish(GrCUDAComputationalElement computation) { } } } + + @Override + protected ComputationThread getNewComputationThread(ExecutionDAG.DAGVertex vertex) { + return new ComputationThreadMock(vertex); + } + + protected class ComputationThreadMock extends ComputationThread { + + public ComputationThreadMock(ExecutionDAG.DAGVertex vertex) { + super(vertex); + } + + // Don't do anything; + protected void setContext() { } + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java index 64756d62..6189742b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAThreadManager.java @@ -28,7 +28,7 @@ public GrCUDAThreadManager(GrCUDAContext context, int numberOfThreads) { } protected Thread createJavaThread(Runnable runnable) { - Thread thread = context.getEnv().createThread(runnable); + Thread thread = context.getEnv().createThread(runnable, context.getEnv().getContext()); toJoin.add(thread); System.out.println("-- created thread " + thread); return thread; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index b534e22c..f7ff0caf 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -130,6 +130,8 @@ public CUDARuntime(GrCUDAContext context, Env env) { // using this slow/uncached instance since all calls are non-critical private static final InteropLibrary INTEROP = InteropLibrary.getFactory().getUncached(); + private GPUPointer innerCudaContext; + public GrCUDAContext getContext() { return context; } @@ -364,6 +366,21 @@ public void cudaStreamAttachMemAsync(CUDAStream stream, AbstractArray array) { } } + @TruffleBoundary + public GPUPointer getInnerCudaContext() { + if (this.innerCudaContext == null) { + assertCUDAInitialized(); + } + return this.innerCudaContext; + } + + @TruffleBoundary + public GPUPointer initializeInnerCudaContext() { + int CU_CTX_SCHED_YIELD = 0x02; // Optimal multi-threaded host flag; + int device = 0; // Support only device 0; + return new GPUPointer(cuDevicePrimaryCtxRetain(device)); + } + /** * Synchronous version of "cudaStreamAttachMemAsync". This function doesn't exist in the CUDA API, but it is useful to have; * @param stream the stream to which we attach the array @@ -371,6 +388,7 @@ public void cudaStreamAttachMemAsync(CUDAStream stream, AbstractArray array) { */ @TruffleBoundary public void cudaStreamAttachMem(CUDAStream stream, AbstractArray array) { + System.out.println("\t* attach array=" + array + " to " + stream); cudaStreamAttachMemAsync(stream, array); cudaStreamSynchronize(stream); } @@ -731,7 +749,7 @@ public Kernel loadKernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, @TruffleBoundary public Kernel buildKernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, String code, String kernelName, String signature) { String moduleName = "truffle" + context.getNextModuleId(); - PTXKernel ptx = nvrtc.compileKernel(code, kernelName, moduleName, "--std=c++14"); + PTXKernel ptx = nvrtc.compileKernel(code, kernelName, moduleName, "--std=c++14", "-G", "-lineinfo"); CUModule module = null; try { module = cuModuleLoadData(ptx.getPtxSource(), moduleName); @@ -937,11 +955,38 @@ private void cuCtxDestroy(long ctx) { } } + @TruffleBoundary + private long cuCtxGetCurrent() { + try (UnsafeHelper.PointerObject ctxPointer = UnsafeHelper.createPointerObject()) { + Object callable = CUDADriverFunction.CU_CTXGETCURRENT.getSymbol(this); + Object result = INTEROP.execute(callable, ctxPointer.getAddress()); + checkCUDAReturnCode(result, "cuCtxGetCurrent"); + System.out.println("got context=" + ctxPointer.getValueOfPointer() + " at address " + ctxPointer.getAddress()); + return ctxPointer.getValueOfPointer(); + } catch (InteropException e) { + throw new GrCUDAException(e); + } + } + + @TruffleBoundary + public void cuCtxSetCurrent(GPUPointer ctxPointer) { + try { + Object callable = CUDADriverFunction.CU_CTXSETCURRENT.getSymbol(this); + Object result = INTEROP.execute(callable, ctxPointer.getRawPointer()); + checkCUDAReturnCode(result, "cuCtxSetCurrent"); + } catch (InteropException e) { + throw new GrCUDAException(e); + } + } + @TruffleBoundary private void assertCUDAInitialized() { if (!context.isCUDAInitialized()) { + cuInit(); // a simple way to create the device context in the driver is to call CUDA function cudaDeviceSynchronize(); + this.innerCudaContext = initializeInnerCudaContext(); + context.setCUDAInitialized(); } } @@ -977,6 +1022,8 @@ private void shutdown() { public enum CUDADriverFunction { CU_CTXCREATE("cuCtxCreate", "(pointer, uint32, sint32) :sint32"), CU_CTXDESTROY("cuCtxDestroy", "(pointer): sint32"), + CU_CTXGETCURRENT("cuCtxGetCurrent", "(pointer) :sint32"), + CU_CTXSETCURRENT("cuCtxSetCurrent", "(pointer) :sint32"), CU_CTXSYNCHRONIZE("cuCtxSynchronize", "(): sint32"), CU_DEVICEGETCOUNT("cuDeviceGetCount", "(pointer): sint32"), CU_DEVICEGET("cuDeviceGet", "(pointer, sint32): sint32"), diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/NVRuntimeCompiler.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/NVRuntimeCompiler.java index 19318523..17a814c6 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/NVRuntimeCompiler.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/NVRuntimeCompiler.java @@ -108,13 +108,14 @@ public NVRTCResult nvrtcCompileProgram(NVRTCProgram program, String... opts) { if (opts.length == 0) { return nvrtcCompileProgramInternal(program, 0, 0L); } else { - ArrayList optCStrings = new ArrayList<>(opts.length); + ArrayList optCStrings = new ArrayList<>(); try (UnsafeHelper.PointerArray optCStringArr = new PointerArray(opts.length)) { int idx = 0; for (String optString : opts) { UnsafeHelper.StringObject cString = UnsafeHelper.StringObject.fromJavaString(optString); optCStrings.add(cString); optCStringArr.setValueAt(idx, cString.getAddress()); + idx++; } NVRTCResult result = nvrtcCompileProgramInternal(program, opts.length, optCStringArr.getAddress()); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/UnsafeHelper.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/UnsafeHelper.java index 36424b64..e42db978 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/UnsafeHelper.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/UnsafeHelper.java @@ -31,6 +31,7 @@ import java.io.ByteArrayOutputStream; import java.lang.reflect.Field; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; @@ -143,7 +144,7 @@ static final class StringObject extends MemoryObject { @TruffleBoundary static StringObject fromJavaString(String javaString) { - byte[] bytes = javaString.getBytes(Charset.forName("ISO-8859-1")); + byte[] bytes = javaString.getBytes(StandardCharsets.ISO_8859_1); StringObject so = new StringObject(bytes.length + 1); // + 1 for \NULL terminator for (int i = 0; i < bytes.length; i++) { unsafe.putByte(so.getAddress() + i, bytes[i]); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index 64f78236..262973a3 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -6,6 +6,7 @@ import com.nvidia.grcuda.gpu.Kernel; import com.nvidia.grcuda.gpu.KernelArguments; import com.nvidia.grcuda.gpu.KernelConfig; +import com.nvidia.grcuda.gpu.UnsafeHelper; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; @@ -37,8 +38,8 @@ public KernelExecution(ConfiguredKernel configuredKernel, KernelArguments args) @Override public Object execute() { - grCUDAExecutionContext.getCudaRuntime().cuLaunchKernel(kernel, config, args, this.getStream()); - return NoneValue.get(); + grCUDAExecutionContext.getCudaRuntime().cuLaunchKernel(kernel, config, args, this.getStream()); + return NoneValue.get(); } public ConfiguredKernel getConfiguredKernel() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/MultithreadGrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/MultithreadGrCUDAExecutionContext.java index 20ae658b..63967eda 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/MultithreadGrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/MultithreadGrCUDAExecutionContext.java @@ -1,10 +1,13 @@ package com.nvidia.grcuda.gpu.executioncontext; +import com.nvidia.grcuda.GPUPointer; import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAThreadManager; import com.nvidia.grcuda.NoneValue; +import com.nvidia.grcuda.array.DeviceArray; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import com.nvidia.grcuda.gpu.computation.KernelExecution; import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.nvidia.grcuda.gpu.stream.GrCUDAStreamManager; import com.oracle.truffle.api.TruffleLanguage; @@ -14,6 +17,7 @@ import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; /** * Class used to monitor the state of GrCUDA execution, keep track of memory allocated, @@ -31,6 +35,8 @@ public class MultithreadGrCUDAExecutionContext extends AbstractGrCUDAExecutionCo */ private final GrCUDAThreadManager threadManager; + // TODO: vertices and threads have a 1:1 mapping, it makes sense to store threads in the vertex. + // The DAG must be modified to accept custom vertices, e.g. VertexWithComputationThread; protected final HashMap> activeComputations = new HashMap<>(); public MultithreadGrCUDAExecutionContext(GrCUDAContext context, TruffleLanguage.Env env, DependencyPolicyEnum dependencyPolicy) { @@ -59,9 +65,6 @@ public Object registerExecution(GrCUDAComputationalElement computation) throws U // Add the new computation to the DAG ExecutionDAG.DAGVertex vertex = dag.append(computation); - // Compute the stream where the computation will be done; - streamManager.assignStream(vertex); - // Update for each input array if the latest scheduled computation (i.e. this one) is an array access; vertex.getComputation().updateIsComputationArrayAccess(); @@ -69,29 +72,21 @@ public Object registerExecution(GrCUDAComputationalElement computation) throws U // else do it synchronously; if (vertex.getComputation().canUseStream() && threadManager != null) { + // Compute the stream where the computation will be done; + streamManager.assignStream(vertex); + System.out.println("-- schedule " + vertex.getComputation()); + ComputationThread newThread = getNewComputationThread(vertex); if (vertex.isExecutable()) { // If the computation can be executed immediately, start it; - CompletableFuture futureResult = CompletableFuture.supplyAsync( - () -> new ComputationThread(vertex).call(), threadManager.getThreadPool()) - .exceptionally(ex -> { - System.out.println("Exception encountered in computation thread of " - + vertex.getComputation() + ": " + ex.getMessage()); - return NoneValue.get(); - }); + CompletableFuture futureResult = supplyAsyncComputationThread(newThread); activeComputations.put(vertex, futureResult); } else { // If the computation has dependencies, add the callback logic; List parents = vertex.getParentVertices(); CompletableFuture parentResult = CompletableFuture.allOf(parents.stream().map(activeComputations::get).toArray(CompletableFuture[]::new)); - CompletableFuture futureResult = parentResult.thenCompose((res) -> CompletableFuture.supplyAsync(() -> new ComputationThread(vertex).call(), threadManager.getThreadPool()) - .exceptionally(ex -> { - System.out.println("Exception encountered in computation thread of " - + vertex.getComputation() + ": " + ex.getMessage()); - return NoneValue.get(); - }) - ); + CompletableFuture futureResult = parentResult.thenCompose((res) -> supplyAsyncComputationThread(newThread)); activeComputations.put(vertex, futureResult); } return NoneValue.get(); @@ -100,6 +95,18 @@ public Object registerExecution(GrCUDAComputationalElement computation) throws U } } + protected ComputationThread getNewComputationThread(ExecutionDAG.DAGVertex vertex) { + return new ComputationThread(vertex); + } + + private CompletableFuture supplyAsyncComputationThread(ComputationThread thread) { + return CompletableFuture.supplyAsync(thread::call, threadManager.getThreadPool()) + .exceptionally(ex -> { + System.out.println("Exception encountered in computation thread of " + thread.getVertex().getComputation() + ": " + ex.getMessage()); + return NoneValue.get(); + }); + } + @Override public boolean isAnyComputationActive() { return this.streamManager.isAnyComputationActive(); @@ -119,29 +126,29 @@ public void cleanup() { } private Object executeComputationSync(ExecutionDAG.DAGVertex vertex) { - // Before starting this computation, ensure that all active threads are finished; System.out.println("-- running sync " + vertex.getComputation()); List parents = vertex.getParentVertices(); if (parents.size() == 1) { CompletableFuture result = activeComputations.get(parents.get(0)); - System.out.println("\t* parent 0 iscanc=" + result.isCancelled() + "; isdone=" + result.isDone() + "; isdoneexc=" + result.isCompletedExceptionally()); - return result.thenApply((r) -> { - // Perform the computation; - return executeComputationSyncInternal(vertex); - }); + waitForComputationToEnd(result, vertex); } else if (parents.size() > 1) { System.out.println("\t* must sync " + parents.size() + " parents"); CompletableFuture result = CompletableFuture.allOf(parents.stream().map(activeComputations::get).toArray(CompletableFuture[]::new)); - System.out.println("\t* parents iscanc=" + result.isCancelled() + "; isdone=" + result.isDone() + "; isdoneexc=" + result.isCompletedExceptionally()); - return result.thenApply((r) -> { - // Perform the computation; - return executeComputationSyncInternal(vertex); - }); - } else { - // No parents; - return executeComputationSyncInternal(vertex); + waitForComputationToEnd(result, vertex); + } + return executeComputationSyncInternal(vertex); + } + + private Object waitForComputationToEnd(CompletableFuture result, ExecutionDAG.DAGVertex vertex) { +// System.out.println("\t* parents iscanc=" + result.isCancelled() + "; isdone=" + result.isDone() + "; isdoneexc=" + result.isCompletedExceptionally()); + try { + return result.get(); + } catch (InterruptedException | ExecutionException e) { + System.out.println("Error in sync execution of " + vertex.getComputation() + " = " + e.getMessage()); + e.printStackTrace(); + return NoneValue.get(); } } @@ -165,10 +172,19 @@ public ComputationThread(ExecutionDAG.DAGVertex vertex) { this.vertex = vertex; } + protected void setContext() { + cudaRuntime.cudaSetDevice(0); + } + + public ExecutionDAG.DAGVertex getVertex() { + return vertex; + } + public Object call() { // Perform the computation; System.out.println("-- running async " + vertex.getComputation()); vertex.getComputation().setComputationStarted(); + setContext(); try { vertex.getComputation().execute(); } catch (UnsupportedTypeException e) { From 941022cd33ad1c670fd69e8f7d181ef2f46944a1 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 2 Jun 2020 09:14:39 +0200 Subject: [PATCH 068/236] removed unneccesary stream sync --- .../GrCUDAExecutionContextTest.java | 8 +++---- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 5 +++++ .../gpu/stream/GrCUDAStreamManager.java | 22 ++++++++++++------- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java index 2015d93d..2b4464d0 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java @@ -22,9 +22,9 @@ public class GrCUDAExecutionContextTest { @Parameterized.Parameters public static Collection data() { return Arrays.asList(new Object[][]{ -// {"sync"}, -// {"default"}, - {"multithread"}, + {"sync"}, + {"default"}, +// {"multithread"}, }); } @@ -104,8 +104,6 @@ public void dependencyKernelSimpleTest() { // Perform the computation; configuredSquareKernel.execute(x, numElements); -// Thread.sleep(10000); - // Verify the output; assertEquals(4.0, x.getArrayElement(1).asFloat(), 0.1); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index f7ff0caf..48a101ec 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -348,6 +348,11 @@ public void cudaStreamDestroy(CUDAStream stream) { } } + /** + * Limit the visibility of a managed memory array to the specified stream; + * @param stream the stream to which we attach the array + * @param array an array that should be assigned exclusively to a stream + */ @TruffleBoundary public void cudaStreamAttachMemAsync(CUDAStream stream, AbstractArray array) { final int MEM_ATTACH_SINGLE = 0x04; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 19d07eda..55211da4 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -144,14 +144,20 @@ private void syncParentStreamsImpl( Set computationsToSync, GrCUDAComputationalElement computationThatSyncs) { computationsToSync.forEach(c -> { - // Synchronize computations that are not yet finished and can use streams; - if (c.canUseStream() && !c.isComputationFinished()) { - System.out.println("--\tsync stream " + c.getStream() + " by " + computationThatSyncs); - runtime.cudaStreamSynchronize(c.getStream()); - // Set the parent computations as finished; - c.setComputationFinished(); - // Decrement the active computation count; - removeActiveComputation(c); + // When scheduling a computation that uses the same stream of the parent, avoid manual synchronization as it is handled by CUDA; + if (!(computationThatSyncs.canUseStream() && computationThatSyncs.getStream().equals(c.getStream()))) { + // Synchronize computations that are not yet finished and can use streams; + if (c.canUseStream() && !c.isComputationFinished()) { + System.out.println("--\tsync stream " + c.getStream() + " by " + computationThatSyncs); + // FIXME: avoid syncing the same stream multiple times, if a previous computation hasn't been marked as finished yet; + runtime.cudaStreamSynchronize(c.getStream()); + // Set the parent computations as finished; + c.setComputationFinished(); + // Decrement the active computation count; + removeActiveComputation(c); + } + } else { + System.out.println("--\tavoid manual sync of " + c + " by " + computationThatSyncs); } }); } From e4b0641702f8c6f6f993dea667efd41ac0c2dbe9 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 2 Jun 2020 11:27:31 +0200 Subject: [PATCH 069/236] fixed streams being synced more than once; fixed const arg visibility not being reset to default steam --- .../GrCUDAExecutionContextTest.java | 17 +- ...ecutionContextWithConstDependencyTest.java | 266 ++++++++++++++++++ .../WithConstDependencyComputationTest.java | 255 ----------------- .../src/com/nvidia/grcuda/GrCUDAContext.java | 5 - .../com/nvidia/grcuda/array/DeviceArray.java | 2 - .../com/nvidia/grcuda/gpu/CUDARuntime.java | 7 +- .../gpu/computation/KernelExecution.java | 12 +- .../DefaultDependencyComputation.java | 5 - .../dependency/DependencyComputation.java | 14 +- .../WithConstDependencyComputation.java | 12 +- .../executioncontext/ExecutionPolicyEnum.java | 1 - .../gpu/stream/GrCUDAStreamManager.java | 33 ++- 12 files changed, 328 insertions(+), 301 deletions(-) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextWithConstDependencyTest.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java index 2b4464d0..8b1cd84b 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java @@ -23,8 +23,7 @@ public class GrCUDAExecutionContextTest { public static Collection data() { return Arrays.asList(new Object[][]{ {"sync"}, - {"default"}, -// {"multithread"}, + {"default"} }); } @@ -196,7 +195,7 @@ public void dependencyPipelineSimple3Test() { try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", this.policy).allowAllAccess(true).build()) { - final int numElements = 100000; + final int numElements = 100; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); Value x = deviceArrayConstructor.execute("float", numElements); @@ -217,17 +216,23 @@ public void dependencyPipelineSimple3Test() { configuredSquareKernel.execute(x, z, numElements); // Verify the output; - assertEquals(0.0, y.getArrayElement(0).asFloat(), 0.1); assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); + assertEquals(0.0, y.getArrayElement(0).asFloat(), 0.1); } } + /** + * The read on "y" has to sync on the stream where the kernel is running, although that kernel doesn't use "y". + * This is due to the pre-Pascal limitations on managed memory accesses, + * and the inability to access an array while it is being used by a running kernel. + * In this case, also perform an operation on y, instead of leaving it uninitialized; + */ @Test public void dependencyPipelineSimple4Test() throws InterruptedException { try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", this.policy).allowAllAccess(true).build()) { - final int numElements = 100000; + final int numElements = 100; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); Value x = deviceArrayConstructor.execute("float", numElements); @@ -237,7 +242,7 @@ public void dependencyPipelineSimple4Test() throws InterruptedException { for (int i = 0; i < numElements; ++i) { x.setArrayElement(i, 2.0); } - // FIXME: if I write on array x, launch K(Y) then read(x), the last comp on x is array access, so no sync is done!!! + // Access the y array; y.setArrayElement(0, 0); Value buildkernel = context.eval("grcuda", "buildkernel"); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextWithConstDependencyTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextWithConstDependencyTest.java new file mode 100644 index 00000000..6080c641 --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextWithConstDependencyTest.java @@ -0,0 +1,266 @@ +package com.nvidia.grcuda.test.gpu.executioncontext; + +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Value; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class GrCUDAExecutionContextWithConstDependencyTest { + + private static final int NUM_THREADS_PER_BLOCK = 32; + + private static final String SQUARE_KERNEL = + "extern \"C\" __global__ void square(const float* x, float *y, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " y[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + + private static final String SQUARE_INPLACE_KERNEL = + "extern \"C\" __global__ void square(float* x, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " x[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + + private static final String DIFF_KERNEL = + "extern \"C\" __global__ void diff(const float* x, const float* y, float* z, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " z[idx] = x[idx] - y[idx];\n" + + " }\n" + + "}"; + + private static final String DIFF_SINGLE_KERNEL = + "extern \"C\" __global__ void diff(const float* x, float* z, float val, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " z[idx] = x[idx] - val;\n" + + " }\n" + + "}"; + + private static final String REDUCE_KERNEL = + "extern \"C\" __global__ void reduce(const float *x, float *res, int n) {\n" + + " __shared__ float cache[" + NUM_THREADS_PER_BLOCK + "];\n" + + " int i = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (i < n) {\n" + + " cache[threadIdx.x] = x[i];\n" + + " }\n" + + " __syncthreads();\n" + + " i = " + NUM_THREADS_PER_BLOCK + " / 2;\n" + + " while (i > 0) {\n" + + " if (threadIdx.x < i) {\n" + + " cache[threadIdx.x] += cache[threadIdx.x + i];\n" + + " }\n" + + " __syncthreads();\n" + + " i /= 2;\n" + + " }\n" + + " if (threadIdx.x == 0) {\n" + + " atomicAdd(res, cache[0]);\n" + + " }\n" + + "}"; + + @Test + public void dependencyPipelineSimpleTest() { + + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + + final int numElements = 10; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); + + assertNotNull(squareKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, y, numElements); + configuredSquareKernel.execute(x, z, numElements); + + // Verify the output; + assertEquals(4.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineReadXTest() { + + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); + + assertNotNull(squareKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, y, numElements); + configuredSquareKernel.execute(x, z, numElements); + + // Read the array x before syncing the computation. Depending on the GPU, this might sync the device; + for (int i = 0; i < numElements; ++i) { + assertEquals(2.0, x.getArrayElement(i).asFloat(), 0.1); + } + + // Verify the output; + assertEquals(4.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); + assertEquals(4.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineSplitComputationTest() { + // Test a computation of form A(1) --> B(1r, 2) + // \-> C(1r, 3) + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + + final int numElements = 10; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_INPLACE_KERNEL, "square", "pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_SINGLE_KERNEL, "diff", "const pointer, pointer, float, sint32"); + + assertNotNull(squareKernel); + assertNotNull(diffKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + configuredDiffKernel.execute(x, y, 1.0, numElements); + configuredDiffKernel.execute(x, z, 1.0, numElements); + + // Verify the output; + assertEquals(3.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(3.0, z.getArrayElement(0).asFloat(), 0.1); + assertEquals(3.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); + assertEquals(3.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); + assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); + } + } + + @Test + public void dependencyPipelineDiamondTest() { + // Test a computation of form A(1) --> B(1r, 2) -> D(1) + // \-> C(1r, 3) -/ + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + + final int numElements = 10; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_INPLACE_KERNEL, "square", "pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_SINGLE_KERNEL, "diff", "const pointer, pointer, float, sint32"); + + assertNotNull(squareKernel); + assertNotNull(diffKernel); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, numElements); + configuredDiffKernel.execute(x, y, 1.0, numElements); + configuredDiffKernel.execute(x, z, 1.0, numElements); + configuredSquareKernel.execute(x, numElements); + + // Verify the output; + assertEquals(16.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(16.0, x.getArrayElement(0).asFloat(), 0.1); + assertEquals(3.0, y.getArrayElement(0).asFloat(), 0.1); + assertEquals(3.0, z.getArrayElement(0).asFloat(), 0.1); + assertEquals(3.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); + assertEquals(3.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); + } + } + + + @Test + public void dependencyPipelineSimple2Test() { + + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + + final int numElements = 10000; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value w = deviceArrayConstructor.execute("float", numElements); + Value res = deviceArrayConstructor.execute("float", 1); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 1.0 / (i + 1)); + } + res.setArrayElement(0, 0.0); + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "const pointer, const pointer, pointer, sint32"); + Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "const pointer, pointer, sint32"); + assertNotNull(squareKernel); + assertNotNull(diffKernel); + assertNotNull(reduceKernel); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x, y, numElements); + configuredSquareKernel.execute(x, z, numElements); + configuredDiffKernel.execute(y, z, w, numElements); + configuredReduceKernel.execute(w, res, numElements); + + // Verify the output; + float resScalar = res.getArrayElement(0).asFloat(); + assertEquals(0, resScalar, 0.01); + } + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java index 2cad1d3a..72361300 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -412,259 +412,4 @@ public void complexFrontier2WithSyncMockTest() throws UnsupportedTypeException { // Check that G is child exactly of D and F; assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(3), dag.getVertices().get(5))), new HashSet<>(dag.getVertices().get(6).getParentVertices())); } - - private static final int NUM_THREADS_PER_BLOCK = 128; - - private static final String SQUARE_KERNEL = - "extern \"C\" __global__ void square(const float* x, float *y, int n) {\n" + - " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (idx < n) {\n" + - " y[idx] = x[idx] * x[idx];\n" + - " }" + - "}\n"; - - private static final String SQUARE_INPLACE_KERNEL = - "extern \"C\" __global__ void square(float* x, int n) {\n" + - " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (idx < n) {\n" + - " x[idx] = x[idx] * x[idx];\n" + - " }" + - "}\n"; - - private static final String DIFF_KERNEL = - "extern \"C\" __global__ void diff(const float* x, const float* y, float* z, int n) {\n" + - " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (idx < n) {\n" + - " z[idx] = x[idx] - y[idx];\n" + - " }\n" + - "}"; - - private static final String DIFF_SINGLE_KERNEL = - "extern \"C\" __global__ void diff(const float* x, float* z, float val, int n) {\n" + - " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (idx < n) {\n" + - " z[idx] = x[idx] - val;\n" + - " }\n" + - "}"; - - private static final String REDUCE_KERNEL = - "extern \"C\" __global__ void reduce(const float *x, float *res, int n) {\n" + - " __shared__ float cache[" + NUM_THREADS_PER_BLOCK + "];\n" + - " int i = blockIdx.x * blockDim.x + threadIdx.x;\n" + - " if (i < n) {\n" + - " cache[threadIdx.x] = x[i];\n" + - " }\n" + - " __syncthreads();\n" + - " i = " + NUM_THREADS_PER_BLOCK + " / 2;\n" + - " while (i > 0) {\n" + - " if (threadIdx.x < i) {\n" + - " cache[threadIdx.x] += cache[threadIdx.x + i];\n" + - " }\n" + - " __syncthreads();\n" + - " i /= 2;\n" + - " }\n" + - " if (threadIdx.x == 0) {\n" + - " atomicAdd(res, cache[0]);\n" + - " }\n" + - "}"; - - @Test - public void dependencyPipelineSimpleTest() { - - try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { - - final int numElements = 10; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value z = deviceArrayConstructor.execute("float", numElements); - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); - - assertNotNull(squareKernel); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 2.0); - } - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, y, numElements); - configuredSquareKernel.execute(x, z, numElements); - - // Verify the output; - assertEquals(4.0, y.getArrayElement(0).asFloat(), 0.1); - assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); - assertEquals(4.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); - assertEquals(4.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); - } - } - - @Test - public void dependencyPipelineReadXTest() { - - try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { - - final int numElements = 100; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value z = deviceArrayConstructor.execute("float", numElements); - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); - - assertNotNull(squareKernel); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 2.0); - } - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, y, numElements); - configuredSquareKernel.execute(x, z, numElements); - - // Read the array x before syncing the computation. Depending on the GPU, this might sync the device; - for (int i = 0; i < numElements; ++i) { - assertEquals(2.0, x.getArrayElement(i).asFloat(), 0.1); - } - - // Verify the output; - assertEquals(4.0, y.getArrayElement(0).asFloat(), 0.1); - assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); - assertEquals(4.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); - assertEquals(4.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); - } - } - - @Test - public void dependencyPipelineSplitComputationTest() { - // Test a computation of form A(1) --> B(1r, 2) - // \-> C(1r, 3) - try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { - - final int numElements = 10; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value z = deviceArrayConstructor.execute("float", numElements); - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_INPLACE_KERNEL, "square", "pointer, sint32"); - Value diffKernel = buildkernel.execute(DIFF_SINGLE_KERNEL, "diff", "const pointer, pointer, float, sint32"); - - assertNotNull(squareKernel); - assertNotNull(diffKernel); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 2.0); - } - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, numElements); - configuredDiffKernel.execute(x, y, 1.0, numElements); - configuredDiffKernel.execute(x, z, 1.0, numElements); - - // Verify the output; - assertEquals(3.0, y.getArrayElement(0).asFloat(), 0.1); - assertEquals(3.0, z.getArrayElement(0).asFloat(), 0.1); - assertEquals(3.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); - assertEquals(3.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); - assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); - assertEquals(4.0, x.getArrayElement(0).asFloat(), 0.1); - } - } - - @Test - public void dependencyPipelineDiamondTest() { - // Test a computation of form A(1) --> B(1r, 2) -> D(1) - // \-> C(1r, 3) -/ - try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { - - final int numElements = 10; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value z = deviceArrayConstructor.execute("float", numElements); - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_INPLACE_KERNEL, "square", "pointer, sint32"); - Value diffKernel = buildkernel.execute(DIFF_SINGLE_KERNEL, "diff", "const pointer, pointer, float, sint32"); - - assertNotNull(squareKernel); - assertNotNull(diffKernel); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 2.0); - } - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, numElements); - configuredDiffKernel.execute(x, y, 1.0, numElements); - configuredDiffKernel.execute(x, z, 1.0, numElements); - configuredSquareKernel.execute(x, numElements); - - // Verify the output; - assertEquals(16.0, x.getArrayElement(0).asFloat(), 0.1); - assertEquals(16.0, x.getArrayElement(0).asFloat(), 0.1); - assertEquals(3.0, y.getArrayElement(0).asFloat(), 0.1); - assertEquals(3.0, z.getArrayElement(0).asFloat(), 0.1); - assertEquals(3.0, y.getArrayElement(numElements - 1).asFloat(), 0.1); - assertEquals(3.0, z.getArrayElement(numElements - 1).asFloat(), 0.1); - } - } - - - @Test - public void dependencyPipelineSimple2Test() { - - try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { - - final int numElements = 100000; - final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; - Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); - Value x = deviceArrayConstructor.execute("float", numElements); - Value y = deviceArrayConstructor.execute("float", numElements); - Value z = deviceArrayConstructor.execute("float", numElements); - Value w = deviceArrayConstructor.execute("float", numElements); - Value res = deviceArrayConstructor.execute("float", 1); - - for (int i = 0; i < numElements; ++i) { - x.setArrayElement(i, 1.0 / (i + 1)); - } - res.setArrayElement(0, 0.0); - - Value buildkernel = context.eval("grcuda", "buildkernel"); - Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "const pointer, pointer, sint32"); - Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "const pointer, const pointer, pointer, sint32"); - Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "const pointer, pointer, sint32"); - assertNotNull(squareKernel); - assertNotNull(diffKernel); - assertNotNull(reduceKernel); - - Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); - - // Perform the computation; - configuredSquareKernel.execute(x, y, numElements); - configuredSquareKernel.execute(x, z, numElements); - configuredDiffKernel.execute(y, z, w, numElements); - configuredReduceKernel.execute(w, res, numElements); - - // Verify the output; - float resScalar = res.getArrayElement(0).asFloat(); - assertEquals(0, resScalar, 0.01); - } - } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index d615f4ad..b7b7bcf2 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -102,9 +102,6 @@ public GrCUDAContext(Env env) { case SYNC: this.grCUDAExecutionContext = new SyncGrCUDAExecutionContext(this, env, dependencyPolicy); break; - case MULTITHREAD: - this.grCUDAExecutionContext = new MultithreadGrCUDAExecutionContext(this, env, dependencyPolicy); - break; case DEFAULT: this.grCUDAExecutionContext = new GrCUDAExecutionContext(this, env ,dependencyPolicy); break; @@ -205,8 +202,6 @@ private static ExecutionPolicyEnum parseExecutionPolicy(String policyString) { switch(policyString) { case "sync": return ExecutionPolicyEnum.SYNC; - case "multithread": - return ExecutionPolicyEnum.MULTITHREAD; case "default": return ExecutionPolicyEnum.DEFAULT; default: diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index f0227bd5..49744f93 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -175,7 +175,6 @@ Object readArrayElement(long index, throw InvalidArrayIndexException.create(index); } try { -// System.out.println("reading index " + index + " on array " + this.toString()); if (this.canSkipScheduling()) { // Fast path, skip the DAG scheduling; return readArrayElementImpl(index, elementTypeProfile); @@ -189,7 +188,6 @@ Object readArrayElement(long index, } public Object readArrayElementImpl(long index, ValueProfile elementTypeProfile) { -// System.out.println("read array impl[" + index + "] of " + this); switch (elementTypeProfile.profile(elementType)) { case BYTE: case CHAR: diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 48a101ec..0c616523 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -355,6 +355,9 @@ public void cudaStreamDestroy(CUDAStream stream) { */ @TruffleBoundary public void cudaStreamAttachMemAsync(CUDAStream stream, AbstractArray array) { + + System.out.println("\t* attach array=" + array + " to " + stream); + final int MEM_ATTACH_SINGLE = 0x04; final int MEM_ATTACH_GLOBAL = 0x01; try { @@ -393,7 +396,6 @@ public GPUPointer initializeInnerCudaContext() { */ @TruffleBoundary public void cudaStreamAttachMem(CUDAStream stream, AbstractArray array) { - System.out.println("\t* attach array=" + array + " to " + stream); cudaStreamAttachMemAsync(stream, array); cudaStreamSynchronize(stream); } @@ -854,8 +856,6 @@ public void cuLaunchKernel(Kernel kernel, KernelConfig config, KernelArguments a Object callable = CUDADriverFunction.CU_LAUNCHKERNEL.getSymbol(this); Dim3 gridSize = config.getGridSize(); Dim3 blockSize = config.getBlockSize(); - System.out.println("LAUNCH KERNEL " + kernel.getKernelName() + "; GRID=" + gridSize + "; BLOCK=" + blockSize + "; SMEMORY=" + config.getDynamicSharedMemoryBytes() + - "; STREAM=" + stream + "; ARGS=" + args); Object result = INTEROP.execute(callable, kernel.getKernelFunction(), gridSize.getX(), @@ -966,7 +966,6 @@ private long cuCtxGetCurrent() { Object callable = CUDADriverFunction.CU_CTXGETCURRENT.getSymbol(this); Object result = INTEROP.execute(callable, ctxPointer.getAddress()); checkCUDAReturnCode(result, "cuCtxGetCurrent"); - System.out.println("got context=" + ctxPointer.getValueOfPointer() + " at address " + ctxPointer.getAddress()); return ctxPointer.getValueOfPointer(); } catch (InteropException e) { throw new GrCUDAException(e); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index 262973a3..075d0826 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -9,6 +9,7 @@ import com.nvidia.grcuda.gpu.UnsafeHelper; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.DefaultStream; import java.util.Arrays; import java.util.List; @@ -83,11 +84,14 @@ public CUDAStream getStream() { @Override public void associateArraysToStreamImpl() { for (ComputationArgumentWithValue a : args.getKernelArgumentWithValues()) { - if (this.getDependencyComputation().keepArgument(a)) { + if (a.getArgumentValue() instanceof AbstractArray) { AbstractArray array = (AbstractArray) a.getArgumentValue(); - // Attach the array to the stream, synchronously, if the array isn't already attached to this stream; - if (!array.getStreamMapping().equals(this.getStream())) { - grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(this.getStream(), (AbstractArray) a.getArgumentValue()); + if (getDependencyComputation().streamResetAttachFilter(a)) { + // If the array was attached to a stream, and now it is a const parameter, reset its visibility to the default stream; + grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(DefaultStream.get(), array); + } else if (!array.getStreamMapping().equals(this.getStream())) { + // Attach the array to the stream if the array isn't already attached to this stream; + grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(this.getStream(), array); } } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java index e28cfc6b..7026716e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DefaultDependencyComputation.java @@ -46,9 +46,4 @@ public List computeDependencies(GrCUDAComputationa // Return the list of arguments that created dependencies with the new computation; return new ArrayList<>(dependencies); } - - @Override - public boolean keepArgument(ComputationArgumentWithValue arg) { - return arg.getArgumentValue() instanceof AbstractArray; - } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java index db281197..ef05c1e9 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/DependencyComputation.java @@ -35,14 +35,14 @@ public Collection getActiveArgumentSet() { } /** - * Provide an additional, optional filter used by dependency computations. - * The filter defines if and how arguments can be used in user-defined {@link GrCUDAComputationalElement} - * whose behaviour is influenced by how dependencies are computed. - * For example, a filter could keep only non-const array arguments, and ignore the others; + * Provide an additional, optional filter used to determine + * if an array argument should have its visibility reset to the {@link com.nvidia.grcuda.gpu.stream.DefaultStream} + * through {@link GrCUDAComputationalElement#associateArraysToStream()} + * For example, a filter might want to reset the visibility of const array arguments, and ignore the others; * @param arg an argument to analyse - * @return if this argument should be kept or not for the user-defined computation + * @return if this argument visibility should be reset or not */ - public boolean keepArgument(ComputationArgumentWithValue arg) { - return true; + public boolean streamResetAttachFilter(ComputationArgumentWithValue arg) { + return false; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java index ddbc3eff..e9b2190a 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java @@ -47,8 +47,16 @@ public List computeDependencies(GrCUDAComputationa return dependencies; } + /** + * If the array was attached to a stream, and now it is a const parameter, reset its visibility to the default stream. + * For simplicity, we keep the visibility of all arguments currently used as const to the default stream. + * This allow the scheduling of multiple computations that use the same argument as const; + * @param arg an argument to analyse + * @return if this argument visibility should be reset or not + */ @Override - public boolean keepArgument(ComputationArgumentWithValue arg) { - return (arg.getArgumentValue() instanceof AbstractArray) && !arg.isConst(); + public boolean streamResetAttachFilter(ComputationArgumentWithValue arg) { + AbstractArray array = (AbstractArray) arg.getArgumentValue(); + return arg.isConst() && !array.getStreamMapping().isDefaultStream(); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java index 6c95a60e..4583e528 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/ExecutionPolicyEnum.java @@ -2,7 +2,6 @@ public enum ExecutionPolicyEnum { SYNC("sync"), - MULTITHREAD("multithread"), DEFAULT("default"); private final String name; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 55211da4..c952d8fa 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -103,12 +103,8 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { * @param vertex a computation whose parents should be synchronized */ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { - // FIXME: if I write on array x, launch K(Y) then read(x), the last comp on x is array access, so no sync is done!!! - // We can have a function in context called "is any computation running" that checks if the map is empty, and call it from array accesses - // Also add test for it! // Skip syncing if no computation is active; -// System.out.println("--\tSYNC REQUEST by " + vertex.getComputation()); if (this.isAnyComputationActive()) { Set computationsToSync = new HashSet<>(vertex.getParentComputations()); @@ -123,11 +119,14 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { runtime.cudaDeviceSynchronize(); // All computations are now finished; resetActiveComputationState(); - } else { - // Else add the computations related to the additional streams to the set and sync it; + } else if (!getParentStreams(computationsToSync).contains(stream)) { + // Else add the computations related to the additional streams to the set and sync it, + // as long as the additional stream isn't the same as the one that we have to sync anyway; System.out.println("--\tsyncing additional stream " + stream + "..."); computationsToSync.addAll(activeComputationsPerStream.get(stream)); syncParentStreamsImpl(computationsToSync, vertex.getComputation()); + } else { + syncParentStreamsImpl(computationsToSync, vertex.getComputation()); } } else { syncParentStreamsImpl(computationsToSync, vertex.getComputation()); @@ -135,6 +134,15 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { } } + /** + * Obtain the set of CUDAStreams that have to be synchronized; + * @param computationsToSync a set of computations to sync + * @return the set of CUDAStreams that have to be synchronized + */ + private Set getParentStreams(Set computationsToSync) { + return computationsToSync.stream().map(GrCUDAComputationalElement::getStream).collect(Collectors.toSet()); + } + /** * Synchronize a list of computations on their streams; * @param computationsToSync a list of computations whose streams should be synced @@ -143,14 +151,20 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { private void syncParentStreamsImpl( Set computationsToSync, GrCUDAComputationalElement computationThatSyncs) { + + // Keep a set of streams synced so far, to avoid syncing the same stream multiple times; + Set syncedStreams = new HashSet<>(); + computationsToSync.forEach(c -> { // When scheduling a computation that uses the same stream of the parent, avoid manual synchronization as it is handled by CUDA; if (!(computationThatSyncs.canUseStream() && computationThatSyncs.getStream().equals(c.getStream()))) { // Synchronize computations that are not yet finished and can use streams; if (c.canUseStream() && !c.isComputationFinished()) { - System.out.println("--\tsync stream " + c.getStream() + " by " + computationThatSyncs); - // FIXME: avoid syncing the same stream multiple times, if a previous computation hasn't been marked as finished yet; - runtime.cudaStreamSynchronize(c.getStream()); + if (!syncedStreams.contains(c.getStream())) { + System.out.println("--\tsync stream " + c.getStream() + " by " + computationThatSyncs); + runtime.cudaStreamSynchronize(c.getStream()); + syncedStreams.add(c.getStream()); + } // Set the parent computations as finished; c.setComputationFinished(); // Decrement the active computation count; @@ -168,7 +182,6 @@ private void syncParentStreamsImpl( public CUDAStream createStream() { CUDAStream newStream = runtime.cudaStreamCreate(streams.size()); streams.add(newStream); - System.out.println("craeted stream " + newStream); return newStream; } From 9118bbbe2defa807d7f1a08c0abb15b44b616337 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 2 Jun 2020 11:40:56 +0200 Subject: [PATCH 070/236] switched back to java 8 --- mx.grcuda/suite.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mx.grcuda/suite.py b/mx.grcuda/suite.py index ea5c8f26..8f342a9e 100644 --- a/mx.grcuda/suite.py +++ b/mx.grcuda/suite.py @@ -109,7 +109,7 @@ "subDir": "projects", "license": ["BSD-3"], "sourceDirs": ["src"], - "javaCompliance": "11", + "javaCompliance": "8", "annotationProcessors": ["truffle:TRUFFLE_DSL_PROCESSOR"], "dependencies": [ "truffle:TRUFFLE_API", @@ -128,7 +128,7 @@ "truffle:TRUFFLE_TEST", ], "checkstyle": "com.nvidia.grcuda", - "javaCompliance": "11", + "javaCompliance": "8", "annotationProcessors": ["truffle:TRUFFLE_DSL_PROCESSOR"], "workingSets": "Truffle,CUDA", "testProject": True, From 15357fc33618f99844b2e116bcf7157afabebc9c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 2 Jun 2020 12:38:30 +0200 Subject: [PATCH 071/236] fixed stream attach being done on const arrays when not necessary --- .../src/com/nvidia/grcuda/gpu/CUDARuntime.java | 2 +- .../com/nvidia/grcuda/gpu/computation/KernelExecution.java | 6 ++++-- .../dependency/WithConstDependencyComputation.java | 3 +-- .../src/com/nvidia/grcuda/gpu/stream/DefaultStream.java | 3 ++- projects/resources/python/benchmark/bench/bench_6.py | 6 +++--- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 0c616523..e963932e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -356,7 +356,7 @@ public void cudaStreamDestroy(CUDAStream stream) { @TruffleBoundary public void cudaStreamAttachMemAsync(CUDAStream stream, AbstractArray array) { - System.out.println("\t* attach array=" + array + " to " + stream); + System.out.println("\t* attach array=" + System.identityHashCode(array) + " to " + stream); final int MEM_ATTACH_SINGLE = 0x04; final int MEM_ATTACH_GLOBAL = 0x01; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index 075d0826..37217353 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -88,10 +88,12 @@ public void associateArraysToStreamImpl() { AbstractArray array = (AbstractArray) a.getArgumentValue(); if (getDependencyComputation().streamResetAttachFilter(a)) { // If the array was attached to a stream, and now it is a const parameter, reset its visibility to the default stream; - grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(DefaultStream.get(), array); + if (!array.getStreamMapping().isDefaultStream()) { + grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMemAsync(DefaultStream.get(), array); + } } else if (!array.getStreamMapping().equals(this.getStream())) { // Attach the array to the stream if the array isn't already attached to this stream; - grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMem(this.getStream(), array); + grCUDAExecutionContext.getCudaRuntime().cudaStreamAttachMemAsync(this.getStream(), array); } } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java index e9b2190a..23b4083b 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/dependency/WithConstDependencyComputation.java @@ -56,7 +56,6 @@ public List computeDependencies(GrCUDAComputationa */ @Override public boolean streamResetAttachFilter(ComputationArgumentWithValue arg) { - AbstractArray array = (AbstractArray) arg.getArgumentValue(); - return arg.isConst() && !array.getStreamMapping().isDefaultStream(); + return arg.isConst(); } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java index 48e056de..3afef750 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/DefaultStream.java @@ -13,7 +13,8 @@ private DefaultStream() { public static DefaultStream get() { return defaultStream; } @Override - public boolean isDefaultStream() { return true; } + public boolean isDefaultStream() { + return true; } @Override public String toString() { diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index f570132b..f25f3c97 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -10,7 +10,7 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 128 +NUM_THREADS_PER_BLOCK = 1024 NB_KERNEL = """ extern "C" __global__ void nb_1(const int* x, const float* y, float* z, int size, int n_feat, int n_classes) { @@ -189,8 +189,8 @@ def __init__(self, benchmark: BenchmarkResult): self.nb_amax = None self.nb_l = None - self.num_features = 10000 # self.nb_feat_log_prob_np.shape[1] - self.num_classes = 50 # self.nb_feat_log_prob_np.shape[0] + self.num_features = 1000 # self.nb_feat_log_prob_np.shape[1] + self.num_classes = 5 # self.nb_feat_log_prob_np.shape[0] self.num_blocks_size = 0 self.num_blocks_feat = (self.num_features + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK From f2754a55d204655f48ea8c27f7de8f8f2fc49cfa Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 2 Jun 2020 15:57:43 +0200 Subject: [PATCH 072/236] added cuda event api --- .../com/nvidia/grcuda/test/CUDAEventTest.java | 184 ++++++++++++++++++ .../src/com/nvidia/grcuda/CUDAEvent.java | 48 +++++ .../com/nvidia/grcuda/gpu/CUDARuntime.java | 86 ++++++++ 3 files changed, 318 insertions(+) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CUDAEventTest.java create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/CUDAEvent.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CUDAEventTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CUDAEventTest.java new file mode 100644 index 00000000..9ffde74d --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/CUDAEventTest.java @@ -0,0 +1,184 @@ +package com.nvidia.grcuda.test; + +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.Value; +import org.junit.Test; + +import java.util.HashSet; +import java.util.Set; +import java.util.stream.IntStream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class CUDAEventTest { + + /** + * Simply check if we can create a CUDA event without blowing things up! + */ + @Test + public void createEventSimpleTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createEvent = context.eval("grcuda", "cudaEventCreate"); + Value event = createEvent.execute(); + assertNotNull(event); + assertTrue(event.isNativePointer()); + } + } + + /** + * Check that we can create many different events; + */ + @Test + public void createManyEventsTest() { + int numEvents = 8; + Set eventSet = new HashSet<>(); + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createEvent = context.eval("grcuda", "cudaEventCreate"); + IntStream.range(0, numEvents).forEach(i -> { + Value event = createEvent.execute(); + eventSet.add(event.asNativePointer()); + assertNotNull(event); + assertTrue(event.isNativePointer()); + }); + assertEquals(numEvents, eventSet.size()); + } + } + + @Test + public void eventDestroyTest() { + int numEvents = 8; + Set eventSet = new HashSet<>(); + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createEvent = context.eval("grcuda", "cudaEventCreate"); + Value destroyEvent = context.eval("grcuda", "cudaEventDestroy"); + IntStream.range(0, numEvents).forEach(i -> { + Value event = createEvent.execute(); + eventSet.add(event); + assertNotNull(event); + assertTrue(event.isNativePointer()); + }); + assertEquals(numEvents, eventSet.size()); + eventSet.forEach(destroyEvent::execute); + } + } + + private static final int NUM_THREADS_PER_BLOCK = 32; + + private static final String SQUARE_KERNEL = + "extern \"C\" __global__ void square(float* x, float *y, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " y[idx] = x[idx] * x[idx];\n" + + " }" + + "}\n"; + + private static final String SUM_KERNEL = + "extern \"C\" __global__ void square(float* x, float* y, int n) {\n" + + " int idx = blockIdx.x * blockDim.x + threadIdx.x;\n" + + " if (idx < n) {\n" + + " x[idx] = x[idx] + y[idx];\n" + + " }" + + "}\n"; + + /** + * Execute sequentially two simple kernel on non-default streams, and synchronize the execution using events; + */ + @Test + public void syncStreamsTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value stream1 = createStream.execute(); + Value stream2 = createStream.execute(); + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, pointer, sint32"); + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + // Set the custom streams; + Value configuredSquareKernel1 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream1); + Value configuredSquareKernel2 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream2); + + Value createEvent = context.eval("grcuda", "cudaEventCreate"); + Value eventRecord = context.eval("grcuda", "cudaEventRecord"); + Value streamEventWait = context.eval("grcuda", "cudaStreamWaitEvent"); + + configuredSquareKernel1.execute(x, y, numElements); + + // Create an event to ensure that kernel 2 executes after kernel 1 is completed; + Value event = createEvent.execute(); + eventRecord.execute(event, stream1); + streamEventWait.execute(stream2, event); + + configuredSquareKernel2.execute(y, x, numElements); + + Value syncStream = context.eval("grcuda", "cudaStreamSynchronize"); + syncStream.execute(stream2); + + for (int i = 0; i < numElements; i++) { + assertEquals(16.0, x.getArrayElement(i).asFloat(), 0.01); + assertEquals(4.0, y.getArrayElement(i).asFloat(), 0.01); + } + } + } + + /** + * Execute two kernels on non-default streams, and synchronize them with events before running a third kernel; + * K1(Y = X^2) -> K3(Y += Z) + * K2(Z = X^2) / + */ + @Test + public void joinComputationsTest() { + try (Context context = Context.newBuilder().allowAllAccess(true).build()) { + Value createStream = context.eval("grcuda", "cudaStreamCreate"); + Value stream1 = createStream.execute(); + Value stream2 = createStream.execute(); + + final int numElements = 100; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, pointer, sint32"); + Value sumKernel = buildkernel.execute(SUM_KERNEL, "square", "pointer, pointer, sint32"); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 2.0); + } + // Set the custom streams; + Value configuredSquareKernel1 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream1); + Value configuredSquareKernel2 = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream2); + Value configuredSquareKernel3 = sumKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK, stream1); + + Value createEvent = context.eval("grcuda", "cudaEventCreate"); + Value eventRecord = context.eval("grcuda", "cudaEventRecord"); + Value streamEventWait = context.eval("grcuda", "cudaStreamWaitEvent"); + + configuredSquareKernel1.execute(x, y, numElements); + configuredSquareKernel2.execute(x, z, numElements); + + // Create an event to ensure that kernel 2 executes after kernel 1 is completed; + Value event = createEvent.execute(); + eventRecord.execute(event, stream2); + streamEventWait.execute(stream1, event); + + configuredSquareKernel3.execute(y, z, numElements); + + Value syncStream = context.eval("grcuda", "cudaStreamSynchronize"); + syncStream.execute(stream1); + + for (int i = 0; i < numElements; i++) { + assertEquals(8, y.getArrayElement(i).asFloat(), 0.01); + } + } + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/CUDAEvent.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/CUDAEvent.java new file mode 100644 index 00000000..eda7b19f --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/CUDAEvent.java @@ -0,0 +1,48 @@ +package com.nvidia.grcuda; + +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.oracle.truffle.api.interop.InteropLibrary; +import com.oracle.truffle.api.library.ExportLibrary; +import com.oracle.truffle.api.library.ExportMessage; + +import java.util.Objects; + +@ExportLibrary(InteropLibrary.class) +public class CUDAEvent extends GPUPointer { + + private final long eventNumber; + + public CUDAEvent(long rawPointer, long eventNumber) { + super(rawPointer); + this.eventNumber = eventNumber; + } + + public long getEventNumber() { + return eventNumber; + } + + public boolean isDefaultStream() { return false; } + + @Override + public String toString() { + return "CUDAEvent(eventNumber=" + this.eventNumber + "; address=0x" + Long.toHexString(this.getRawPointer()) + ")"; + } + + @ExportMessage + public Object toDisplayString(boolean allowSideEffect) { + return this.toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CUDAEvent that = (CUDAEvent) o; + return (eventNumber == that.eventNumber && this.getRawPointer() == that.getRawPointer()); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), eventNumber); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index e963932e..d08d1ad7 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -28,6 +28,7 @@ */ package com.nvidia.grcuda.gpu; +import com.nvidia.grcuda.CUDAEvent; import com.nvidia.grcuda.GPUPointer; import com.nvidia.grcuda.GrCUDAContext; import com.nvidia.grcuda.GrCUDAException; @@ -87,6 +88,16 @@ public int getNumStreams() { return numUserAllocatedStreams; } + /** + * CUDA events are used to synchronize stream computations, and guarantee that a computation starts + * only when all computations that depends from it are completed. Keep track of the number of events created; + */ + private long numEvents = 0; + public void incrementNumEvents() { numEvents++; } + public long getNumEvents() { + return numEvents; + } + /** * Map from library-path to NFI library. */ @@ -693,6 +704,81 @@ public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException callSymbol(cudaRuntime, streamAddr, arrayAddr, 0, flag); return NoneValue.get(); } + }, + CUDA_EVENTCREATE("cudaEventCreate", "(pointer): sint32") { + @Override + @TruffleBoundary + public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, UnsupportedTypeException, InteropException { + checkArgumentLength(args, 0); + try (UnsafeHelper.PointerObject eventPointer = UnsafeHelper.createPointerObject()) { + callSymbol(cudaRuntime, eventPointer.getAddress()); + CUDAEvent event = new CUDAEvent(eventPointer.getValueOfPointer(), cudaRuntime.getNumEvents()); + cudaRuntime.incrementNumEvents(); + return event; + } + } + }, + CUDA_EVENTDESTROY("cudaEventDestroy", "(pointer): sint32") { + @Override + @TruffleBoundary + public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, UnsupportedTypeException, InteropException { + checkArgumentLength(args, 1); + Object pointerObj = args[0]; + long addr; + if (pointerObj instanceof CUDAEvent) { + addr = ((CUDAEvent) pointerObj).getRawPointer(); + } else { + throw new GrCUDAException("expected CUDAEvent object"); + } + callSymbol(cudaRuntime, addr); + return NoneValue.get(); + } + }, + CUDA_EVENTRECORD("cudaEventRecord", "(pointer, pointer): sint32") { + @Override + @TruffleBoundary + public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, UnsupportedTypeException, InteropException { + checkArgumentLength(args, 2); + Object eventObj = args[0]; + Object streamObj = args[1]; + long eventAddr, streamAddr; + if (eventObj instanceof CUDAEvent) { + eventAddr = ((CUDAEvent) eventObj).getRawPointer(); + } else { + throw new GrCUDAException("expected CUDAEvent object"); + } + if (streamObj instanceof CUDAStream) { + streamAddr = ((CUDAStream) streamObj).getRawPointer(); + } else { + throw new GrCUDAException("expected CUDAStream object"); + } + callSymbol(cudaRuntime, eventAddr, streamAddr); + return NoneValue.get(); + } + }, + CUDA_STREAMWAITEVENT("cudaStreamWaitEvent", "(pointer, pointer, uint32): sint32") { + @Override + @TruffleBoundary + public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, UnsupportedTypeException, InteropException { + checkArgumentLength(args, 2); + Object streamObj = args[0]; + Object eventObj = args[1]; + long streamAddr, eventAddr; + final int FLAGS = 0x0; // Flags must be zero according to CUDA documentation; + + if (streamObj instanceof CUDAStream) { + streamAddr = ((CUDAStream) streamObj).getRawPointer(); + } else { + throw new GrCUDAException("expected CUDAStream object"); + } + if (eventObj instanceof CUDAEvent) { + eventAddr = ((CUDAEvent) eventObj).getRawPointer(); + } else { + throw new GrCUDAException("expected CUDAEvent object"); + } + callSymbol(cudaRuntime, streamAddr, eventAddr, FLAGS); + return NoneValue.get(); + } }; private final String name; From 5f35701b99310ad53962c7d50fcf9fb0db320c07 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 2 Jun 2020 16:10:57 +0200 Subject: [PATCH 073/236] added cuda event functions in the internal runtime API --- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 80 +++++++++++++++++-- 1 file changed, 74 insertions(+), 6 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index d08d1ad7..2c5c2cb7 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -385,6 +385,17 @@ public void cudaStreamAttachMemAsync(CUDAStream stream, AbstractArray array) { } } + /** + * Synchronous version of "cudaStreamAttachMemAsync". This function doesn't exist in the CUDA API, but it is useful to have; + * @param stream the stream to which we attach the array + * @param array an array that should be assigned exclusively to a stream + */ + @TruffleBoundary + public void cudaStreamAttachMem(CUDAStream stream, AbstractArray array) { + cudaStreamAttachMemAsync(stream, array); + cudaStreamSynchronize(stream); + } + @TruffleBoundary public GPUPointer getInnerCudaContext() { if (this.innerCudaContext == null) { @@ -401,14 +412,71 @@ public GPUPointer initializeInnerCudaContext() { } /** - * Synchronous version of "cudaStreamAttachMemAsync". This function doesn't exist in the CUDA API, but it is useful to have; - * @param stream the stream to which we attach the array - * @param array an array that should be assigned exclusively to a stream + * Create a new {@link CUDAEvent} and keep track of it; + * @return a new CUDA event */ @TruffleBoundary - public void cudaStreamAttachMem(CUDAStream stream, AbstractArray array) { - cudaStreamAttachMemAsync(stream, array); - cudaStreamSynchronize(stream); + public CUDAEvent cudaEventCreate() { + try (UnsafeHelper.PointerObject eventPointer = UnsafeHelper.createPointerObject()) { + Object callable = CUDARuntimeFunction.CUDA_EVENTCREATE.getSymbol(this); + Object result = INTEROP.execute(callable, eventPointer.getAddress()); + checkCUDAReturnCode(result, "cudaEventCreate"); + CUDAEvent event = new CUDAEvent(eventPointer.getValueOfPointer(), getNumEvents()); + incrementNumEvents(); + return event; + } catch (InteropException e) { + throw new GrCUDAException(e); + } + } + + /** + * Destroy a given CUDA event; + * @param event a CUDA Event to destroy + */ + @TruffleBoundary + public void cudaEventDestroy(CUDAEvent event) { + try { + Object callable = CUDARuntimeFunction.CUDA_EVENTDESTROY.getSymbol(this); + Object result = INTEROP.execute(callable, event.getRawPointer()); + checkCUDAReturnCode(result, "cudaEventDestroy"); + } catch (InteropException e) { + throw new GrCUDAException(e); + } + } + + /** + * Add a given event to a stream. The event is a stream-ordered checkpoint on which we can perform synchronization, + * or force another stream to wait for the event to occur before executing any other scheduled operation queued on that stream; + * @param event a CUDA event + * @param stream a CUDA stream to which the event is associated + */ + @TruffleBoundary + public void cudaEventRecord(CUDAEvent event, CUDAStream stream) { + try { + System.out.println("\t* event on stream; stream=" + stream.getStreamNumber() + "; event=" + event.getEventNumber()); + Object callable = CUDARuntimeFunction.CUDA_EVENTRECORD.getSymbol(this); + Object result = INTEROP.execute(callable, event.getRawPointer(), stream.getRawPointer()); + checkCUDAReturnCode(result, "cudaEventRecord"); + } catch (InteropException e) { + throw new GrCUDAException(e); + } + } + + /** + * Tell a stream to wait for a given event to occur on another stream before executing any other computation; + * @param stream a CUDA stream to which the event is associated + * @param event a CUDA event that the stream should wait for + */ + @TruffleBoundary + public void cudaStreamWaitEvent(CUDAStream stream, CUDAEvent event) { + try { + System.out.println("\t* stream wait event; stream=" + stream.getStreamNumber() + "; event=" + event.getEventNumber()); + Object callable = CUDARuntimeFunction.CUDA_STREAMWAITEVENT.getSymbol(this); + Object result = INTEROP.execute(callable, stream.getRawPointer(), event.getRawPointer()); + checkCUDAReturnCode(result, "cudaStreamWaitEvent"); + } catch (InteropException e) { + throw new GrCUDAException(e); + } } /** From 5023e67e66d7489313f8874c33d0a3c9a3b6f54e Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 2 Jun 2020 17:39:45 +0200 Subject: [PATCH 074/236] replaced kernel sync with cuda events --- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 5 +- .../gpu/stream/GrCUDAStreamManager.java | 198 ++++++++++++------ .../python/benchmark/bench/bench_6.py | 10 +- 3 files changed, 147 insertions(+), 66 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 2c5c2cb7..83c091d2 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -453,7 +453,6 @@ public void cudaEventDestroy(CUDAEvent event) { @TruffleBoundary public void cudaEventRecord(CUDAEvent event, CUDAStream stream) { try { - System.out.println("\t* event on stream; stream=" + stream.getStreamNumber() + "; event=" + event.getEventNumber()); Object callable = CUDARuntimeFunction.CUDA_EVENTRECORD.getSymbol(this); Object result = INTEROP.execute(callable, event.getRawPointer(), stream.getRawPointer()); checkCUDAReturnCode(result, "cudaEventRecord"); @@ -470,9 +469,9 @@ public void cudaEventRecord(CUDAEvent event, CUDAStream stream) { @TruffleBoundary public void cudaStreamWaitEvent(CUDAStream stream, CUDAEvent event) { try { - System.out.println("\t* stream wait event; stream=" + stream.getStreamNumber() + "; event=" + event.getEventNumber()); + final int FLAGS = 0x0; // Must be 0 according to CUDA documentation; Object callable = CUDARuntimeFunction.CUDA_STREAMWAITEVENT.getSymbol(this); - Object result = INTEROP.execute(callable, stream.getRawPointer(), event.getRawPointer()); + Object result = INTEROP.execute(callable, stream.getRawPointer(), event.getRawPointer(), FLAGS); checkCUDAReturnCode(result, "cudaStreamWaitEvent"); } catch (InteropException e) { throw new GrCUDAException(e); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index c952d8fa..5264ae66 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -1,5 +1,6 @@ package com.nvidia.grcuda.gpu.stream; +import com.nvidia.grcuda.CUDAEvent; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; @@ -97,39 +98,74 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { } } - /** - * Given a computation, synchronize all its parent streams. The caller thread will be blocked until all the - * computations on the parents streams are finished; - * @param vertex a computation whose parents should be synchronized - */ - public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { +// /** +// * Given a computation, synchronize all its parent streams. The caller thread will be blocked until all the +// * computations on the parents streams are finished; +// * @param vertex a computation whose parents should be synchronized +// */ +// public void syncParentStreamsOld(ExecutionDAG.DAGVertex vertex) { +// +// // Skip syncing if no computation is active; +// if (this.isAnyComputationActive()) { +// Set computationsToSync = new HashSet<>(vertex.getParentComputations()); +// +// // Retrieve an additional stream dependency from the computation, if required; +// Optional additionalStream = vertex.getComputation().additionalStreamDependency(); +// if (additionalStream.isPresent()) { +// CUDAStream stream = additionalStream.get(); +// // If we require synchronization on the default stream, perform it in a specialized way; +// if (stream.isDefaultStream()) { +// System.out.println("--\tsync stream " + stream + " by " + vertex.getComputation()); +// // Synchronize the device; +// runtime.cudaDeviceSynchronize(); +// // All computations are now finished; +// resetActiveComputationState(); +// } else if (!getParentStreams(computationsToSync).contains(stream)) { +// // Else add the computations related to the additional streams to the set and sync it, +// // as long as the additional stream isn't the same as the one that we have to sync anyway; +// System.out.println("--\tsyncing additional stream " + stream + "..."); +// computationsToSync.addAll(activeComputationsPerStream.get(stream)); +// syncParentStreamsImpl(computationsToSync, vertex.getComputation()); +// } else { +// syncParentStreamsImpl(computationsToSync, vertex.getComputation()); +// } +// } else { +// syncParentStreamsImpl(computationsToSync, vertex.getComputation()); +// } +// } +// } - // Skip syncing if no computation is active; - if (this.isAnyComputationActive()) { - Set computationsToSync = new HashSet<>(vertex.getParentComputations()); - - // Retrieve an additional stream dependency from the kernel, if required; - Optional additionalStream = vertex.getComputation().additionalStreamDependency(); - if (additionalStream.isPresent()) { - CUDAStream stream = additionalStream.get(); - // If we require synchronization on the default stream, perform it in a specialized way; - if (stream.isDefaultStream()) { - System.out.println("--\tsync stream " + stream + " by " + vertex.getComputation()); - // Synchronize the device; - runtime.cudaDeviceSynchronize(); - // All computations are now finished; - resetActiveComputationState(); - } else if (!getParentStreams(computationsToSync).contains(stream)) { - // Else add the computations related to the additional streams to the set and sync it, - // as long as the additional stream isn't the same as the one that we have to sync anyway; - System.out.println("--\tsyncing additional stream " + stream + "..."); - computationsToSync.addAll(activeComputationsPerStream.get(stream)); - syncParentStreamsImpl(computationsToSync, vertex.getComputation()); + public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { + // If the vertex can be executed on a CUDA stream, use CUDA events, + // otherwise use stream/device synchronization to block the host until synchronization is done; + if (vertex.getComputation().canUseStream()) { + syncStreamsUsingEvents(vertex); + } else { + if (this.isAnyComputationActive()) { + List computationsToSync = vertex.getParentComputations(); + Set streamsToSync = getParentStreams(computationsToSync); + Optional additionalStream = vertex.getComputation().additionalStreamDependency(); + if (additionalStream.isPresent()) { + CUDAStream stream = additionalStream.get(); + // If we require synchronization on the default stream, perform it in a specialized way; + if (stream.isDefaultStream()) { + System.out.println("--\tsync stream " + stream + " by " + vertex.getComputation()); + // Synchronize the device; + runtime.cudaDeviceSynchronize(); + // All computations are now finished; + resetActiveComputationState(); + } else if (!streamsToSync.contains(stream)) { + // Else add the computations related to the additional streams to the set and sync it, + // as long as the additional stream isn't the same as the one that we have to sync anyway; + System.out.println("--\tsyncing additional stream " + stream + "..."); + streamsToSync.add(stream); + syncParentStreamsImpl(streamsToSync, computationsToSync, vertex.getComputation()); + } else { + syncParentStreamsImpl(streamsToSync, computationsToSync, vertex.getComputation()); + } } else { - syncParentStreamsImpl(computationsToSync, vertex.getComputation()); + syncParentStreamsImpl(streamsToSync, computationsToSync, vertex.getComputation()); } - } else { - syncParentStreamsImpl(computationsToSync, vertex.getComputation()); } } } @@ -139,40 +175,80 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { * @param computationsToSync a set of computations to sync * @return the set of CUDAStreams that have to be synchronized */ - private Set getParentStreams(Set computationsToSync) { + private Set getParentStreams(Collection computationsToSync) { return computationsToSync.stream().map(GrCUDAComputationalElement::getStream).collect(Collectors.toSet()); } /** - * Synchronize a list of computations on their streams; - * @param computationsToSync a list of computations whose streams should be synced - * @param computationThatSyncs the computation that triggered the syncing process + * If a computation can be scheduled on a stream, use {@link CUDAEvent} to synchronize parent computations + * without blocking the CPU host + * @param vertex a computation whose parent's streams must be synchronized */ - private void syncParentStreamsImpl( - Set computationsToSync, - GrCUDAComputationalElement computationThatSyncs) { - - // Keep a set of streams synced so far, to avoid syncing the same stream multiple times; - Set syncedStreams = new HashSet<>(); - - computationsToSync.forEach(c -> { - // When scheduling a computation that uses the same stream of the parent, avoid manual synchronization as it is handled by CUDA; - if (!(computationThatSyncs.canUseStream() && computationThatSyncs.getStream().equals(c.getStream()))) { - // Synchronize computations that are not yet finished and can use streams; - if (c.canUseStream() && !c.isComputationFinished()) { - if (!syncedStreams.contains(c.getStream())) { - System.out.println("--\tsync stream " + c.getStream() + " by " + computationThatSyncs); - runtime.cudaStreamSynchronize(c.getStream()); - syncedStreams.add(c.getStream()); - } - // Set the parent computations as finished; - c.setComputationFinished(); - // Decrement the active computation count; - removeActiveComputation(c); - } - } else { - System.out.println("--\tavoid manual sync of " + c + " by " + computationThatSyncs); + private void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { + Set streamToSync = getParentStreams(vertex.getParentComputations()); + for (CUDAStream stream : streamToSync) { + // Skip synchronization on the same stream where the new computation is executed, + // as operations scheduled on a stream are executed in order; + if (!vertex.getComputation().getStream().equals(stream)) { + // Create a new synchronization event on the stream; + CUDAEvent event = runtime.cudaEventCreate(); + runtime.cudaEventRecord(event, stream); + runtime.cudaStreamWaitEvent(vertex.getComputation().getStream(), event); + + System.out.println("\t* wait event on stream; stream to sync=" + stream.getStreamNumber() + + "; stream that waits=" + vertex.getComputation().getStream().getStreamNumber() + + "; event=" + event.getEventNumber()); } + } + } + +// /** +// * Synchronize a list of computations on their streams; +// * @param computationsToSync a list of computations whose streams should be synced +// * @param computationThatSyncs the computation that triggered the syncing process +// */ +// private void syncParentStreamsImpl( +// Set computationsToSync, +// GrCUDAComputationalElement computationThatSyncs) { +// +// // Keep a set of streams synced so far, to avoid syncing the same stream multiple times; +// Set syncedStreams = new HashSet<>(); +// +// computationsToSync.forEach(c -> { +// // When scheduling a computation that uses the same stream of the parent, avoid manual synchronization as it is handled by CUDA; +// if (!(computationThatSyncs.canUseStream() && computationThatSyncs.getStream().equals(c.getStream()))) { +// // Synchronize computations that are not yet finished and can use streams; +// if (c.canUseStream() && !c.isComputationFinished()) { +// if (!syncedStreams.contains(c.getStream())) { +// System.out.println("--\tsync stream " + c.getStream() + " by " + computationThatSyncs); +// runtime.cudaStreamSynchronize(c.getStream()); +// syncedStreams.add(c.getStream()); +// } +// // Set the parent computations as finished; +// c.setComputationFinished(); +// // Decrement the active computation count; +// removeActiveComputation(c); +// } +// } else { +// System.out.println("--\tavoid manual sync of " + c + " by " + computationThatSyncs); +// } +// }); +// } + + private void syncParentStreamsImpl(Set streamsToSync, + List parentComputations, + GrCUDAComputationalElement computationThatSyncs) { + // Synchronize streams; + streamsToSync.forEach(s -> { + System.out.println("--\tsync stream=" + s.getStreamNumber() + " by " + computationThatSyncs); + runtime.cudaStreamSynchronize(s); + }); + // Book-keeping: all computations are now guaranteed to be finished; + parentComputations.forEach(c -> { + // Set the parent computations as finished; + c.setComputationFinished(); + // Decrement the active computation count; + removeActiveComputation(c); }); } @@ -236,9 +312,9 @@ protected void removeActiveComputation(GrCUDAComputationalElement computation) { * Reset the association between streams and computations. All computations are finished, and all streams are free; */ private void resetActiveComputationState() { - activeComputationsPerStream.keySet().forEach(s -> { - activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished); - }); + activeComputationsPerStream.keySet().forEach(s -> + activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished) + ); // Streams don't have any active computation; activeComputationsPerStream.clear(); // All streams are free; diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index f25f3c97..50cd422a 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -10,7 +10,7 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 1024 +NUM_THREADS_PER_BLOCK = 32 NB_KERNEL = """ extern "C" __global__ void nb_1(const int* x, const float* y, float* z, int size, int n_feat, int n_classes) { @@ -19,7 +19,7 @@ for (int j = 0; j < n_classes; j++) { for (int q = 0; q < n_feat; q++) { z[i * n_classes + j] += x[i * n_feat + q] * y[j * n_feat + q]; - } + } } } } @@ -327,6 +327,12 @@ def execute(self) -> object: end = time.time() self.benchmark.add_phase({"name": "argmax", "time_sec": end - start}) + # Add a final sync step to measure the real computation time; + start = time.time() + tmp = self.r[0] + end = time.time() + self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) + self.benchmark.add_to_benchmark("gpu_result", 0) if self.benchmark.debug: BenchmarkResult.log_message(f"\tgpu result: [" + ", ".join([f"{x:.4f}" for x in self.r[:10]]) + "...]") From 2be2c99fd9ba97fb1abde134222a3904886b9cf4 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 3 Jun 2020 11:51:14 +0200 Subject: [PATCH 075/236] updated stream test to use new sync computation; fixed parent-of-parent computations not being marked as completed --- .../grcuda/test/gpu/ExecutionDAGTest.java | 33 +++-- .../WithConstDependencyComputationTest.java | 99 ++++++++++----- .../gpu/stream/GrCUDAStreamManagerTest.java | 58 ++++++--- .../test/mock/GrCUDAStreamManagerMock.java | 22 ++-- .../gpu/stream/GrCUDAStreamManager.java | 117 +++--------------- .../python/benchmark/bench/bench_6.py | 23 ++-- 6 files changed, 165 insertions(+), 187 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index b71e55b6..3ed59074 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -3,9 +3,12 @@ import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; import com.nvidia.grcuda.test.mock.ArgumentMock; import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; import com.nvidia.grcuda.test.mock.KernelExecutionMock; +import com.nvidia.grcuda.test.mock.SyncExecutionMock; import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.junit.Test; @@ -144,12 +147,13 @@ public void complexFrontierMockTest() throws UnsupportedTypeException { @Test public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(true); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.DEFAULT, true, + RetrieveNewStreamPolicyEnum.FIFO, RetrieveParentStreamPolicyEnum.DISJOINT); // This time, simulate the synchronization process between kernels; // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) - // C(2) - // The final frontier is composed by C(2) F(4); + // \-> C(2) + // Synchronize C, then F new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); @@ -161,10 +165,11 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { // Check the DAG structure; assertEquals(6, dag.getNumVertices()); - assertEquals(4, dag.getNumEdges()); - assertEquals(2, dag.getFrontier().size()); + assertEquals(5, dag.getNumEdges()); + assertEquals(4, dag.getFrontier().size()); // Check updates to frontier and start status; - assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(5))), + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3), + dag.getVertices().get(4), dag.getVertices().get(5))), new HashSet<>(dag.getFrontier())); assertFalse(dag.getVertices().get(0).isFrontier()); @@ -172,12 +177,22 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { assertFalse(dag.getVertices().get(1).isFrontier()); assertFalse(dag.getVertices().get(1).isStart()); assertTrue(dag.getVertices().get(2).isFrontier()); - assertTrue(dag.getVertices().get(2).isStart()); - assertFalse(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(2).isStart()); + assertTrue(dag.getVertices().get(3).isFrontier()); assertFalse(dag.getVertices().get(3).isStart()); - assertFalse(dag.getVertices().get(4).isFrontier()); + assertTrue(dag.getVertices().get(4).isFrontier()); assertFalse(dag.getVertices().get(4).isStart()); assertTrue(dag.getVertices().get(5).isFrontier()); assertFalse(dag.getVertices().get(5).isStart()); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + assertEquals(3, dag.getFrontier().size()); + assertFalse(dag.getVertices().get(2).isFrontier()); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); + assertEquals(0, dag.getFrontier().size()); + assertFalse(dag.getVertices().get(3).isFrontier()); + assertFalse(dag.getVertices().get(4).isFrontier()); + assertFalse(dag.getVertices().get(5).isFrontier()); } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java index 72361300..10640cd7 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -3,10 +3,13 @@ import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; import com.nvidia.grcuda.test.mock.ArgumentMock; import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMock; import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMockBuilder; import com.nvidia.grcuda.test.mock.KernelExecutionMock; +import com.nvidia.grcuda.test.mock.SyncExecutionMock; import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; @@ -254,15 +257,15 @@ public void dependencyPipelineSimpleWithSyncMockTest() throws UnsupportedTypeExc // Check the DAG structure; assertEquals(4, dag.getNumVertices()); assertEquals(3, dag.getNumEdges()); - assertEquals(1, dag.getFrontier().size()); + assertEquals(2, dag.getFrontier().size()); // Check updates to frontier and start status; - assertEquals(new HashSet<>(Collections.singletonList(dag.getVertices().get(3))), + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3))), new HashSet<>(dag.getFrontier())); assertFalse(dag.getVertices().get(0).isFrontier()); assertTrue(dag.getVertices().get(0).isStart()); assertFalse(dag.getVertices().get(1).isFrontier()); assertTrue(dag.getVertices().get(1).isStart()); - assertFalse(dag.getVertices().get(2).isFrontier()); + assertTrue(dag.getVertices().get(2).isFrontier()); assertFalse(dag.getVertices().get(2).isStart()); assertTrue(dag.getVertices().get(3).isFrontier()); assertFalse(dag.getVertices().get(3).isStart()); @@ -277,6 +280,10 @@ public void dependencyPipelineSimpleWithSyncMockTest() throws UnsupportedTypeExc assertEquals(1, dag.getVertices().get(2).getChildren().size()); assertEquals(dag.getVertices().get(2), dag.getVertices().get(3).getParentVertices().get(0)); assertEquals(dag.getVertices().get(3), dag.getVertices().get(2).getChildVertices().get(0)); + + // Finish the computation; + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + assertEquals(0, dag.getFrontier().size()); } @Test @@ -285,7 +292,7 @@ public void forkedComputationWithSyncTest() throws UnsupportedTypeException { .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).setSyncStream(true).build(); // A(1) --> B(1R) - // C(1R) + // \-> C(1R) new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1, true))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1, true))).schedule(); @@ -294,38 +301,42 @@ public void forkedComputationWithSyncTest() throws UnsupportedTypeException { // Check the DAG structure; assertEquals(3, dag.getNumVertices()); - assertEquals(1, dag.getNumEdges()); - assertEquals(2, dag.getFrontier().size()); + assertEquals(2, dag.getNumEdges()); + assertEquals(3, dag.getFrontier().size()); - assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isFrontier()); assertTrue(dag.getVertices().get(0).isStart()); assertTrue(dag.getVertices().get(1).isFrontier()); assertFalse(dag.getVertices().get(1).isStart()); assertTrue(dag.getVertices().get(2).isFrontier()); - assertTrue(dag.getVertices().get(2).isStart()); + assertFalse(dag.getVertices().get(2).isStart()); assertEquals(dag.getVertices().get(0), dag.getVertices().get(1).getParentVertices().get(0)); - assertEquals(0, dag.getVertices().get(2).getParentVertices().size()); + assertEquals(1, dag.getVertices().get(2).getParentVertices().size()); assertFalse(dag.getVertices().get(2).getParentVertices().contains(dag.getVertices().get(1))); assertFalse(dag.getVertices().get(1).getChildVertices().contains(dag.getVertices().get(2))); // Add a fourth computation that depends on both B and C, and depends on both; // A(1) -> B(1R) -> D(1) - // C(1R) / + // \-> C(1R) / new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); assertEquals(4, dag.getNumVertices()); - assertEquals(3, dag.getNumEdges()); + assertEquals(4, dag.getNumEdges()); assertEquals(1, dag.getFrontier().size()); + + // Finish the computation; + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + assertEquals(0, dag.getFrontier().size()); } @Test public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() - .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).setSyncStream(true).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.WITH_CONST, true, + RetrieveNewStreamPolicyEnum.FIFO, RetrieveParentStreamPolicyEnum.DISJOINT); - // A(1R,2) -> B(1) -> D(1R,3) - // C(2R) E(1R,4) -> F(4) - // The final frontier is composed by C(2R), D(1R, 3), F(4); + // A(1R,2) -> B(1) ---> D(1R,3) + // \-> C(2R) \-> E(1R,4) -> F(4) + // The final frontier is composed by A(1R,2), B(1), C(2R), D(1R,3), E(1R,4), F(4); new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2, true))).schedule(); @@ -337,22 +348,22 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { // Check the DAG structure; assertEquals(6, dag.getNumVertices()); - assertEquals(3, dag.getNumEdges()); - assertEquals(3, dag.getFrontier().size()); + assertEquals(5, dag.getNumEdges()); + assertEquals(6, dag.getFrontier().size()); // Check updates to frontier and start status; - assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(3), dag.getVertices().get(5))), + assertEquals(new HashSet<>(dag.getVertices()), new HashSet<>(dag.getFrontier())); - assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isFrontier()); assertTrue(dag.getVertices().get(0).isStart()); - assertFalse(dag.getVertices().get(1).isFrontier()); + assertTrue(dag.getVertices().get(1).isFrontier()); assertFalse(dag.getVertices().get(1).isStart()); assertTrue(dag.getVertices().get(2).isFrontier()); - assertTrue(dag.getVertices().get(2).isStart()); + assertFalse(dag.getVertices().get(2).isStart()); assertTrue(dag.getVertices().get(3).isFrontier()); assertFalse(dag.getVertices().get(3).isStart()); - assertFalse(dag.getVertices().get(4).isFrontier()); - assertTrue(dag.getVertices().get(4).isStart()); + assertTrue(dag.getVertices().get(4).isFrontier()); + assertFalse(dag.getVertices().get(4).isStart()); assertTrue(dag.getVertices().get(5).isFrontier()); assertFalse(dag.getVertices().get(5).isStart()); // Check that D is a child of B and C and D are not connected; @@ -362,16 +373,28 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { // Check that D and E are not connected; assertFalse(dag.getVertices().get(4).getParentVertices().contains(dag.getVertices().get(3))); assertFalse(dag.getVertices().get(3).getChildVertices().contains(dag.getVertices().get(4))); + + // Synchronize computations; + // A(1R,2) -> B(1) ---> D(1R,3) + // \-> C(2R) \-> E(1R,4) -> F(4) + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + assertEquals(4, dag.getFrontier().size()); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); + assertEquals(2, dag.getFrontier().size()); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(3))).schedule(); + assertEquals(0, dag.getFrontier().size()); } @Test public void complexFrontier2WithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() - .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).setSyncStream(true).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.WITH_CONST, true, + RetrieveNewStreamPolicyEnum.FIFO, RetrieveParentStreamPolicyEnum.DISJOINT); // A(1R,2) -> B(1) -> D(1R,3) ---------> G(1, 3, 4) - // C(2R) E(1R,4) -> F(4) -/ - // The final frontier is composed by C(2R), G(1, 3, 4); + // \-> C(2R) \-> E(1R,4) -> F(4) -/ + // The final frontier is composed by A(1R,2), C(2R), G(1, 3, 4); new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2, true))).schedule(); @@ -384,24 +407,26 @@ public void complexFrontier2WithSyncMockTest() throws UnsupportedTypeException { // Check the DAG structure; assertEquals(7, dag.getNumVertices()); - assertEquals(5, dag.getNumEdges()); - assertEquals(2, dag.getFrontier().size()); + assertEquals(7, dag.getNumEdges()); + assertEquals(3, dag.getFrontier().size()); // Check updates to frontier and start status; - assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(2), dag.getVertices().get(6))), + assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(0), dag.getVertices().get(2), dag.getVertices().get(6))), new HashSet<>(dag.getFrontier())); - assertFalse(dag.getVertices().get(0).isFrontier()); + assertTrue(dag.getVertices().get(0).isFrontier()); assertTrue(dag.getVertices().get(0).isStart()); assertFalse(dag.getVertices().get(1).isFrontier()); assertFalse(dag.getVertices().get(1).isStart()); assertTrue(dag.getVertices().get(2).isFrontier()); - assertTrue(dag.getVertices().get(2).isStart()); + assertFalse(dag.getVertices().get(2).isStart()); assertFalse(dag.getVertices().get(3).isFrontier()); assertFalse(dag.getVertices().get(3).isStart()); assertFalse(dag.getVertices().get(4).isFrontier()); - assertTrue(dag.getVertices().get(4).isStart()); + assertFalse(dag.getVertices().get(4).isStart()); assertFalse(dag.getVertices().get(5).isFrontier()); assertFalse(dag.getVertices().get(5).isStart()); + assertTrue(dag.getVertices().get(6).isFrontier()); + assertFalse(dag.getVertices().get(6).isStart()); // Check that D is a child of B and C and D are not connected; assertEquals(dag.getVertices().get(1), dag.getVertices().get(3).getParentVertices().get(0)); assertFalse(dag.getVertices().get(3).getParentVertices().contains(dag.getVertices().get(2))); @@ -411,5 +436,11 @@ public void complexFrontier2WithSyncMockTest() throws UnsupportedTypeException { assertFalse(dag.getVertices().get(3).getChildVertices().contains(dag.getVertices().get(4))); // Check that G is child exactly of D and F; assertEquals(new HashSet<>(Arrays.asList(dag.getVertices().get(3), dag.getVertices().get(5))), new HashSet<>(dag.getVertices().get(6).getParentVertices())); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + assertEquals(1, dag.getFrontier().size()); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); + assertEquals(0, dag.getFrontier().size()); } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 2e136785..14b5f07d 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -10,6 +10,7 @@ import com.nvidia.grcuda.test.mock.KernelExecutionMock; import com.nvidia.grcuda.test.mock.SyncExecutionMock; import com.oracle.truffle.api.interop.UnsupportedTypeException; +import com.sun.corba.se.impl.orbutil.concurrent.Sync; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -152,9 +153,15 @@ public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeExcept assertEquals(1, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); - assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(3).getComputation().getStream())); + assertEquals(3, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(3).getComputation().getStream())); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(1).getComputation().getStream())); + + // Synchronize computations; + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(3))).schedule(); // The stream has no active computation; - assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(1).getComputation().getStream())); + // FIXME: the computation on streams synced with events must also be declared as finished! A new K(2) should not depend on B(2) right now!! + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(1).getComputation().getStream())); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(3).getComputation().getStream())); } @Test @@ -162,7 +169,7 @@ public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveNewStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) - // C(2) + // \-> C(2) // The final frontier is composed by C(2), D(3), E(1), F(4); new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); @@ -177,16 +184,20 @@ public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { ExecutionDAG dag = context.getDag(); // Check that kernels have been given the right stream; - assertEquals(2, context.getDag().getFrontier().size()); - assertEquals(2, context.getStreamManager().getNumberOfStreams()); + assertEquals(4, context.getDag().getFrontier().size()); + // In this simple test, do not use disjoint stream assignment; + assertEquals(1, context.getStreamManager().getNumberOfStreams()); assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); - assertEquals(1, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(5).getComputation().getStream().getStreamNumber()); - assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(5).getComputation().getStream())); - assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(2).getComputation().getStream())); + assertEquals(6, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(5).getComputation().getStream())); + + // All computations are on the same stream, so syncing one will terminate all of them; + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(5).getComputation().getStream())); } @Test @@ -194,7 +205,7 @@ public void streamSelection2WithSyncMockTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveNewStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) - // C(2) + // \-> C(2) // E(4) -> F(4, 5) new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); @@ -209,16 +220,22 @@ public void streamSelection2WithSyncMockTest() throws UnsupportedTypeException { ExecutionDAG dag = context.getDag(); // Check that kernels have been given the right stream; - assertEquals(3, context.getStreamManager().getNumberOfStreams()); + assertEquals(2, context.getStreamManager().getNumberOfStreams()); assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); - assertEquals(1, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); - assertEquals(2, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); - assertEquals(2, dag.getVertices().get(5).getComputation().getStream().getStreamNumber()); - assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(0).getComputation().getStream())); - assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(2).getComputation().getStream())); - assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(4).getComputation().getStream())); + assertEquals(1, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(5).getComputation().getStream().getStreamNumber()); + assertEquals(4, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(0).getComputation().getStream())); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(4).getComputation().getStream())); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(2).getComputation().getStream())); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(4).getComputation().getStream())); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(5).getComputation().getStream())); } @Test @@ -263,8 +280,15 @@ public void disjointArgumentStreamTest() throws UnsupportedTypeException { assertEquals(2, context.getStreamManager().getNumberOfStreams()); assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); assertEquals(0, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); - assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(1).getComputation().getStream())); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(1).getComputation().getStream())); assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(2).getComputation().getStream())); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(2).getComputation().getStream())); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(0).getComputation().getStream())); + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(0).getComputation().getStream())); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(1).getComputation().getStream())); } @Test diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index 830e9634..8963f6ef 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -8,7 +8,9 @@ import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; +import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; public class GrCUDAStreamManagerMock extends GrCUDAStreamManager { @@ -47,24 +49,14 @@ public CUDAStream createStream() { } @Override - public void syncStream(CUDAStream stream) { + public void syncStream(CUDAStream stream) { } - } + @Override + protected void syncDevice() { } + // The mocked stream manager doesn't require to use events; @Override - public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { - if (syncParents) { - vertex.getParentComputations().forEach(c -> { - // Synchronize computations that are not yet finished and can use streams; - if (!c.isComputationFinished() && c.canUseStream()) { - // Set the parent computations as finished; - c.setComputationFinished(); - // Decrement the active computation count; - removeActiveComputation(c); - } - }); - } - } + protected void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { } public Map> getActiveComputationsMap() { return this.activeComputationsPerStream; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 5264ae66..1174fdf4 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -98,43 +98,6 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { } } -// /** -// * Given a computation, synchronize all its parent streams. The caller thread will be blocked until all the -// * computations on the parents streams are finished; -// * @param vertex a computation whose parents should be synchronized -// */ -// public void syncParentStreamsOld(ExecutionDAG.DAGVertex vertex) { -// -// // Skip syncing if no computation is active; -// if (this.isAnyComputationActive()) { -// Set computationsToSync = new HashSet<>(vertex.getParentComputations()); -// -// // Retrieve an additional stream dependency from the computation, if required; -// Optional additionalStream = vertex.getComputation().additionalStreamDependency(); -// if (additionalStream.isPresent()) { -// CUDAStream stream = additionalStream.get(); -// // If we require synchronization on the default stream, perform it in a specialized way; -// if (stream.isDefaultStream()) { -// System.out.println("--\tsync stream " + stream + " by " + vertex.getComputation()); -// // Synchronize the device; -// runtime.cudaDeviceSynchronize(); -// // All computations are now finished; -// resetActiveComputationState(); -// } else if (!getParentStreams(computationsToSync).contains(stream)) { -// // Else add the computations related to the additional streams to the set and sync it, -// // as long as the additional stream isn't the same as the one that we have to sync anyway; -// System.out.println("--\tsyncing additional stream " + stream + "..."); -// computationsToSync.addAll(activeComputationsPerStream.get(stream)); -// syncParentStreamsImpl(computationsToSync, vertex.getComputation()); -// } else { -// syncParentStreamsImpl(computationsToSync, vertex.getComputation()); -// } -// } else { -// syncParentStreamsImpl(computationsToSync, vertex.getComputation()); -// } -// } -// } - public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { // If the vertex can be executed on a CUDA stream, use CUDA events, // otherwise use stream/device synchronization to block the host until synchronization is done; @@ -151,7 +114,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { if (stream.isDefaultStream()) { System.out.println("--\tsync stream " + stream + " by " + vertex.getComputation()); // Synchronize the device; - runtime.cudaDeviceSynchronize(); + syncDevice(); // All computations are now finished; resetActiveComputationState(); } else if (!streamsToSync.contains(stream)) { @@ -175,7 +138,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { * @param computationsToSync a set of computations to sync * @return the set of CUDAStreams that have to be synchronized */ - private Set getParentStreams(Collection computationsToSync) { + protected Set getParentStreams(Collection computationsToSync) { return computationsToSync.stream().map(GrCUDAComputationalElement::getStream).collect(Collectors.toSet()); } @@ -184,7 +147,7 @@ private Set getParentStreams(Collection * without blocking the CPU host * @param vertex a computation whose parent's streams must be synchronized */ - private void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { + protected void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { Set streamToSync = getParentStreams(vertex.getParentComputations()); for (CUDAStream stream : streamToSync) { // Skip synchronization on the same stream where the new computation is executed, @@ -202,54 +165,23 @@ private void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { } } -// /** -// * Synchronize a list of computations on their streams; -// * @param computationsToSync a list of computations whose streams should be synced -// * @param computationThatSyncs the computation that triggered the syncing process -// */ -// private void syncParentStreamsImpl( -// Set computationsToSync, -// GrCUDAComputationalElement computationThatSyncs) { -// -// // Keep a set of streams synced so far, to avoid syncing the same stream multiple times; -// Set syncedStreams = new HashSet<>(); -// -// computationsToSync.forEach(c -> { -// // When scheduling a computation that uses the same stream of the parent, avoid manual synchronization as it is handled by CUDA; -// if (!(computationThatSyncs.canUseStream() && computationThatSyncs.getStream().equals(c.getStream()))) { -// // Synchronize computations that are not yet finished and can use streams; -// if (c.canUseStream() && !c.isComputationFinished()) { -// if (!syncedStreams.contains(c.getStream())) { -// System.out.println("--\tsync stream " + c.getStream() + " by " + computationThatSyncs); -// runtime.cudaStreamSynchronize(c.getStream()); -// syncedStreams.add(c.getStream()); -// } -// // Set the parent computations as finished; -// c.setComputationFinished(); -// // Decrement the active computation count; -// removeActiveComputation(c); -// } -// } else { -// System.out.println("--\tavoid manual sync of " + c + " by " + computationThatSyncs); -// } -// }); -// } - - private void syncParentStreamsImpl(Set streamsToSync, + protected void syncParentStreamsImpl(Set streamsToSync, List parentComputations, GrCUDAComputationalElement computationThatSyncs) { // Synchronize streams; streamsToSync.forEach(s -> { System.out.println("--\tsync stream=" + s.getStreamNumber() + " by " + computationThatSyncs); - runtime.cudaStreamSynchronize(s); - }); - // Book-keeping: all computations are now guaranteed to be finished; - parentComputations.forEach(c -> { - // Set the parent computations as finished; - c.setComputationFinished(); - // Decrement the active computation count; - removeActiveComputation(c); + syncStream(s); + + // Book-keeping: all computations on the synchronized streams are guaranteed to be finished; + activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished); + // Now the stream is free to be re-used; + activeComputationsPerStream.remove(s); + retrieveNewStream.update(s); }); + // TODO: when "completing" each computation on a stream, store in a set the stream of their parent; + // then, complete computations on those streams too (but they should not be free, there could be other stuff scheduled on that stream). + // simply remove the computation from the active streams and update their state, but do not use "clear" } /** @@ -265,6 +197,10 @@ public void syncStream(CUDAStream stream) { runtime.cudaStreamSynchronize(stream); } + protected void syncDevice() { + runtime.cudaDeviceSynchronize(); + } + /** * Obtain the number of streams managed by this manager; */ @@ -293,25 +229,10 @@ protected void addActiveComputation(GrCUDAComputationalElement computation) { activeComputationsPerStream.get(stream).add(computation); } - /** - * Remove a computation from the map that associates streams to their active computations, - * and mark the stream as free if no other computations are active on the stream; - * @param computation a computation that is no longer active - */ - protected void removeActiveComputation(GrCUDAComputationalElement computation) { - CUDAStream stream = computation.getStream(); - activeComputationsPerStream.get(stream).remove(computation); - // If this stream doesn't have any computation associated to it, it's free to use; - if (activeComputationsPerStream.get(stream).isEmpty()) { - activeComputationsPerStream.remove(stream); - retrieveNewStream.update(stream); - } - } - /** * Reset the association between streams and computations. All computations are finished, and all streams are free; */ - private void resetActiveComputationState() { + protected void resetActiveComputationState() { activeComputationsPerStream.keySet().forEach(s -> activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished) ); diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index 50cd422a..d5f2c329 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -282,6 +282,12 @@ def execute(self) -> object: end = time.time() self.benchmark.add_phase({"name": "rr_2", "time_sec": end - start}) + # RR - 3. + start = time.time() + self.rr_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r2, self.ridge_intercept, self.size, self.num_classes) + end = time.time() + self.benchmark.add_phase({"name": "rr_3", "time_sec": end - start}) + # NB - 2. start = time.time() self.nb_2(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_amax, self.size, self.num_classes) @@ -290,28 +296,17 @@ def execute(self) -> object: # NB - 3. start = time.time() - self.nb_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_amax, self.nb_l, self.size, self.num_classes) + self.nb_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_amax, self.nb_l, self.size, + self.num_classes) end = time.time() self.benchmark.add_phase({"name": "nb_3", "time_sec": end - start}) - # RR - 3. - start = time.time() - self.rr_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r2, self.ridge_intercept, self.size, self.num_classes) - end = time.time() - self.benchmark.add_phase({"name": "rr_3", "time_sec": end - start}) - # NB - 4. start = time.time() self.nb_4(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_l, self.size, self.num_classes) end = time.time() self.benchmark.add_phase({"name": "nb_4", "time_sec": end - start}) - # FIXME: this causes an NPE in java! - # for i in range(5): - # print(self.r1[i][0]) - # for i in range(5): - # print(self.r2[i][0]) - # Ensemble results; # Softmax normalization; @@ -331,7 +326,7 @@ def execute(self) -> object: start = time.time() tmp = self.r[0] end = time.time() - self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) + self.benchmark.add_phase({"name": "argmax", "time_sec": end - start}) self.benchmark.add_to_benchmark("gpu_result", 0) if self.benchmark.debug: From 5d02151491b3eefde63c0efb783becff9e97ea65 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 3 Jun 2020 14:36:57 +0200 Subject: [PATCH 076/236] fixed not setting as finished parent computations using a different stream from their children --- .../WithConstDependencyComputationTest.java | 3 +- .../gpu/stream/GrCUDAStreamManagerTest.java | 44 +++++++- .../test/mock/GrCUDAStreamManagerMock.java | 14 ++- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 2 +- .../gpu/stream/GrCUDAStreamManager.java | 101 +++++++++++++----- .../python/benchmark/bench/bench_6.py | 15 ++- 6 files changed, 141 insertions(+), 38 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java index 10640cd7..156ffb9a 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -380,8 +380,9 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); assertEquals(4, dag.getFrontier().size()); + // Note that syncing F(4) will also sync B(1) although it's on a different stream; new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(4))).schedule(); - assertEquals(2, dag.getFrontier().size()); + assertEquals(1, dag.getFrontier().size()); new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(3))).schedule(); assertEquals(0, dag.getFrontier().size()); diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 14b5f07d..87cd878b 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -159,8 +159,7 @@ public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeExcept // Synchronize computations; new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(3))).schedule(); // The stream has no active computation; - // FIXME: the computation on streams synced with events must also be declared as finished! A new K(2) should not depend on B(2) right now!! - assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(1).getComputation().getStream())); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(1).getComputation().getStream())); assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(3).getComputation().getStream())); } @@ -357,4 +356,45 @@ public void disjointArgumentStreamCross2Test() throws UnsupportedTypeException { assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(4).getComputation().getStream())); assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(5).getComputation().getStream())); } + + @Test + public void syncParentsOfParentsTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(false) + .setRetrieveNewStreamPolicy(this.policy).setRetrieveParentStreamPolicy(RetrieveParentStreamPolicyEnum.DISJOINT).build(); + + // A(1,2) -> B(1) + // \-> C(2,3) -> D(2) + // \-> E(3) + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(2), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(3))).schedule(); + + ExecutionDAG dag = context.getDag(); + + // Check that kernels have been given the right stream; + assertEquals(3, context.getStreamManager().getNumberOfStreams()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(2).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(3).getComputation().getStream().getStreamNumber()); + assertEquals(2, dag.getVertices().get(4).getComputation().getStream().getStreamNumber()); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(0).getComputation().getStream())); + assertEquals(2, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(2).getComputation().getStream())); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(4).getComputation().getStream())); + + // Syncing E(3) will sync also computations on stream 1 and 0; + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(3))).schedule(); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(3).getComputation().getStream())); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(1).getComputation().getStream())); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(4).getComputation().getStream())); + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + assertEquals(1, context.getStreamManager().getNumActiveComputationsOnStream(dag.getVertices().get(3).getComputation().getStream())); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(1).getComputation().getStream())); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(3).getComputation().getStream())); + + } } diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index 8963f6ef..c14f7dce 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -1,5 +1,6 @@ package com.nvidia.grcuda.test.mock; +import com.nvidia.grcuda.CUDAEvent; import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; @@ -54,9 +55,18 @@ public void syncStream(CUDAStream stream) { } @Override protected void syncDevice() { } - // The mocked stream manager doesn't require to use events; @Override - protected void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { } + protected void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { + for (GrCUDAComputationalElement parent : vertex.getParentComputations()) { + CUDAStream stream = parent.getStream(); + // Skip synchronization on the same stream where the new computation is executed, + // as operations scheduled on a stream are executed in order; + if (!vertex.getComputation().getStream().equals(stream)) { + // Track that the current computation has a parent executed on a different stream; + trackAdditionalComputationsToFinish(vertex.getComputation(), parent); + } + } + } public Map> getActiveComputationsMap() { return this.activeComputationsPerStream; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 83c091d2..bb47560e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -367,7 +367,7 @@ public void cudaStreamDestroy(CUDAStream stream) { @TruffleBoundary public void cudaStreamAttachMemAsync(CUDAStream stream, AbstractArray array) { - System.out.println("\t* attach array=" + System.identityHashCode(array) + " to " + stream); +// System.out.println("\t* attach array=" + System.identityHashCode(array) + " to " + stream); final int MEM_ATTACH_SINGLE = 0x04; final int MEM_ATTACH_GLOBAL = 0x01; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 1174fdf4..dca47be3 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -8,6 +8,7 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -31,6 +32,11 @@ public class GrCUDAStreamManager { * Track the active computations each stream has, excluding the default stream; */ protected final Map> activeComputationsPerStream = new HashMap<>(); + /** + * Associate to each computational element its parents that are executed on different streams. + * This is required to set these parent computations as finished when the stream of the child element is synchronized; + */ + protected final Map> additionalComputationsToFinish = new HashMap<>(); private final RetrieveNewStream retrieveNewStream; private final RetrieveParentStream retrieveParentStream; @@ -105,8 +111,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { syncStreamsUsingEvents(vertex); } else { if (this.isAnyComputationActive()) { - List computationsToSync = vertex.getParentComputations(); - Set streamsToSync = getParentStreams(computationsToSync); + Set streamsToSync = getParentStreams(vertex.getParentComputations()); Optional additionalStream = vertex.getComputation().additionalStreamDependency(); if (additionalStream.isPresent()) { CUDAStream stream = additionalStream.get(); @@ -122,12 +127,12 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { // as long as the additional stream isn't the same as the one that we have to sync anyway; System.out.println("--\tsyncing additional stream " + stream + "..."); streamsToSync.add(stream); - syncParentStreamsImpl(streamsToSync, computationsToSync, vertex.getComputation()); + syncParentStreamsImpl(streamsToSync, vertex.getComputation()); } else { - syncParentStreamsImpl(streamsToSync, computationsToSync, vertex.getComputation()); + syncParentStreamsImpl(streamsToSync, vertex.getComputation()); } } else { - syncParentStreamsImpl(streamsToSync, computationsToSync, vertex.getComputation()); + syncParentStreamsImpl(streamsToSync, vertex.getComputation()); } } } @@ -148,40 +153,88 @@ protected Set getParentStreams(Collection streamToSync = getParentStreams(vertex.getParentComputations()); - for (CUDAStream stream : streamToSync) { + Set streamSynchronized = new HashSet<>(); + for (GrCUDAComputationalElement parent : vertex.getParentComputations()) { + CUDAStream stream = parent.getStream(); // Skip synchronization on the same stream where the new computation is executed, // as operations scheduled on a stream are executed in order; if (!vertex.getComputation().getStream().equals(stream)) { - // Create a new synchronization event on the stream; - CUDAEvent event = runtime.cudaEventCreate(); - runtime.cudaEventRecord(event, stream); - runtime.cudaStreamWaitEvent(vertex.getComputation().getStream(), event); - - System.out.println("\t* wait event on stream; stream to sync=" + stream.getStreamNumber() - + "; stream that waits=" + vertex.getComputation().getStream().getStreamNumber() - + "; event=" + event.getEventNumber()); + // Don't process the same stream twice, in any case; + if (!streamSynchronized.contains(stream)) { + // Create a new synchronization event on the stream; + CUDAEvent event = runtime.cudaEventCreate(); + runtime.cudaEventRecord(event, stream); + runtime.cudaStreamWaitEvent(vertex.getComputation().getStream(), event); + + streamSynchronized.add(stream); + System.out.println("\t* wait event on stream; stream to sync=" + stream.getStreamNumber() + + "; stream that waits=" + vertex.getComputation().getStream().getStreamNumber() + + "; event=" + event.getEventNumber()); + } + // Track that the current computation has a parent executed on a different stream; + trackAdditionalComputationsToFinish(vertex.getComputation(), parent); } } } - protected void syncParentStreamsImpl(Set streamsToSync, - List parentComputations, - GrCUDAComputationalElement computationThatSyncs) { + /** + * Associate a parent computation to its child computation, so that we remember to set the parent computation as finished + * once the child stream has been synchronized; + * @param computation a computational element + * @param parent a parent computational element executed on a different stream + */ + protected void trackAdditionalComputationsToFinish(GrCUDAComputationalElement computation, GrCUDAComputationalElement parent) { + if (additionalComputationsToFinish.containsKey(computation)) { + additionalComputationsToFinish.get(computation).add(parent); + } else { + additionalComputationsToFinish.put(computation, new HashSet<>(Collections.singletonList(parent))); + } + // Forward-propagation of dependencies: if the parent already had additional computations to sync, + // a sync on the child computation should sync them too; + if (additionalComputationsToFinish.containsKey(parent)) { + additionalComputationsToFinish.get(computation).addAll(additionalComputationsToFinish.get(parent)); + } + } + + protected void syncParentStreamsImpl( + Set streamsToSync, + GrCUDAComputationalElement computationThatSyncs) { + // Synchronize streams; streamsToSync.forEach(s -> { System.out.println("--\tsync stream=" + s.getStreamNumber() + " by " + computationThatSyncs); syncStream(s); - - // Book-keeping: all computations on the synchronized streams are guaranteed to be finished; - activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished); + }); + // Book-keeping: all computations on the synchronized streams are guaranteed to be finished; + streamsToSync.forEach(s -> { + activeComputationsPerStream.get(s).forEach(c -> { + c.setComputationFinished(); + setParentComputationsFinished(c); + }); // Now the stream is free to be re-used; activeComputationsPerStream.remove(s); retrieveNewStream.update(s); }); - // TODO: when "completing" each computation on a stream, store in a set the stream of their parent; - // then, complete computations on those streams too (but they should not be free, there could be other stuff scheduled on that stream). - // simply remove the computation from the active streams and update their state, but do not use "clear" + } + + private void setParentComputationsFinished(GrCUDAComputationalElement c) { + if (additionalComputationsToFinish.containsKey(c)) { + additionalComputationsToFinish.get(c).forEach(parent -> { + if (!parent.isComputationFinished()) { + parent.setComputationFinished(); + CUDAStream stream = parent.getStream(); + // Stop considering this computation as active on its stream; + activeComputationsPerStream.get(stream).remove(parent); + // If this stream doesn't have any computation associated to it, it's free to use; + if (activeComputationsPerStream.get(stream).isEmpty()) { + activeComputationsPerStream.remove(stream); + retrieveNewStream.update(stream); + } + additionalComputationsToFinish.remove(parent); + } + }); + additionalComputationsToFinish.remove(c); + } } /** diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index d5f2c329..b7e4e56c 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -282,12 +282,6 @@ def execute(self) -> object: end = time.time() self.benchmark.add_phase({"name": "rr_2", "time_sec": end - start}) - # RR - 3. - start = time.time() - self.rr_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r2, self.ridge_intercept, self.size, self.num_classes) - end = time.time() - self.benchmark.add_phase({"name": "rr_3", "time_sec": end - start}) - # NB - 2. start = time.time() self.nb_2(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_amax, self.size, self.num_classes) @@ -296,11 +290,16 @@ def execute(self) -> object: # NB - 3. start = time.time() - self.nb_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_amax, self.nb_l, self.size, - self.num_classes) + self.nb_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_amax, self.nb_l, self.size, self.num_classes) end = time.time() self.benchmark.add_phase({"name": "nb_3", "time_sec": end - start}) + # RR - 3. + start = time.time() + self.rr_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r2, self.ridge_intercept, self.size, self.num_classes) + end = time.time() + self.benchmark.add_phase({"name": "rr_3", "time_sec": end - start}) + # NB - 4. start = time.time() self.nb_4(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_l, self.size, self.num_classes) From ae088e4a72f938c323b9bb320686275aa8297bef Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 3 Jun 2020 15:41:24 +0200 Subject: [PATCH 077/236] fixed fifo stream retrieval adding free streams more than once --- .../gpu/stream/GrCUDAStreamManagerTest.java | 23 ++++++++++++++++++- .../gpu/stream/GrCUDAStreamManager.java | 17 +++++++++++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 87cd878b..0901b805 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -26,6 +26,7 @@ public class GrCUDAStreamManagerTest { /** * Tests are executed for each of the {@link RetrieveNewStreamPolicyEnum} values; + * * @return the current stream policy */ @Parameterized.Parameters @@ -243,7 +244,7 @@ public void generateManyStreamsTest() throws UnsupportedTypeException { // Create 2 parallel branches on dependent computations, and check that the total amount of streams created is what is expected; int numLoops = 10; - for (int i = 0; i < numLoops * 2; i+=2) { + for (int i = 0; i < numLoops * 2; i += 2) { new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(i))).schedule(); new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(i + 1))).schedule(); // Sync point; @@ -395,6 +396,26 @@ public void syncParentsOfParentsTest() throws UnsupportedTypeException { new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); assertFalse(((GrCUDAStreamManagerMock) context.getStreamManager()).getActiveComputationsMap().containsKey(dag.getVertices().get(3).getComputation().getStream())); + } + + @Test + public void repeatedSyncTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(false) + .setRetrieveNewStreamPolicy(this.policy).build(); + int numTest = 10; + ExecutionDAG dag = context.getDag(); + + for (int i = 0; i < numTest; i++) { + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new KernelExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1), new ArgumentMock(2))).schedule(); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(2))).schedule(); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + assertEquals(1, dag.getVertices().get(1).getComputation().getStream().getStreamNumber()); + assertEquals(0, dag.getVertices().get(0).getComputation().getStream().getStreamNumber()); + } } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index dca47be3..610eba57 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -325,15 +325,24 @@ private class FifoRetrieveStream extends RetrieveNewStream { * Keep a queue of free streams; */ private final Queue freeStreams = new ArrayDeque<>(); + /** + * Ensure that streams in the queue are always unique; + */ + private final Set uniqueFreeStreams = new HashSet<>(); @Override void update(CUDAStream stream) { - freeStreams.add(stream); + if (!uniqueFreeStreams.contains(stream)) { + freeStreams.add(stream); + uniqueFreeStreams.add(stream); + } } @Override void update(Collection streams) { - freeStreams.addAll(streams); + Set newStreams = streams.stream().filter(s -> !freeStreams.contains(s)).collect(Collectors.toSet()); + freeStreams.addAll(newStreams); + uniqueFreeStreams.addAll(newStreams); } @Override @@ -343,7 +352,9 @@ CUDAStream retrieve() { return createStream(); } else { // Get the first stream available, and remove it from the list of free streams; - return freeStreams.poll(); + CUDAStream stream = freeStreams.poll(); + uniqueFreeStreams.remove(stream); + return stream; } } } From d22d75d17fd1edb656040a50a5a9655899c33df9 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 3 Jun 2020 21:03:26 +0200 Subject: [PATCH 078/236] adding hits benchmark --- .../python/benchmark/bench/bench_7.py | 196 ++++++++++++++++++ .../python/benchmark/benchmark_main.py | 4 + 2 files changed, 200 insertions(+) create mode 100644 projects/resources/python/benchmark/bench/bench_7.py diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py new file mode 100644 index 00000000..f4906a7f --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -0,0 +1,196 @@ +# coding=utf-8 +import polyglot +import time +import numpy as np +from random import random, randint, seed, sample + +from benchmark import Benchmark, time_phase +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_THREADS_PER_BLOCK = 32 + + + +############################## +############################## + + +class Benchmark7(Benchmark): + """ + Compute the HITS algorithm on a graph. The algorithm is composed of repeated sparse matrix-vector multiplications + computed on a matrix and its transpose (outgoing and ingoing edges of a graph). The 2 matrix multiplications, + for each iteration, can be computed in parallel; + """ + + def __init__(self, benchmark: BenchmarkResult): + super().__init__("b7", benchmark) + self.size = 0 + self.max_degree = 10 # Each vertex has 10 edges; + self.num_iterations = 10 + self.ptr = None + self.idx = None + self.val = None + self.ptr2 = None + self.idx2 = None + self.val2 = None + self.auth1 = None + self.auth2 = None + self.hub1 = None + self.hub2 = None + self.auth_norm = None + self.hub_norm = None + + self.ptr_cpu = None + self.idx_cpu = None + self.val_cpu = None + self.ptr2_cpu = None + self.idx2_cpu = None + self.val2_cpu = None + + self.cpu_result = None + + self.num_blocks_size = 0 + + @time_phase("allocation") + def alloc(self, size: int): + self.size = size + self.num_blocks_size = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + # Allocate vectors; + self.ptr = polyglot.eval(language="grcuda", string=f"int[{size + 1}]") + self.ptr2 = polyglot.eval(language="grcuda", string=f"int[{size + 1}]") + self.idx = polyglot.eval(language="grcuda", string=f"int[{self.max_degree * size}]") + self.idx2 = polyglot.eval(language="grcuda", string=f"int[{self.max_degree * size}]") + self.val = polyglot.eval(language="grcuda", string=f"int[{self.max_degree * size}]") + self.val2 = polyglot.eval(language="grcuda", string=f"int[{self.max_degree * size}]") + + self.auth1 = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.auth2 = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.hub1 = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.hub2 = polyglot.eval(language="grcuda", string=f"float[{size}]") + + self.auth_norm = polyglot.eval(language="grcuda", string=f"float[1]") + self.hub_norm = polyglot.eval(language="grcuda", string=f"float[1]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + # self.nb_1 = build_kernel(NB_KERNEL, "nb_1", "const pointer, const pointer, pointer, sint32, sint32, sint32") + # self.nb_2 = build_kernel(NB_KERNEL, "nb_2", "const pointer, pointer, sint32, sint32") + # self.nb_3 = build_kernel(NB_KERNEL, "nb_3", "const pointer, const pointer, pointer, sint32, sint32") + # self.nb_4 = build_kernel(NB_KERNEL, "nb_4", "pointer, const pointer, sint32, sint32") + # + # self.rr_1 = build_kernel(RR_KERNEL, "rr_1", "const pointer, pointer, sint32, sint32") + # self.rr_2 = build_kernel(RR_KERNEL, "rr_2", "const pointer, const pointer, pointer, sint32, sint32, sint32") + # self.rr_3 = build_kernel(RR_KERNEL, "rr_3", "pointer, const pointer, sint32, sint32") + # + # self.softmax = build_kernel(ENSEMBLE_KERNEL, "softmax", "pointer, sint32, sint32") + # self.argmax = build_kernel(ENSEMBLE_KERNEL, "argmax", "const pointer, const pointer, pointer, sint32, sint32") + + @time_phase("initialization") + def init(self): + + def create_csr_from_coo(x_in, y_in, val_in): + ptr_out = np.zeros(max(np.max(x_in), np.max(y_in)) + 2, dtype=int) + for x_curr in x_in: + ptr_out[x_curr + 1] += 1 + ptr_out = np.cumsum(ptr_out) + return ptr_out, y_in, val_in + + self.random_seed = randint(0, 10000000) + seed(self.random_seed) + + # Create a random COO graph; + x = [] + y = [] + val = [] + for i in range(self.size): + # Create 10 random edges; + edges = sorted(sample(range(self.size), self.max_degree)) + for j in edges: + x += [i] + y += [j] + val += [1] + + # Turn the COO into CSR and CSC representations; + self.ptr_cpu, self.idx_cpu, self.val_cpu = create_csr_from_coo(x, y, val) + x2, y2 = zip(*sorted(zip(y, x))) + self.ptr2_cpu, self.idx2_cpu, self.val2_cpu = create_csr_from_coo(x2, y2, val) + for i in range(len(self.ptr_cpu)): + self.ptr[i] = int(self.ptr_cpu[i]) + self.ptr2[i] = int(self.ptr2_cpu[i]) + for i in range(len(self.idx_cpu)): + self.idx[i] = int(self.idx_cpu[i]) + self.idx2[i] = int(self.idx2_cpu[i]) + self.val[i] = int(self.val_cpu[i]) + self.val2[i] = int(self.val2_cpu[i]) + + @time_phase("reset_result") + def reset_result(self) -> None: + for i in range(self.size): + self.auth1[i] = 0.0 + self.auth2[i] = 0.0 + self.hub1[i] = 0.0 + self.hub2[i] = 0.0 + self.auth_norm[0] = 0.0 + self.hub_norm[0] = 0.0 + + def execute(self) -> object: + return np.zeros(self.size) + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + + def spmv(ptr, idx, val, vec): + res = np.zeros(len(ptr) - 1) + for i in range(len(ptr) - 1): + curr_sum = 0 + start = int(ptr[i]) + end = int(ptr[i + 1]) + for j in range(start, end): + curr_sum += val[j] * vec[idx[j]] + res[i] = curr_sum + return res + + # Recompute the CPU result only if necessary; + start = time.time() + if self.current_iter == 0 or reinit: + # Re-initialize the random number generator with the same seed as the GPU to generate the same values; + seed(self.random_seed) + # Initialize the support device arrays; + N = self.size + + auth1 = np.ones(N) + auth2 = np.ones(N) + hub1 = np.ones(N) + hub2 = np.ones(N) + + # Main iteration; + for i in range(self.num_iterations): + # Authority; + auth2 = spmv(self.ptr2_cpu, self.idx2_cpu, self.val2_cpu, hub1) + auth2 = auth2 / np.sum(auth2) + # Hubs + hub2 = spmv(self.ptr_cpu, self.idx_cpu, self.val_cpu, auth1) + hub2 = hub2 / np.sum(hub2) + + auth1 = auth2 + hub1 = hub2 + self.cpu_result = hub1 + auth1 + + cpu_time = time.time() - start + + # Compare GPU and CPU results; + difference = 0 + for i in range(self.size): + difference += np.abs(self.cpu_result[i] - gpu_result[i]) + + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", str(difference)) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tcpu result: [" + ", ".join([f"{x:.4f}" for x in self.cpu_result[:10]]) + + "...]; " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") + + diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index d47f84ca..18775932 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -7,6 +7,7 @@ from bench.bench_4 import Benchmark4 from bench.bench_5 import Benchmark5 from bench.bench_6 import Benchmark6 +from bench.bench_7 import Benchmark7 from benchmark_result import BenchmarkResult ############################## @@ -20,6 +21,7 @@ "b4": Benchmark4, "b5": Benchmark5, "b6": Benchmark6, + "b7": Benchmark7, } num_elem = { @@ -29,6 +31,7 @@ "b4": [100], "b5": [100], "b6": [100], + "b7": [100], } policies = { @@ -38,6 +41,7 @@ "b4": ["default"], "b5": ["default"], "b6": ["default"], + "b7": ["default"], } ############################## From bcbbcee6596b0a26daae72e67280b81e65986e4b Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 8 Jun 2020 09:38:11 +0200 Subject: [PATCH 079/236] added image pipeline benchmark --- .../grcuda/array/MultiDimDeviceArrayView.java | 3 + .../gpu/stream/GrCUDAStreamManager.java | 12 +- .../python/benchmark/bench/bench_1.py | 74 +-- .../python/benchmark/bench/bench_6.py | 2 +- .../python/benchmark/bench/bench_7.py | 139 ++++- .../python/benchmark/bench/bench_8.py | 489 ++++++++++++++++++ .../python/benchmark/benchmark_main.py | 4 + .../python/benchmark/benchmark_result.py | 2 +- projects/resources/python/other/images.py | 168 ++++++ 9 files changed, 834 insertions(+), 59 deletions(-) create mode 100644 projects/resources/python/benchmark/bench/bench_8.py create mode 100755 projects/resources/python/other/images.py diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java index 61f5ea28..09377390 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java @@ -89,6 +89,9 @@ public void setLastComputationArrayAccess(boolean lastComputationArrayAccess) { this.mdDeviceArray.setLastComputationArrayAccess(lastComputationArrayAccess); } + @Override + public boolean isLastComputationArrayAccess() { return this.mdDeviceArray.isLastComputationArrayAccess(); } + /** * Propagate the stream mapping to the parent array, so other temporary views are aware of this mapping; * @param streamMapping the stream to which this array is associated diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 610eba57..b788d078 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -207,10 +207,14 @@ protected void syncParentStreamsImpl( }); // Book-keeping: all computations on the synchronized streams are guaranteed to be finished; streamsToSync.forEach(s -> { - activeComputationsPerStream.get(s).forEach(c -> { - c.setComputationFinished(); - setParentComputationsFinished(c); - }); + try { + activeComputationsPerStream.get(s).forEach(c -> { + c.setComputationFinished(); + setParentComputationsFinished(c); + }); + } catch (NullPointerException e) { + System.out.println("missing stream " + s.getStreamNumber() + " for sync"); + } // Now the stream is free to be re-used; activeComputationsPerStream.remove(s); retrieveNewStream.update(s); diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index 3734b80d..54bb7298 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -13,16 +13,16 @@ NUM_THREADS_PER_BLOCK = 128 SQUARE_KERNEL = """ - extern "C" __global__ void square(float* x, int n) { + extern "C" __global__ void square(const float* x, float* y, int n) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if (idx < n) { - x[idx] = x[idx] * x[idx]; + y[idx] = x[idx] * x[idx]; } } """ DIFF_KERNEL = """ - extern "C" __global__ void diff(float* x, float* y, float* z, int n) { + extern "C" __global__ void diff(const float* x, const float* y, float* z, int n) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if (idx < n) { z[idx] = x[idx] - y[idx]; @@ -31,28 +31,27 @@ """ REDUCE_KERNEL = """ - extern "C" __global__ void reduce(float *x, float *res, int n) { - __shared__ float cache[%d]; - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n) { - cache[threadIdx.x] = x[i]; - } - __syncthreads(); - - // Perform tree reduction; - i = %d / 2; - while (i > 0) { - if (threadIdx.x < i) { - cache[threadIdx.x] += cache[threadIdx.x + i]; - } - __syncthreads(); - i /= 2; - } - if (threadIdx.x == 0) { - atomicAdd(res, cache[0]); - } + +// From https://devblogs.nvidia.com/faster-parallel-reductions-kepler/ + +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +__global__ void reduce(const float *in, float* out, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += in[i]; } - """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(out, sum); // The first thread in the warp updates the output; +} +""" ############################## ############################## @@ -72,6 +71,8 @@ def __init__(self, benchmark: BenchmarkResult): self.size = 0 self.x = None self.y = None + self.x1 = None + self.y1 = None self.z = None self.res = None self.num_blocks = 0 @@ -88,6 +89,8 @@ def alloc(self, size: int): # Allocate 2 vectors; self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") self.y = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.x1 = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.y1 = polyglot.eval(language="grcuda", string=f"float[{size}]") # Allocate a support vector; self.z = polyglot.eval(language="grcuda", string=f"float[{size}]") @@ -95,9 +98,9 @@ def alloc(self, size: int): # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") - self.square_kernel = build_kernel(SQUARE_KERNEL, "square", "pointer, sint32") - self.diff_kernel = build_kernel(DIFF_KERNEL, "diff", "pointer, pointer, pointer, sint32") - self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, sint32") + self.square_kernel = build_kernel(SQUARE_KERNEL, "square", "const pointer, pointer, sint32") + self.diff_kernel = build_kernel(DIFF_KERNEL, "diff", "const pointer, const pointer, pointer, sint32") + self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "const pointer, pointer, sint32") @time_phase("initialization") def init(self): @@ -111,20 +114,22 @@ def init(self): self.x[i] = 1 / (i + 1) self.y[i] = 2 / (i + 1) + @time_phase("reset_result") + def reset_result(self) -> None: + self.res[0] = 0.0 + def execute(self) -> object: - # This must be reset at every execution; - self.res[0] = 0 # Call the kernel. The 2 computations are independent, and can be done in parallel; start = time.time() - self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.size) - self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.size) + self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.x1, self.size) + self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.y1, self.size) end = time.time() self.benchmark.add_phase({"name": "square", "time_sec": end - start}) # C. Compute the difference of the 2 vectors. This must be done after the 2 previous computations; start = time.time() - self.diff_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.y, self.z, self.size) + self.diff_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x1, self.y1, self.z, self.size) end = time.time() self.benchmark.add_phase({"name": "diff", "time_sec": end - start}) @@ -134,7 +139,12 @@ def execute(self) -> object: end = time.time() self.benchmark.add_phase({"name": "reduce", "time_sec": end - start}) + # Add a final sync step to measure the real computation time; + start = time.time() result = self.res[0] + end = time.time() + self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) + self.benchmark.add_to_benchmark("gpu_result", result) if self.benchmark.debug: BenchmarkResult.log_message(f"\tgpu result: {result:.4f}") diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index b7e4e56c..940454dc 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -325,7 +325,7 @@ def execute(self) -> object: start = time.time() tmp = self.r[0] end = time.time() - self.benchmark.add_phase({"name": "argmax", "time_sec": end - start}) + self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) self.benchmark.add_to_benchmark("gpu_result", 0) if self.benchmark.debug: diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index f4906a7f..337cd282 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -12,7 +12,52 @@ NUM_THREADS_PER_BLOCK = 32 +SPMV_KERNEL = """ + extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { + + int n = blockIdx.x * blockDim.x + threadIdx.x; + if (n < num_rows) { + float sum = 0; + for (int i = ptr[n]; i < ptr[n + 1]; i++) { + sum += val[i] * vec[idx[i]]; + } + res[n] = sum; + } + } + """ +SUM_KERNEL = """ + extern "C" __global__ void sum(const float *x, float *res, int n) { + __shared__ float cache[%d]; + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + cache[threadIdx.x] = x[i]; + } + __syncthreads(); + + // Perform tree reduction; + i = %d / 2; + while (i > 0) { + if (threadIdx.x < i) { + cache[threadIdx.x] += cache[threadIdx.x + i]; + } + __syncthreads(); + i /= 2; + } + if (threadIdx.x == 0) { + atomicAdd(res, cache[0]); + } + } + """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + +DIVIDE_KERNEL = """ + extern "C" __global__ void divide(const float* x, float *y, const float *val, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx < n) { + y[idx] = x[idx] / val[0]; + } + } + """ ############################## ############################## @@ -28,7 +73,8 @@ class Benchmark7(Benchmark): def __init__(self, benchmark: BenchmarkResult): super().__init__("b7", benchmark) self.size = 0 - self.max_degree = 10 # Each vertex has 10 edges; + self.num_nnz = 0 + self.max_degree = 100 # Each vertex has 10 edges; self.num_iterations = 10 self.ptr = None self.idx = None @@ -51,21 +97,29 @@ def __init__(self, benchmark: BenchmarkResult): self.val2_cpu = None self.cpu_result = None + self.gpu_result = None self.num_blocks_size = 0 + self.spmv_kernel = None + self.sum_kernel = None + self.divide_kernel = None + @time_phase("allocation") def alloc(self, size: int): self.size = size + self.num_nnz = size * self.max_degree self.num_blocks_size = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + self.gpu_result = np.zeros(self.size) + # Allocate vectors; self.ptr = polyglot.eval(language="grcuda", string=f"int[{size + 1}]") self.ptr2 = polyglot.eval(language="grcuda", string=f"int[{size + 1}]") - self.idx = polyglot.eval(language="grcuda", string=f"int[{self.max_degree * size}]") - self.idx2 = polyglot.eval(language="grcuda", string=f"int[{self.max_degree * size}]") - self.val = polyglot.eval(language="grcuda", string=f"int[{self.max_degree * size}]") - self.val2 = polyglot.eval(language="grcuda", string=f"int[{self.max_degree * size}]") + self.idx = polyglot.eval(language="grcuda", string=f"int[{self.num_nnz}]") + self.idx2 = polyglot.eval(language="grcuda", string=f"int[{self.num_nnz}]") + self.val = polyglot.eval(language="grcuda", string=f"int[{self.num_nnz}]") + self.val2 = polyglot.eval(language="grcuda", string=f"int[{self.num_nnz}]") self.auth1 = polyglot.eval(language="grcuda", string=f"float[{size}]") self.auth2 = polyglot.eval(language="grcuda", string=f"float[{size}]") @@ -77,17 +131,9 @@ def alloc(self, size: int): # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") - # self.nb_1 = build_kernel(NB_KERNEL, "nb_1", "const pointer, const pointer, pointer, sint32, sint32, sint32") - # self.nb_2 = build_kernel(NB_KERNEL, "nb_2", "const pointer, pointer, sint32, sint32") - # self.nb_3 = build_kernel(NB_KERNEL, "nb_3", "const pointer, const pointer, pointer, sint32, sint32") - # self.nb_4 = build_kernel(NB_KERNEL, "nb_4", "pointer, const pointer, sint32, sint32") - # - # self.rr_1 = build_kernel(RR_KERNEL, "rr_1", "const pointer, pointer, sint32, sint32") - # self.rr_2 = build_kernel(RR_KERNEL, "rr_2", "const pointer, const pointer, pointer, sint32, sint32, sint32") - # self.rr_3 = build_kernel(RR_KERNEL, "rr_3", "pointer, const pointer, sint32, sint32") - # - # self.softmax = build_kernel(ENSEMBLE_KERNEL, "softmax", "pointer, sint32, sint32") - # self.argmax = build_kernel(ENSEMBLE_KERNEL, "argmax", "const pointer, const pointer, pointer, sint32, sint32") + self.spmv_kernel = build_kernel(SPMV_KERNEL, "spmv", "const pointer, const pointer, const pointer, const pointer, pointer, sint32, sint32") + self.sum_kernel = build_kernel(SUM_KERNEL, "sum", "const pointer, pointer, sint32") + self.divide_kernel = build_kernel(DIVIDE_KERNEL, "divide", "const pointer, pointer, const pointer, sint32") @time_phase("initialization") def init(self): @@ -130,15 +176,66 @@ def create_csr_from_coo(x_in, y_in, val_in): @time_phase("reset_result") def reset_result(self) -> None: for i in range(self.size): - self.auth1[i] = 0.0 - self.auth2[i] = 0.0 - self.hub1[i] = 0.0 - self.hub2[i] = 0.0 + self.auth1[i] = 1.0 + self.auth2[i] = 1.0 + self.hub1[i] = 1.0 + self.hub2[i] = 1.0 self.auth_norm[0] = 0.0 self.hub_norm[0] = 0.0 def execute(self) -> object: - return np.zeros(self.size) + + for i in range(self.num_iterations): + # Authorities; + start = time.time() + self.spmv_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.ptr2, self.idx2, self.val2, self.hub1, self.auth2, self.size, self.num_nnz) + end = time.time() + self.benchmark.add_phase({"name": f"spmv_a_{i}", "time_sec": end - start}) + + # Hubs; + start = time.time() + self.spmv_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.ptr, self.idx, self.val, self.auth1, self.hub2, self.size, self.num_nnz) + end = time.time() + self.benchmark.add_phase({"name": f"spmv_h_{i}", "time_sec": end - start}) + + # Normalize authorities; + start = time.time() + self.sum_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.auth2, self.auth_norm, self.size) + end = time.time() + self.benchmark.add_phase({"name": f"sum_a_{i}", "time_sec": end - start}) + + # Normalize hubs; + start = time.time() + self.sum_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.hub2, self.hub_norm, self.size) + end = time.time() + self.benchmark.add_phase({"name": f"sum_h_{i}", "time_sec": end - start}) + + start = time.time() + self.divide_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.auth2, self.auth1, self.auth_norm, self.size) + end = time.time() + self.benchmark.add_phase({"name": f"divide_a_{i}", "time_sec": end - start}) + + start = time.time() + self.divide_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.hub2, self.hub1, self.hub_norm, self.size) + end = time.time() + self.benchmark.add_phase({"name": f"divide_h_{i}", "time_sec": end - start}) + + # Add a final sync step to measure the real computation time; + start = time.time() + tmp1 = self.auth1[0] + tmp2 = self.hub1[0] + end = time.time() + self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) + + # Compute GPU result; + for i in range(self.size): + self.gpu_result[i] = self.auth1[i] + self.hub1[i] + + self.benchmark.add_to_benchmark("gpu_result", 0) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tgpu result: [" + ", ".join([f"{x:.4f}" for x in self.gpu_result[:10]]) + "...]") + + return self.gpu_result def cpu_validation(self, gpu_result: object, reinit: bool) -> None: diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py new file mode 100644 index 00000000..1a0b9059 --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -0,0 +1,489 @@ +# coding=utf-8 +import polyglot +import time +import numpy as np +from random import random, randint, seed, sample + +from benchmark import Benchmark, time_phase +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_THREADS_PER_BLOCK = 32 + +GAUSSIAN_BLUR = """ +extern "C" __global__ void gaussian_blur(const float *image, float *result, int rows, int cols, const float* kernel, int diameter) { + int i = blockDim.x * blockIdx.x + threadIdx.x; + int j = blockDim.y * blockIdx.y + threadIdx.y; + if (i < rows && j < cols) { + float sum = 0; + int radius = diameter / 2; + for (int x = -radius; x <= radius; ++x) { + for (int y = -radius; y <= radius; ++y) { + int nx = x + i; + int ny = y + j; + if (nx >= 0 && ny >= 0 && nx < rows && ny < cols) { + sum += kernel[(x + radius) * diameter + (y + radius)] * image[nx * cols + ny]; + } + } + } + result[i * cols + j] = sum; + } +} +""" + + +SOBEL = """ +extern "C" __global__ void sobel(const float *image, float *result, int rows, int cols) { + float SOBEL_X[3][3] = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}}; + float SOBEL_Y[3][3] = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}}; + + int i = blockDim.x * blockIdx.x + threadIdx.x; + int j = blockDim.y * blockIdx.y + threadIdx.y; + if (i < rows && j < cols) { + float sum_gradient_x = 0.0, sum_gradient_y = 0.0; + int radius = 1; + for (int x = -radius; x <= radius; ++x) { + for (int y = -radius; y <= radius; ++y) { + int nx = x + i; + int ny = y + j; + if (nx >= 0 && ny >= 0 && nx < rows && ny < cols) { + float neighbour = image[nx * cols + ny]; + sum_gradient_x += SOBEL_X[x+ radius][y + radius] * neighbour; + sum_gradient_y += SOBEL_Y[x+ radius][y + radius] * neighbour; + } + } + } + result[i * cols + j] = sqrt(sum_gradient_x * sum_gradient_x + sum_gradient_y * sum_gradient_y); + } +} +""" + +EXTEND_MASK = """ +__device__ float atomicMaxf(float* address, float val) +{ + int *address_as_int =(int*)address; + int old = *address_as_int, assumed; + while (val > __int_as_float(old)) { + assumed = old; + old = atomicCAS(address_as_int, assumed, + __float_as_int(val)); + } + return __int_as_float(old); +} + +__device__ float atomicMinf(float* address, float val) +{ + int *address_as_int =(int*)address; + int old = *address_as_int, assumed; + while (val < __int_as_float(old)) { + assumed = old; + old = atomicCAS(address_as_int, assumed, + __float_as_int(val)); + } + return __int_as_float(old); +} + +extern "C" __global__ void maximum(const float *x, float *res, int n) { + extern __shared__ float shared[%d]; + + int tid = threadIdx.x; + int gid = (blockDim.x * blockIdx.x) + tid; + shared[tid] = -1000; // Some small value; + + while (gid < n) { + shared[tid] = max(shared[tid], x[gid]); + gid += gridDim.x*blockDim.x; + } + __syncthreads(); + gid = (blockDim.x * blockIdx.x) + tid; // 1 + for (unsigned int s=blockDim.x/2; s>0; s>>=1) + { + if (tid < s && gid < n) + shared[tid] = max(shared[tid], shared[tid + s]); + __syncthreads(); + } + + if (tid == 0) + atomicMaxf(res, shared[0]); +} + +extern "C" __global__ void minimum(const float *x, float *res, int n) { + extern __shared__ float shared[%d]; + + int tid = threadIdx.x; + int gid = (blockDim.x * blockIdx.x) + tid; + shared[tid] = 1000; // Some big value; + + while (gid < n) { + shared[tid] = min(shared[tid], x[gid]); + gid += gridDim.x*blockDim.x; + } + __syncthreads(); + gid = (blockDim.x * blockIdx.x) + tid; // 1 + for (unsigned int s=blockDim.x/2; s>0; s>>=1) + { + if (tid < s && gid < n) + shared[tid] = min(shared[tid], shared[tid + s]); + __syncthreads(); + } + + if (tid == 0) + atomicMinf(res, shared[0]); +} + +extern "C" __global__ void extend(float *x, const float *minimum, const float *maximum, int n) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + float res_tmp = 5 * (x[i] - *minimum) / (*maximum - *minimum); + x[i] = res_tmp > 1 ? 1 : res_tmp; + } +} +""" % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + +UNSHARPEN = """ +extern "C" __global__ void unsharpen(const float *x, const float *y, float *res, float amount, int n) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + float res_tmp = x[i] * (1 + amount) - y[i] * amount; + res_tmp = res_tmp > 1 ? 1 : res_tmp; + res[i] = res_tmp < 0 ? 0 : res_tmp; + } +} +""" + +COMBINE = """ +extern "C" __global__ void combine(const float *x, const float *y, const float *mask, float *res, int n) { + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + res[i] = x[i] * mask[i] + y[i] * (1 - mask[i]); + } +} +""" + + +############################## +############################## + + +class Benchmark8(Benchmark): + """ + Compute an image processing pipeline in which we sharpen an image and combine it + with copies that have been blurred at low and medium frequencies. The result is an image sharper on the edges, + and softer everywhere else: this filter is common, for example, in portrait retouching, where a photographer desires + to enhance the clarity of facial features while smoothing the subject' skin and the background; + + BLUR(image,blur1) ─> SOBEL(blur1,mask1) ───────────────────────────────────────────────────────────────────────────────┐ + BLUR(image,blur2) ─> SOBEL(blur2,mask2) ┬─> MAX(mask2) ──┬─> EXTEND(mask2) ──┐ │ + └─> MIN(mask2) ──┘ │ │ + SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ────────────────────┴─> COMBINE(sharpened,blur2,mask2,image2) ┴─> COMBINE(image2,blur1,mask1,image3) + """ + + def __init__(self, benchmark: BenchmarkResult): + super().__init__("b8", benchmark) + self.size = 0 + + self.image = None + self.image2 = None + self.image3 = None + + self.blurred_small = None + self.mask_small = None + self.kernel_small = None + self.kernel_small_diameter = 3 + self.kernel_small_variance = 1 + + self.blurred_large = None + self.mask_large = None + self.kernel_large = None + self.kernel_large_diameter = 5 + self.kernel_large_variance = 10 + self.maximum = None + self.minimum = None + + self.blurred_unsharpen = None + self.image_unsharpen = None + self.kernel_unsharpen = None + self.kernel_unsharpen_diameter = 3 + self.kernel_unsharpen_variance = 5 + self.unsharpen_amount = 0.5 + + self.image_cpu = None + self.kernel_small_cpu = None + self.kernel_large_cpu = None + self.kernel_unsharpen_cpu = None + + self.cpu_result = None + self.gpu_result = None + + self.num_blocks_size = 0 + + self.gaussian_blur_kernel = None + self.sobel_kernel = None + self.extend_kernel = None + self.unsharpen_kernel = None + self.combine_mask_kernel = None + self.maximum_kernel = None + self.minimum_kernel = None + + @time_phase("allocation") + def alloc(self, size: int): + self.size = size + self.num_blocks_size = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + + self.gpu_result = np.zeros(self.size) + + # Allocate vectors; + self.image = polyglot.eval(language="grcuda", string=f"float[{size}][{size}]") + self.image2 = polyglot.eval(language="grcuda", string=f"float[{size}][{size}]") + self.image3 = polyglot.eval(language="grcuda", string=f"float[{size}][{size}]") + + self.kernel_small = polyglot.eval(language="grcuda", string=f"float[{self.kernel_small_diameter}][{self.kernel_small_diameter}]") + self.kernel_large = polyglot.eval(language="grcuda", string=f"float[{self.kernel_large_diameter}][{self.kernel_large_diameter}]") + self.kernel_unsharpen = polyglot.eval(language="grcuda", string=f"float[{self.kernel_unsharpen_diameter}][{self.kernel_unsharpen_diameter}]") + self.maximum = polyglot.eval(language="grcuda", string=f"float[1]") + self.minimum = polyglot.eval(language="grcuda", string=f"float[1]") + + self.mask_small = polyglot.eval(language="grcuda", string=f"float[{size}][{size}]") + self.mask_large = polyglot.eval(language="grcuda", string=f"float[{size}][{size}]") + self.image_unsharpen = polyglot.eval(language="grcuda", string=f"float[{size}][{size}]") + + self.blurred_small = polyglot.eval(language="grcuda", string=f"float[{size}][{size}]") + self.blurred_large = polyglot.eval(language="grcuda", string=f"float[{size}][{size}]") + self.blurred_unsharpen = polyglot.eval(language="grcuda", string=f"float[{size}][{size}]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + self.gaussian_blur_kernel = build_kernel(GAUSSIAN_BLUR, "gaussian_blur", "const pointer, pointer, sint32, sint32, const pointer, sint32") + self.sobel_kernel = build_kernel(SOBEL, "sobel", "const pointer, pointer, sint32, sint32") + self.extend_kernel = build_kernel(EXTEND_MASK, "extend", "pointer, const pointer, const pointer, sint32") + self.maximum_kernel = build_kernel(EXTEND_MASK, "maximum", "const pointer, pointer, sint32") + self.minimum_kernel = build_kernel(EXTEND_MASK, "minimum", "const pointer, pointer, sint32") + self.unsharpen_kernel = build_kernel(UNSHARPEN, "unsharpen", "const pointer, const pointer, pointer, float, sint32") + self.combine_mask_kernel = build_kernel(COMBINE, "combine", "const pointer, const pointer, const pointer, pointer, sint32") + + @time_phase("initialization") + def init(self): + + def gaussian_kernel(diameter, sigma): + kernel = np.zeros((diameter, diameter)) + mean = diameter / 2 + sum_tmp = 0 + for x in range(diameter): + for y in range(diameter): + kernel[x, y] = np.exp(-0.5 * ((x - mean) ** 2 + (y - mean) ** 2) / sigma ** 2) + sum_tmp += kernel[x, y] + for x in range(diameter): + for y in range(diameter): + kernel[x, y] /= sum_tmp + return kernel + + self.random_seed = randint(0, 10000000) + seed(self.random_seed) + + # Create a random image; + self.image_cpu = np.zeros((self.size, self.size)) # Create here the image used for validation; + for i in range(self.size): + for j in range(self.size): + self.image_cpu[i, j] = random() + self.image[i][j] = float(self.image_cpu[i, j]) + + self.kernel_small_cpu = gaussian_kernel(self.kernel_small_diameter, self.kernel_small_variance) + self.kernel_large_cpu = gaussian_kernel(self.kernel_large_diameter, self.kernel_large_variance) + self.kernel_unsharpen_cpu = gaussian_kernel(self.kernel_unsharpen_diameter, self.kernel_unsharpen_variance) + for i in range(self.kernel_small_diameter): + for j in range(self.kernel_small_diameter): + self.kernel_small[i][j] = float(self.kernel_small_cpu[i, j]) + for i in range(self.kernel_large_diameter): + for j in range(self.kernel_large_diameter): + self.kernel_large[i][j] = float(self.kernel_large_cpu[i, j]) + for i in range(self.kernel_unsharpen_diameter): + for j in range(self.kernel_unsharpen_diameter): + self.kernel_unsharpen[i][j] = float(self.kernel_unsharpen_cpu[i, j]) + + @time_phase("reset_result") + def reset_result(self) -> None: + self.gpu_result = np.zeros((self.size, self.size)) + self.maximum[0] = 0.0 + self.minimum[0] = 0.0 + + def execute(self) -> object: + + # Blur - Small; + start = time.time() + self.gaussian_blur_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ + (self.image, self.blurred_small, self.size, self.size, self.kernel_small, self.kernel_small_diameter) + end = time.time() + self.benchmark.add_phase({"name": "blur_small", "time_sec": end - start}) + + # Blur - Large; + start = time.time() + self.gaussian_blur_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ + (self.image, self.blurred_large, self.size, self.size, self.kernel_large, self.kernel_large_diameter) + end = time.time() + self.benchmark.add_phase({"name": "blur_large", "time_sec": end - start}) + + # Blur - Unsharpen; + start = time.time() + self.gaussian_blur_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ + (self.image, self.blurred_unsharpen, self.size, self.size, self.kernel_unsharpen, self.kernel_unsharpen_diameter) + end = time.time() + self.benchmark.add_phase({"name": "blur_unsharpen", "time_sec": end - start}) + + # Sobel filter (edge detection); + start = time.time() + self.sobel_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ + (self.blurred_small, self.mask_small, self.size, self.size) + end = time.time() + self.benchmark.add_phase({"name": "sobel_small", "time_sec": end - start}) + + start = time.time() + self.sobel_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ + (self.blurred_large, self.mask_large, self.size, self.size) + end = time.time() + self.benchmark.add_phase({"name": "sobel_small", "time_sec": end - start}) + + # Extend large edge detection mask; + start = time.time() + num_blocks_tmp = (self.size * self.size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + self.maximum_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)(self.mask_large, self.maximum, self.size**2) + self.minimum_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)(self.mask_large, self.minimum, self.size**2) + self.extend_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)(self.mask_large, self.minimum, self.maximum, self.size**2) + end = time.time() + self.benchmark.add_phase({"name": "extend", "time_sec": end - start}) + + # Unsharpen; + start = time.time() + self.unsharpen_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)\ + (self.image, self.blurred_unsharpen, self.image_unsharpen, self.unsharpen_amount, self.size * self.size) + end = time.time() + self.benchmark.add_phase({"name": "unsharpen", "time_sec": end - start}) + + # Combine results; + start = time.time() + self.combine_mask_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)\ + (self.image_unsharpen, self.blurred_large, self.mask_large, self.image2, self.size * self.size) + self.combine_mask_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)\ + (self.image2, self.blurred_small, self.mask_small, self.image3, self.size * self.size) + end = time.time() + self.benchmark.add_phase({"name": "combine", "time_sec": end - start}) + + # Add a final sync step to measure the real computation time; + start = time.time() + tmp = self.image3[0][0] + end = time.time() + self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) + + # Compute GPU result; + # for i in range(self.size): + # for j in range(self.size): + # self.gpu_result[i, j] = self.image3[i][j] + + self.benchmark.add_to_benchmark("gpu_result", 0) + if self.benchmark.debug: + BenchmarkResult.log_message( + f"\tgpu result: [" + ", ".join([f"{x:.4f}" for x in self.gpu_result[0, :10]]) + "...]") + + return self.gpu_result + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + + sobel_filter_diameter = 3 + sobel_filter_x = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]]) + sobel_filter_y = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]) + + def sobel_filter(image): + out = np.zeros(image.shape) + rows, cols = image.shape + radius = sobel_filter_diameter // 2 + + for i in range(rows): + for j in range(cols): + sum_gradient_x = 0 + sum_gradient_y = 0 + for x in range(-radius, radius + 1): + for y in range(-radius, radius + 1): + nx = x + i + ny = y + j + if (nx >= 0 and ny >= 0 and nx < rows and ny < cols): + gray_value_neigh = image[nx, ny] + gradient_x = sobel_filter_x[x + radius][y + radius] + gradient_y = sobel_filter_y[x + radius][y + radius] + sum_gradient_x += gray_value_neigh * gradient_x + sum_gradient_y += gray_value_neigh * gradient_y + out[i, j] = np.sqrt(sum_gradient_x ** 2 + sum_gradient_y ** 2) + return out + + def gaussian_blur(image, kernel): + out = np.zeros(image.shape) + rows, cols = image.shape + + # Blur radius; + diameter = kernel.shape[0] + radius = diameter // 2 + + # Flatten image and kernel; + image_1d = image.reshape(-1) + kernel_1d = kernel.reshape(-1) + + for i in range(rows): + for j in range(cols): + sum_tmp = 0 + for x in range(-radius, radius + 1): + for y in range(-radius, radius + 1): + nx = x + i + ny = y + j + if (nx >= 0 and ny >= 0 and nx < rows and ny < cols): + sum_tmp += kernel_1d[(x + radius) * diameter + (y + radius)] * image_1d[nx * cols + ny] + out[i, j] = sum_tmp + return out + + def normalize(image): + return (image - np.min(image)) / (np.max(image) - np.min(image)) + + def truncate(image, minimum=0, maximum=1): + out = image.copy() + out[out < minimum] = minimum + out[out > maximum] = maximum + return out + + # Recompute the CPU result only if necessary; + start = time.time() + if self.current_iter == 0 or reinit: + # Part 1: Small blur on medium frequencies; + blurred_small = gaussian_blur(self.image_cpu, self.kernel_small_cpu) + edges_small = sobel_filter(blurred_small) + + # Part 2: High blur on low frequencies; + blurred_large = gaussian_blur(self.image_cpu, self.kernel_large_cpu) + edges_large = sobel_filter(blurred_large) + # Extend mask to cover a larger area; + edges_large = normalize(edges_large) * 5 + edges_large[edges_large > 1] = 1 + + # Part 3: Sharpen image; + unsharpen = gaussian_blur(self.image_cpu, self.kernel_unsharpen_cpu) + amount = 0.5 + sharpened = truncate(self.image_cpu * (1 + amount) - unsharpen * amount) + + # Part 4: Merge sharpened image and low frequencies; + image2 = normalize(sharpened * edges_large + blurred_large * (1 - edges_large)) + + # Part 5: Merge image and medium frequencies; + self.cpu_result = image2 * edges_small + blurred_small * (1 - edges_small) + + cpu_time = time.time() - start + + # Compare GPU and CPU results; + difference = 0 + for i in range(self.size): + for j in range(self.size): + difference += np.abs(self.cpu_result[i, j] - gpu_result[i, j]) + + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", str(difference)) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tcpu result: [" + ", ".join([f"{x:.4f}" for x in self.cpu_result[0, :10]]) + + "...]; " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index 18775932..f03063fe 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -8,6 +8,7 @@ from bench.bench_5 import Benchmark5 from bench.bench_6 import Benchmark6 from bench.bench_7 import Benchmark7 +from bench.bench_8 import Benchmark8 from benchmark_result import BenchmarkResult ############################## @@ -22,6 +23,7 @@ "b5": Benchmark5, "b6": Benchmark6, "b7": Benchmark7, + "b8": Benchmark8, } num_elem = { @@ -32,6 +34,7 @@ "b5": [100], "b6": [100], "b7": [100], + "b8": [100], } policies = { @@ -42,6 +45,7 @@ "b5": ["default"], "b6": ["default"], "b7": ["default"], + "b8": ["default"], } ############################## diff --git a/projects/resources/python/benchmark/benchmark_result.py b/projects/resources/python/benchmark/benchmark_result.py index 6956877a..e2952e94 100644 --- a/projects/resources/python/benchmark/benchmark_result.py +++ b/projects/resources/python/benchmark/benchmark_result.py @@ -114,7 +114,7 @@ def add_total_time(self, total_time: float) -> None: self._dict_current["total_time_sec"] = total_time # Keep only phases related to GPU computation; - blacklisted_phases = ["allocation", "initalization", "reset_result"] + blacklisted_phases = ["allocation", "initialization", "reset_result"] filtered_phases = [x for x in self._dict_current["phases"] if x["name"] not in blacklisted_phases] tot_time_phases = sum([x["time_sec"] if "time_sec" in x else 0 for x in filtered_phases]) self._dict_current["overhead_sec"] = total_time - tot_time_phases diff --git a/projects/resources/python/other/images.py b/projects/resources/python/other/images.py new file mode 100755 index 00000000..9badea6a --- /dev/null +++ b/projects/resources/python/other/images.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Fri Jun 5 08:55:18 2020 + +@author: alberto.parravicini +""" + +import numpy as np +import scipy.misc +import matplotlib.pyplot as plt + +sobel_filter_diameter = 3 +sobel_filter_x = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]]) +sobel_filter_y = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]) + + +def show_image(image): + plt.imshow(image, cmap="gray") + plt.show() + + +def sobel_filter(image): + out = np.zeros(image.shape) + rows, cols = image.shape + radius = sobel_filter_diameter // 2 + + for i in range(rows): + for j in range(cols): + sum_gradient_x = 0 + sum_gradient_y = 0 + for x in range(-radius, radius + 1): + for y in range(-radius, radius + 1): + nx = x + i + ny = y + j + if (nx >= 0 and ny >= 0 and nx < rows and ny < cols): + gray_value_neigh = image[nx, ny] + gradient_x = sobel_filter_x[x + radius][y + radius] + gradient_y = sobel_filter_y[x + radius][y + radius] + sum_gradient_x += gray_value_neigh * gradient_x + sum_gradient_y += gray_value_neigh * gradient_y + out[i, j] = np.sqrt(sum_gradient_x**2 + sum_gradient_y**2) + return out + + +def gaussian_kernel(diameter, sigma): + kernel = np.zeros((diameter, diameter)) + + mean = diameter / 2 + sum_tmp = 0 + for x in range(diameter): + for y in range(diameter): + kernel[x, y] = np.exp(-0.5 * ((x - mean)**2 + (y - mean)**2) / sigma**2) + sum_tmp += kernel[x, y] + for x in range(diameter): + for y in range(diameter): + kernel[x, y] /= sum_tmp + return kernel + + +def gaussian_blur(image, kernel): + out = np.zeros(image.shape) + rows, cols = image.shape + + # Blur radius; + diameter = kernel.shape[0] + radius = diameter // 2 + + # Flatten image and kernel; + image_1d = image.reshape(-1) + kernel_1d = kernel.reshape(-1) + + for i in range(rows): + for j in range(cols): + sum_tmp = 0 + for x in range(-radius, radius + 1): + for y in range(-radius, radius + 1): + nx = x + i + ny = y + j + if (nx >= 0 and ny >= 0 and nx < rows and ny < cols): + sum_tmp += kernel_1d[(x + radius) * diameter + (y + radius)] * image_1d[nx * cols + ny] + out[i, j] = sum_tmp + return out + + +def linear_blur(image, diameter=5): + out = np.zeros(image.shape) + rows, cols = image.shape + + # Blur radius; + radius = diameter // 2 + filter_area = diameter**2 + + # Flatten image and kernel; + image_1d = image.reshape(-1) + + for i in range(rows): + for j in range(cols): + sum_tmp = 0 + for x in range(-radius, radius + 1): + for y in range(-radius, radius + 1): + nx = x + i + ny = y + j + if (nx >= 0 and ny >= 0 and nx < rows and ny < cols): + sum_tmp += image_1d[nx * cols + ny] + out[i, j] = sum_tmp / filter_area + return out + + +def normalize(image): + return (image - np.min(image)) / (np.max(image) - np.min(image)) + + +def truncate(image, minimum=0, maximum=1): + out = image.copy() + out[out < minimum] = minimum + out[out > maximum] = maximum + return out + +#%% +if __name__ == "__main__": + face = scipy.misc.face(gray=True) + # Normalize to [0, 1]; + face = np.array(face, dtype=float) / 255 + show_image(face) + + #%% Part 1: Small blur on medium frequencies; + + # Compute blur filter; + blurred_small = linear_blur(face, 3) + show_image(blurred_small) + # Find edges; + edges_small = normalize(sobel_filter(blurred_small)) + show_image(edges_small) + + #%% Part 2: High blur on low frequencies; + + kernel = gaussian_kernel(3, 10) + blurred_large = gaussian_blur(face, kernel) + show_image(blurred_large) + # Find edges; + edges_large = sobel_filter(blurred_large) + # Extend mask; + edges_large = normalize(edges_large) * 5 + edges_large[edges_large > 1] = 1 + show_image(edges_large) + + #%% Part 3: Sharpen image; + kernel2 = gaussian_kernel(3, 10) + unsharpen = gaussian_blur(face, kernel2) + amount = 0.5 + sharpened = truncate(face * (1 + amount) - unsharpen * amount) + show_image(sharpened) + + #%% Part 4: Merge sharpened image and low frequencies; + image2 = normalize(sharpened * edges_large + blurred_large * (1 - edges_large)) + show_image(image2) + + #%% Part 5: Merge image and medium frequencies; + image3 = image2 * edges_small + blurred_small * (1 - edges_small) + show_image(image3) + + + + + + + \ No newline at end of file From dcc3f876813d56a5ae581303f2e282f8cbea5c6d Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 8 Jun 2020 12:17:08 +0200 Subject: [PATCH 080/236] fixed sync of parent streams --- README.md | 5 + .../test/mock/GrCUDAStreamManagerMock.java | 22 ++-- .../gpu/stream/GrCUDAStreamManager.java | 120 ++++++++---------- .../python/benchmark/bench/bench_7.py | 16 ++- .../python/benchmark/bench/bench_8.py | 2 +- 5 files changed, 79 insertions(+), 86 deletions(-) diff --git a/README.md b/README.md index 20e3bd14..632a07da 100644 --- a/README.md +++ b/README.md @@ -274,6 +274,11 @@ cd projects/resources/python/benchmark graalpython --jvm --polyglot --WithThread benchmark_main.py -d -i 5 -n 1000 ``` +Run a specific benchmark with custom settings +``` +graalpython --jvm --polyglot --WithThread --grcuda.RetrieveNewStreamPolicy=fifo --grcuda.ExecutionPolicy=default --grcuda.DependencyPolicy=with_const --grcuda.RetrieveParentStreamPolicy=disjoint benchmark_main.py -d -i 10 -n 100 --no_cpu_validation --reinit false --realloc false -b b7 +``` + * Benchmarks are defined in the `projects/resources/python/benchmark/bench` folder, and you can create more benchmarks by inheriting from the `Benchmark` class * The output of benchmarks is stored in a JSON (by default, located in `data/results`) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index c14f7dce..15922762 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -9,10 +9,12 @@ import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; public class GrCUDAStreamManagerMock extends GrCUDAStreamManager { @@ -53,22 +55,16 @@ public CUDAStream createStream() { public void syncStream(CUDAStream stream) { } @Override - protected void syncDevice() { } + protected void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { } @Override - protected void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { - for (GrCUDAComputationalElement parent : vertex.getParentComputations()) { - CUDAStream stream = parent.getStream(); - // Skip synchronization on the same stream where the new computation is executed, - // as operations scheduled on a stream are executed in order; - if (!vertex.getComputation().getStream().equals(stream)) { - // Track that the current computation has a parent executed on a different stream; - trackAdditionalComputationsToFinish(vertex.getComputation(), parent); - } - } - } + protected void syncDevice() { } public Map> getActiveComputationsMap() { - return this.activeComputationsPerStream; + Map> activeComputations = new HashMap<>(); + for (Map.Entry> e : this.activeComputationsPerStream.entrySet()) { + activeComputations.put(e.getKey(), e.getValue().stream().map(ExecutionDAG.DAGVertex::getComputation).collect(Collectors.toSet())); + } + return activeComputations; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index b788d078..435334d4 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -31,12 +31,7 @@ public class GrCUDAStreamManager { /** * Track the active computations each stream has, excluding the default stream; */ - protected final Map> activeComputationsPerStream = new HashMap<>(); - /** - * Associate to each computational element its parents that are executed on different streams. - * This is required to set these parent computations as finished when the stream of the child element is synchronized; - */ - protected final Map> additionalComputationsToFinish = new HashMap<>(); + protected final Map> activeComputationsPerStream = new HashMap<>(); private final RetrieveNewStream retrieveNewStream; private final RetrieveParentStream retrieveParentStream; @@ -94,7 +89,7 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { // Set the stream; vertex.getComputation().setStream(stream); // Update the computation counter; - addActiveComputation(vertex.getComputation()); + addActiveComputation(vertex); // Associate all the arrays in the computation to the selected stream, // to enable CPU accesses on managed memory arrays currently not being used by the GPU. // This is required as on pre-Pascal GPUs all unified memory pages are locked by the GPU while code is running on the GPU, @@ -111,7 +106,6 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { syncStreamsUsingEvents(vertex); } else { if (this.isAnyComputationActive()) { - Set streamsToSync = getParentStreams(vertex.getParentComputations()); Optional additionalStream = vertex.getComputation().additionalStreamDependency(); if (additionalStream.isPresent()) { CUDAStream stream = additionalStream.get(); @@ -122,17 +116,13 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { syncDevice(); // All computations are now finished; resetActiveComputationState(); - } else if (!streamsToSync.contains(stream)) { + } else { // Else add the computations related to the additional streams to the set and sync it, // as long as the additional stream isn't the same as the one that we have to sync anyway; - System.out.println("--\tsyncing additional stream " + stream + "..."); - streamsToSync.add(stream); - syncParentStreamsImpl(streamsToSync, vertex.getComputation()); - } else { - syncParentStreamsImpl(streamsToSync, vertex.getComputation()); + syncParentStreamsImpl(vertex); } } else { - syncParentStreamsImpl(streamsToSync, vertex.getComputation()); + syncParentStreamsImpl(vertex); } } } @@ -171,73 +161,71 @@ protected void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { + "; stream that waits=" + vertex.getComputation().getStream().getStreamNumber() + "; event=" + event.getEventNumber()); } - // Track that the current computation has a parent executed on a different stream; - trackAdditionalComputationsToFinish(vertex.getComputation(), parent); } } } /** - * Associate a parent computation to its child computation, so that we remember to set the parent computation as finished - * once the child stream has been synchronized; - * @param computation a computational element - * @param parent a parent computational element executed on a different stream + * Synchronization is done in 2 parts: + * 1. Synchronize the streams where each parent computation is executed; + * 2. All computations currently active on the synchronized streams are finished, and so are their parents. + * In this phase, check if any parent is executed on a stream different from the ones we synchronized, and store these streams. + * Also set the streams that have no active computation as free + * @param vertex the vertex whose parents should be synchronized */ - protected void trackAdditionalComputationsToFinish(GrCUDAComputationalElement computation, GrCUDAComputationalElement parent) { - if (additionalComputationsToFinish.containsKey(computation)) { - additionalComputationsToFinish.get(computation).add(parent); - } else { - additionalComputationsToFinish.put(computation, new HashSet<>(Collections.singletonList(parent))); - } - // Forward-propagation of dependencies: if the parent already had additional computations to sync, - // a sync on the child computation should sync them too; - if (additionalComputationsToFinish.containsKey(parent)) { - additionalComputationsToFinish.get(computation).addAll(additionalComputationsToFinish.get(parent)); - } - } - - protected void syncParentStreamsImpl( - Set streamsToSync, - GrCUDAComputationalElement computationThatSyncs) { + protected void syncParentStreamsImpl(ExecutionDAG.DAGVertex vertex) { + Set streamsToSync = getParentStreams(vertex.getParentComputations()); // Synchronize streams; streamsToSync.forEach(s -> { - System.out.println("--\tsync stream=" + s.getStreamNumber() + " by " + computationThatSyncs); + System.out.println("--\tsync stream=" + s.getStreamNumber() + " by " + vertex.getComputation()); syncStream(s); }); + // Book-keeping: all computations on the synchronized streams are guaranteed to be finished; streamsToSync.forEach(s -> { - try { - activeComputationsPerStream.get(s).forEach(c -> { - c.setComputationFinished(); - setParentComputationsFinished(c); - }); - } catch (NullPointerException e) { - System.out.println("missing stream " + s.getStreamNumber() + " for sync"); - } + activeComputationsPerStream.get(s).forEach(v -> { + // Skip computations that have already finished; + if (!v.getComputation().isComputationFinished()) { + setComputationsFinished(v, streamsToSync); + } + }); // Now the stream is free to be re-used; activeComputationsPerStream.remove(s); retrieveNewStream.update(s); }); } - private void setParentComputationsFinished(GrCUDAComputationalElement c) { - if (additionalComputationsToFinish.containsKey(c)) { - additionalComputationsToFinish.get(c).forEach(parent -> { - if (!parent.isComputationFinished()) { - parent.setComputationFinished(); - CUDAStream stream = parent.getStream(); - // Stop considering this computation as active on its stream; - activeComputationsPerStream.get(stream).remove(parent); - // If this stream doesn't have any computation associated to it, it's free to use; - if (activeComputationsPerStream.get(stream).isEmpty()) { - activeComputationsPerStream.remove(stream); - retrieveNewStream.update(stream); - } - additionalComputationsToFinish.remove(parent); + private void setComputationsFinished(ExecutionDAG.DAGVertex vertex, Set streamsToSync) { + // Vertices to process; + final Queue queue = new ArrayDeque<>(Collections.singletonList(vertex)); + // Vertices that have already been seen; + final Set seen = new HashSet<>(Collections.singletonList(vertex)); + // Perform a reverse BFS to process all the parents of the starting computation; + while (!queue.isEmpty()) { + ExecutionDAG.DAGVertex currentVertex = queue.poll(); + currentVertex.getComputation().setComputationFinished(); + // Book-keeping on the stream of the current computation; + CUDAStream stream = currentVertex.getComputation().getStream(); + + // Skip streams that have already been synchronized, as they will be freed later; + if (!streamsToSync.contains(stream)) { + // Stop considering this computation as active on its stream; + activeComputationsPerStream.get(stream).remove(currentVertex); + // If this stream doesn't have any computation associated to it, it's free to use; + if (activeComputationsPerStream.get(stream).isEmpty()) { + activeComputationsPerStream.remove(stream); + retrieveNewStream.update(stream); } - }); - additionalComputationsToFinish.remove(c); + } + + // Process parents of the current computation; + for (ExecutionDAG.DAGVertex parent : currentVertex.getParentVertices()) { + if (!parent.getComputation().isComputationFinished() && !seen.contains(parent)) { + queue.add(parent); + seen.add(parent); + } + } } } @@ -276,14 +264,14 @@ public int getNumActiveComputationsOnStream(CUDAStream stream) { */ public boolean isAnyComputationActive() { return !this.activeComputationsPerStream.isEmpty(); } - protected void addActiveComputation(GrCUDAComputationalElement computation) { - CUDAStream stream = computation.getStream(); + protected void addActiveComputation(ExecutionDAG.DAGVertex vertex) { + CUDAStream stream = vertex.getComputation().getStream(); // Start tracking the stream if it wasn't already tracked; if (!activeComputationsPerStream.containsKey(stream)) { activeComputationsPerStream.put(stream, new HashSet<>()); } // Associate the computation to the stream; - activeComputationsPerStream.get(stream).add(computation); + activeComputationsPerStream.get(stream).add(vertex); } /** @@ -291,7 +279,7 @@ protected void addActiveComputation(GrCUDAComputationalElement computation) { */ protected void resetActiveComputationState() { activeComputationsPerStream.keySet().forEach(s -> - activeComputationsPerStream.get(s).forEach(GrCUDAComputationalElement::setComputationFinished) + activeComputationsPerStream.get(s).forEach(v -> v.getComputation().setComputationFinished()) ); // Streams don't have any active computation; activeComputationsPerStream.clear(); diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index 337cd282..956682b3 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -51,7 +51,7 @@ """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) DIVIDE_KERNEL = """ - extern "C" __global__ void divide(const float* x, float *y, const float *val, int n) { + extern "C" __global__ void divide(const float* x, float *y, float *val, int n) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if (idx < n) { y[idx] = x[idx] / val[0]; @@ -74,7 +74,7 @@ def __init__(self, benchmark: BenchmarkResult): super().__init__("b7", benchmark) self.size = 0 self.num_nnz = 0 - self.max_degree = 100 # Each vertex has 10 edges; + self.max_degree = 10 # Each vertex has 10 edges; self.num_iterations = 10 self.ptr = None self.idx = None @@ -133,7 +133,7 @@ def alloc(self, size: int): build_kernel = polyglot.eval(language="grcuda", string="buildkernel") self.spmv_kernel = build_kernel(SPMV_KERNEL, "spmv", "const pointer, const pointer, const pointer, const pointer, pointer, sint32, sint32") self.sum_kernel = build_kernel(SUM_KERNEL, "sum", "const pointer, pointer, sint32") - self.divide_kernel = build_kernel(DIVIDE_KERNEL, "divide", "const pointer, pointer, const pointer, sint32") + self.divide_kernel = build_kernel(DIVIDE_KERNEL, "divide", "const pointer, pointer, pointer, sint32") @time_phase("initialization") def init(self): @@ -153,7 +153,7 @@ def create_csr_from_coo(x_in, y_in, val_in): y = [] val = [] for i in range(self.size): - # Create 10 random edges; + # Create max_degree random edges; edges = sorted(sample(range(self.size), self.max_degree)) for j in edges: x += [i] @@ -220,6 +220,12 @@ def execute(self) -> object: end = time.time() self.benchmark.add_phase({"name": f"divide_h_{i}", "time_sec": end - start}) + start = time.time() + self.auth_norm[0] = 0.0 + self.hub_norm[0] = 0.0 + end = time.time() + self.benchmark.add_phase({"name": f"norm_reset_{i}", "time_sec": end - start}) + # Add a final sync step to measure the real computation time; start = time.time() tmp1 = self.auth1[0] @@ -259,9 +265,7 @@ def spmv(ptr, idx, val, vec): N = self.size auth1 = np.ones(N) - auth2 = np.ones(N) hub1 = np.ones(N) - hub2 = np.ones(N) # Main iteration; for i in range(self.num_iterations): diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index 1a0b9059..576f9809 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -342,7 +342,7 @@ def execute(self) -> object: self.sobel_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ (self.blurred_large, self.mask_large, self.size, self.size) end = time.time() - self.benchmark.add_phase({"name": "sobel_small", "time_sec": end - start}) + self.benchmark.add_phase({"name": "sobel_large", "time_sec": end - start}) # Extend large edge detection mask; start = time.time() From cd18e3b68d8c3543975f1aa9c9c4e1e544577456 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 8 Jun 2020 20:15:33 +0200 Subject: [PATCH 081/236] added mock tests using same structure as complex becnhmarks --- .../test/gpu/ComplexExecutionDAGTest.java | 158 ++++++++++++++++++ .../grcuda/test/gpu/ExecutionDAGTest.java | 2 +- .../WithConstDependencyComputationTest.java | 8 +- .../gpu/stream/GrCUDAStreamManagerTest.java | 18 +- .../test/mock/GrCUDAExecutionContextMock.java | 9 +- .../GrCUDAExecutionContextMockBuilder.java | 8 +- .../test/mock/GrCUDAStreamManagerMock.java | 17 +- ...MultithreadGrCUDAExecutionContextMock.java | 9 +- .../gpu/stream/GrCUDAStreamManager.java | 25 ++- 9 files changed, 206 insertions(+), 48 deletions(-) create mode 100644 projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ComplexExecutionDAGTest.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ComplexExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ComplexExecutionDAGTest.java new file mode 100644 index 00000000..63080eeb --- /dev/null +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ComplexExecutionDAGTest.java @@ -0,0 +1,158 @@ +package com.nvidia.grcuda.test.gpu; + +import com.nvidia.grcuda.gpu.computation.KernelExecution; +import com.nvidia.grcuda.gpu.computation.dependency.DependencyPolicyEnum; +import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; +import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.nvidia.grcuda.gpu.stream.RetrieveNewStreamPolicyEnum; +import com.nvidia.grcuda.gpu.stream.RetrieveParentStreamPolicyEnum; +import com.nvidia.grcuda.test.mock.ArgumentMock; +import com.nvidia.grcuda.test.mock.GrCUDAExecutionContextMockBuilder; +import com.nvidia.grcuda.test.mock.GrCUDAStreamManagerMock; +import com.nvidia.grcuda.test.mock.KernelExecutionMock; +import com.nvidia.grcuda.test.mock.SyncExecutionMock; +import com.oracle.truffle.api.interop.UnsupportedTypeException; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +@RunWith(Parameterized.class) +public class ComplexExecutionDAGTest { + + public static Collection crossProduct(List sets) { + int solutions = 1; + List combinations = new ArrayList<>(); + for (Object[] objects : sets) { + solutions *= objects.length; + } + for(int i = 0; i < solutions; i++) { + int j = 1; + List current = new ArrayList<>(); + for(Object[] set : sets) { + current.add(set[(i / j) % set.length]); + j *= set.length; + } + combinations.add(current.toArray(new Object[0])); + System.out.println(current); + } + return combinations; + } + + + @Parameterized.Parameters + public static Collection data() { + + return crossProduct(Arrays.asList(new Object[][]{ + {RetrieveNewStreamPolicyEnum.ALWAYS_NEW, RetrieveNewStreamPolicyEnum.FIFO}, + {RetrieveParentStreamPolicyEnum.DISJOINT, RetrieveParentStreamPolicyEnum.DEFAULT}, + {DependencyPolicyEnum.WITH_CONST, DependencyPolicyEnum.DEFAULT}, + })); + } + + private final RetrieveNewStreamPolicyEnum retrieveNewStreamPolicy; + private final RetrieveParentStreamPolicyEnum retrieveParentStreamPolicy; + private final DependencyPolicyEnum dependencyPolicy; + + public ComplexExecutionDAGTest(RetrieveNewStreamPolicyEnum retrieveNewStreamPolicy, + RetrieveParentStreamPolicyEnum retrieveParentStreamPolicy, + DependencyPolicyEnum dependencyPolicy) { + this.retrieveNewStreamPolicy = retrieveNewStreamPolicy; + this.retrieveParentStreamPolicy = retrieveParentStreamPolicy; + this.dependencyPolicy = dependencyPolicy; + } + + @Test + public void hitsMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() + .setRetrieveNewStreamPolicy(this.retrieveNewStreamPolicy).setRetrieveParentStreamPolicy(this.retrieveParentStreamPolicy) + .setDependencyPolicy(this.dependencyPolicy).build(); + + int numIterations = 10; + KernelExecutionMock c1 = null; + KernelExecutionMock c2 = null; + for (int i = 0; i < numIterations; i++) { + // hub1 -> auth2 + c1 = new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))); + c1.schedule(); + // auth1 -> hub2 + c2 = new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(3, true), new ArgumentMock(4))); + c2.schedule(); + + // Without disjoint policy the computation collapses on a single stream after the first iteration; + int stream = (retrieveParentStreamPolicy.equals(RetrieveParentStreamPolicyEnum.DISJOINT) || i == 0) ? 0 : 1; + assertEquals(stream, c1.getStream().getStreamNumber()); + assertEquals(1, c2.getStream().getStreamNumber()); + + // auth2 -> auth_norm + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(2, true), new ArgumentMock(5))).schedule(); + // hub2 -> hub_norm + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(4, true), new ArgumentMock(6))).schedule(); + // auth2, auth_norm -> auth1 + c1 = new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(2, true), new ArgumentMock(5, true), new ArgumentMock(3))); + c1.schedule(); + // hub2, hub_norm -> hub1 + c2 = new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(4, true), new ArgumentMock(6, true), new ArgumentMock(1))); + c2.schedule(); + } + + assertEquals(2, context.getStreamManager().getNumberOfStreams()); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(3))).schedule(); + assertTrue(context.getStreamManager().isStreamFree(c1.getStream())); + int activeComps = retrieveParentStreamPolicy.equals(RetrieveParentStreamPolicyEnum.DISJOINT) ? 2 : 0; + assertEquals(activeComps, context.getStreamManager().getNumActiveComputationsOnStream(c2.getStream())); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(1))).schedule(); + assertTrue(context.getStreamManager().isStreamFree(c1.getStream())); + assertTrue(context.getStreamManager().isStreamFree(c2.getStream())); + } + + @Test + public void imageMockTest() throws UnsupportedTypeException { + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() + .setRetrieveNewStreamPolicy(this.retrieveNewStreamPolicy).setRetrieveParentStreamPolicy(this.retrieveParentStreamPolicy) + .setDependencyPolicy(this.dependencyPolicy).build(); + + // blur + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(2))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(3))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(4))).schedule(); + // sobel + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(2, true), new ArgumentMock(5))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(3, true), new ArgumentMock(6))).schedule(); + // extend + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(4, true), new ArgumentMock(7))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(4, true), new ArgumentMock(8))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(4), new ArgumentMock(7), new ArgumentMock(8))).schedule(); + // unsharpen + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(1, true), new ArgumentMock(4), new ArgumentMock(9))).schedule(); + // combine + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(9, true), new ArgumentMock(3, true), + new ArgumentMock(6, true), new ArgumentMock(10))).schedule(); + new KernelExecutionMock(context, Arrays.asList(new ArgumentMock(10, true), new ArgumentMock(2, true), + new ArgumentMock(5, true), new ArgumentMock(11))).schedule(); + + new SyncExecutionMock(context, Collections.singletonList(new ArgumentMock(11))).schedule(); + int numStreams = 3; + if (retrieveParentStreamPolicy.equals(RetrieveParentStreamPolicyEnum.DISJOINT) && dependencyPolicy.equals(DependencyPolicyEnum.WITH_CONST)) { + numStreams = 4; + } + else if (retrieveParentStreamPolicy.equals(RetrieveParentStreamPolicyEnum.DEFAULT) && dependencyPolicy.equals(DependencyPolicyEnum.DEFAULT)) { + numStreams = 1; + } + assertEquals(numStreams, context.getStreamManager().getNumberOfStreams()); + for (CUDAStream stream : ((GrCUDAStreamManagerMock) context.getStreamManager()).getStreams()) { + assertTrue(context.getStreamManager().isStreamFree(stream)); + } + } +} diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java index 3ed59074..958ebea4 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/ExecutionDAGTest.java @@ -147,7 +147,7 @@ public void complexFrontierMockTest() throws UnsupportedTypeException { @Test public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.DEFAULT, true, + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.DEFAULT, RetrieveNewStreamPolicyEnum.FIFO, RetrieveParentStreamPolicyEnum.DISJOINT); // This time, simulate the synchronization process between kernels; diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java index 156ffb9a..3f3ae538 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/WithConstDependencyComputationTest.java @@ -240,7 +240,7 @@ public void complexFrontier2MockTest() throws UnsupportedTypeException { @Test public void dependencyPipelineSimpleWithSyncMockTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() - .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).setSyncStream(true).build(); + .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).build(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); @@ -289,7 +289,7 @@ public void dependencyPipelineSimpleWithSyncMockTest() throws UnsupportedTypeExc @Test public void forkedComputationWithSyncTest() throws UnsupportedTypeException { GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() - .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).setSyncStream(true).build(); + .setDependencyPolicy(DependencyPolicyEnum.WITH_CONST).build(); // A(1) --> B(1R) // \-> C(1R) @@ -331,7 +331,7 @@ public void forkedComputationWithSyncTest() throws UnsupportedTypeException { @Test public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.WITH_CONST, true, + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.WITH_CONST, RetrieveNewStreamPolicyEnum.FIFO, RetrieveParentStreamPolicyEnum.DISJOINT); // A(1R,2) -> B(1) ---> D(1R,3) @@ -390,7 +390,7 @@ public void complexFrontierWithSyncMockTest() throws UnsupportedTypeException { @Test public void complexFrontier2WithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.WITH_CONST, true, + GrCUDAExecutionContext context = new GrCUDAExecutionContextMock(DependencyPolicyEnum.WITH_CONST, RetrieveNewStreamPolicyEnum.FIFO, RetrieveParentStreamPolicyEnum.DISJOINT); // A(1R,2) -> B(1) -> D(1R,3) ---------> G(1, 3, 4) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java index 0901b805..51bc405d 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/stream/GrCUDAStreamManagerTest.java @@ -132,7 +132,7 @@ public void streamSelection2MockTest() throws UnsupportedTypeException { @Test public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveNewStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveNewStreamPolicy(this.policy).build(); // Create 4 mock kernel executions. In this case, kernel 3 requires 1 and 2 to finish, // and kernel 4 requires kernel 3 to finish. The final frontier is composed of kernel 3 (arguments "1" and "2" are active), // and kernel 4 (argument "3" is active); @@ -166,7 +166,7 @@ public void streamSelectionSimpleWithSyncMockTest() throws UnsupportedTypeExcept @Test public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveNewStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveNewStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) -> E(1,4) -> F(4) // \-> C(2) @@ -202,7 +202,7 @@ public void streamSelectionWithSyncMockTest() throws UnsupportedTypeException { @Test public void streamSelection2WithSyncMockTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveNewStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveNewStreamPolicy(this.policy).build(); // A(1,2) -> B(1) -> D(1,3) // \-> C(2) @@ -240,7 +240,7 @@ public void streamSelection2WithSyncMockTest() throws UnsupportedTypeException { @Test public void generateManyStreamsTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true).setRetrieveNewStreamPolicy(this.policy).build(); + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setRetrieveNewStreamPolicy(this.policy).build(); // Create 2 parallel branches on dependent computations, and check that the total amount of streams created is what is expected; int numLoops = 10; @@ -264,7 +264,7 @@ public void generateManyStreamsTest() throws UnsupportedTypeException { @Test public void disjointArgumentStreamTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(true) + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() .setRetrieveNewStreamPolicy(this.policy).setRetrieveParentStreamPolicy(RetrieveParentStreamPolicyEnum.DISJOINT).build(); // A(1,2) -> B(1) @@ -293,7 +293,7 @@ public void disjointArgumentStreamTest() throws UnsupportedTypeException { @Test public void disjointArgumentStreamCrossTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(false) + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() .setRetrieveNewStreamPolicy(this.policy).setRetrieveParentStreamPolicy(RetrieveParentStreamPolicyEnum.DISJOINT).build(); // A(1,2) -> C(1,3) @@ -322,7 +322,7 @@ public void disjointArgumentStreamCrossTest() throws UnsupportedTypeException { @Test public void disjointArgumentStreamCross2Test() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(false) + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() .setRetrieveNewStreamPolicy(this.policy).setRetrieveParentStreamPolicy(RetrieveParentStreamPolicyEnum.DISJOINT).build(); // A(1,2,7) -> D(1,3,5) @@ -360,7 +360,7 @@ public void disjointArgumentStreamCross2Test() throws UnsupportedTypeException { @Test public void syncParentsOfParentsTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(false) + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() .setRetrieveNewStreamPolicy(this.policy).setRetrieveParentStreamPolicy(RetrieveParentStreamPolicyEnum.DISJOINT).build(); // A(1,2) -> B(1) @@ -400,7 +400,7 @@ public void syncParentsOfParentsTest() throws UnsupportedTypeException { @Test public void repeatedSyncTest() throws UnsupportedTypeException { - GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder().setSyncStream(false) + GrCUDAExecutionContext context = new GrCUDAExecutionContextMockBuilder() .setRetrieveNewStreamPolicy(this.policy).build(); int numTest = 10; diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java index 38f71e17..2792f27c 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMock.java @@ -12,11 +12,6 @@ */ public class GrCUDAExecutionContextMock extends GrCUDAExecutionContext { - public GrCUDAExecutionContextMock(boolean syncStream) { - super(null, null, - new GrCUDAStreamManagerMock(null, syncStream), DependencyPolicyEnum.DEFAULT); - } - public GrCUDAExecutionContextMock() { super(null, null, new GrCUDAStreamManagerMock(null), DependencyPolicyEnum.DEFAULT); @@ -27,11 +22,11 @@ public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy) { new GrCUDAStreamManagerMock(null), dependencyPolicy); } - public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy, boolean syncStream, + public GrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy, RetrieveNewStreamPolicyEnum retrieveStreamPolicy, RetrieveParentStreamPolicyEnum parentStreamPolicyEnum) { super(null, null, - new GrCUDAStreamManagerMock(null, syncStream, retrieveStreamPolicy, parentStreamPolicyEnum), dependencyPolicy); + new GrCUDAStreamManagerMock(null, retrieveStreamPolicy, parentStreamPolicyEnum), dependencyPolicy); } public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java index a8cc93cd..5f8f82f0 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAExecutionContextMockBuilder.java @@ -6,18 +6,12 @@ public class GrCUDAExecutionContextMockBuilder { - boolean syncStream = false; DependencyPolicyEnum dependencyPolicy = DependencyPolicyEnum.DEFAULT; RetrieveNewStreamPolicyEnum retrieveStreamPolicy = RetrieveNewStreamPolicyEnum.FIFO; RetrieveParentStreamPolicyEnum parentStreamPolicyEnum = RetrieveParentStreamPolicyEnum.DEFAULT; public GrCUDAExecutionContextMock build() { - return new GrCUDAExecutionContextMock(dependencyPolicy, syncStream, retrieveStreamPolicy, parentStreamPolicyEnum); - } - - public GrCUDAExecutionContextMockBuilder setSyncStream(boolean syncStream) { - this.syncStream = syncStream; - return this; + return new GrCUDAExecutionContextMock(dependencyPolicy, retrieveStreamPolicy, parentStreamPolicyEnum); } public GrCUDAExecutionContextMockBuilder setDependencyPolicy(DependencyPolicyEnum dependencyPolicy) { diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index 15922762..67bc8b36 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -18,32 +18,23 @@ public class GrCUDAStreamManagerMock extends GrCUDAStreamManager { - GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents, + GrCUDAStreamManagerMock(CUDARuntime runtime, RetrieveNewStreamPolicyEnum retrieveStreamPolicy, RetrieveParentStreamPolicyEnum parentStreamPolicyEnum) { super(runtime, retrieveStreamPolicy, parentStreamPolicyEnum); - this.syncParents = syncParents; } - GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents, + GrCUDAStreamManagerMock(CUDARuntime runtime, RetrieveNewStreamPolicyEnum retrieveStreamPolicy) { super(runtime, retrieveStreamPolicy, RetrieveParentStreamPolicyEnum.DEFAULT); - this.syncParents = syncParents; - } - - GrCUDAStreamManagerMock(CUDARuntime runtime, boolean syncParents) { - super(runtime, RetrieveNewStreamPolicyEnum.ALWAYS_NEW, RetrieveParentStreamPolicyEnum.DEFAULT); - this.syncParents = syncParents; } GrCUDAStreamManagerMock(CUDARuntime runtime) { - this(runtime, false); + super(runtime, RetrieveNewStreamPolicyEnum.ALWAYS_NEW, RetrieveParentStreamPolicyEnum.DEFAULT); } int numStreams = 0; - final boolean syncParents; - @Override public CUDAStream createStream() { CUDAStream newStream = new CUDAStream(0, numStreams++); @@ -60,6 +51,8 @@ protected void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { } @Override protected void syncDevice() { } + public List getStreams() { return this.streams; } + public Map> getActiveComputationsMap() { Map> activeComputations = new HashMap<>(); for (Map.Entry> e : this.activeComputationsPerStream.entrySet()) { diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java index d4f9c024..733e49ba 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/MultithreadGrCUDAExecutionContextMock.java @@ -20,11 +20,6 @@ public class MultithreadGrCUDAExecutionContextMock extends MultithreadGrCUDAExec private static final int THREAD_NUM = 16; - public MultithreadGrCUDAExecutionContextMock(boolean syncStream) { - super(null, new GrCUDAThreadManagerMock(THREAD_NUM), - new GrCUDAStreamManagerMock(null, syncStream), DependencyPolicyEnum.DEFAULT); - } - public MultithreadGrCUDAExecutionContextMock() { super(null, new GrCUDAThreadManagerMock(THREAD_NUM), new GrCUDAStreamManagerMock(null), DependencyPolicyEnum.DEFAULT); @@ -35,11 +30,11 @@ public MultithreadGrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPoli new GrCUDAStreamManagerMock(null), dependencyPolicy); } - public MultithreadGrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy, boolean syncStream, + public MultithreadGrCUDAExecutionContextMock(DependencyPolicyEnum dependencyPolicy, RetrieveNewStreamPolicyEnum retrieveStreamPolicy, RetrieveParentStreamPolicyEnum parentStreamPolicyEnum) { super(null, new GrCUDAThreadManagerMock(THREAD_NUM), - new GrCUDAStreamManagerMock(null, syncStream, retrieveStreamPolicy, parentStreamPolicyEnum), dependencyPolicy); + new GrCUDAStreamManagerMock(null, retrieveStreamPolicy, parentStreamPolicyEnum), dependencyPolicy); } public ArrayStreamArchitecturePolicy getArrayStreamArchitecturePolicy() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 435334d4..a5bd93ac 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -4,6 +4,7 @@ import com.nvidia.grcuda.gpu.CUDARuntime; import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.computation.GrCUDAComputationalElement; +import jdk.nashorn.internal.runtime.regexp.joni.exception.ValueException; import java.util.ArrayDeque; import java.util.ArrayList; @@ -238,6 +239,24 @@ public CUDAStream createStream() { return newStream; } + /** + * Check if a given stream is free to use, and has no active computations on it; + * @param stream a CUDAStream + * @return if the stream has no active computations on it + */ + public boolean isStreamFree(CUDAStream stream) throws IllegalStateException { + if (activeComputationsPerStream.containsKey(stream)) { + if (activeComputationsPerStream.get(stream).isEmpty()) { + // The stream cannot be in the map without at least one active computation; + throw new IllegalStateException("stream " + stream.getStreamNumber() + " is tracked but has 0 active computations"); + } else { + return false; // Stream is active; + } + } else { + return true; // Stream is not active; + } + } + public void syncStream(CUDAStream stream) { runtime.cudaStreamSynchronize(stream); } @@ -254,7 +273,11 @@ public int getNumberOfStreams() { } public int getNumActiveComputationsOnStream(CUDAStream stream) { - return activeComputationsPerStream.get(stream).size(); + if (this.isStreamFree(stream)) { + return 0; + } else { + return activeComputationsPerStream.get(stream).size(); + } } /** From 90159a97844e9e0b3c9bf97f53bfb2666e9b69e9 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 9 Jun 2020 09:23:54 +0200 Subject: [PATCH 082/236] updated notes --- NOTES.md | 51 +++++++++++++++++++++++++++++---------------------- README.md | 4 ++-- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/NOTES.md b/NOTES.md index 148fc7a7..ae0ba999 100644 --- a/NOTES.md +++ b/NOTES.md @@ -2,19 +2,22 @@ The main idea is to **represent GrCUDA computations as vertices of a DAG**, connected using their dependencies (e.g. the output of a kernel is used as input in another one). * The DAG allows scheduling parallel computations on different streams and avoid synchronization when not necessary - * See `projects/resources/python/examples` for simple examples of how this technique can be useful + * See `projects/resources/python/examples` and `projects/resources/python/benchmark/bench` for simple examples of how this technique can be useful **Differences w.r.t. existing techniques** (e.g. TensorFlow or [CUDA Graphs](https://devblogs.nvidia.com/cuda-graphs/)): 1. The DAG creation is automatic, instead of being built by the user 2. The DAG is built at runtime, not at compile time or eagerly. This means that we don't have to worry about the control flow of the host program, but only about data dependencies, - as we dynamically add and schedule new vertices/computations as the user provides them. We can also collect profiling information and adjust the DAG creation based on that (e.g. how many CUDA streams we need) + as we dynamically add and schedule new vertices/computations as the user provides them. We can also collect profiling information and adjust the DAG creation based on that + (e.g. how many CUDA streams we need, or how large each GPU block should be) **How it works, in a few words** * The class `GpuExecutionContext` tracks GPU computational elements (e.g. `kernels`) declarations and invocations * When a new computation is created, or when it is called, it notifies `GpuExecutionContext` so that it updates the `DAG` by computing the data dependencies of the new computation * `GpuExecutionContext` uses the DAG to understand if the new computation can start immediately, or it must wait for other computations to finish - * Different computations are overlapped using different CUDA streams - * If a computation requires one or more computations to finish before starting, it will have to wait by using a synchronization point on the right CUDA stream(s) + * Different computations are overlapped using different CUDA streams, assigned by the `GrCUDAStreamManager` based on dependencies and free resources + * Computations on the GPU are asynchronous and are scheduled on streams without explicit synchronization points, as CUDA guarantee that computations are stream-ordered + * Synchronziation between streams happens with CUDA events, without blocking the host CPU thread + * If a computation is done by the CPU (e.g. an array read) we synchronize only the necessary streams, and the host is blocked until the required data is available ## What's already there @@ -25,38 +28,44 @@ The main idea is to **represent GrCUDA computations as vertices of a DAG**, conn 2. `GrCUDAComputationalElement`: abstract class that wraps GrCUDA computations, e.g. kernel executions and array accesses. It provides `GpuExecutionContext` with functions used to compute dependencies or decide if the computation must be done synchronously (e.g. array accesses) 3. `ExecutionDAG`: the DAG representing the dependencies between computations, it is composed of vertices that wrap each `GrCUDAComputationalElement` - 4. `GrCUDAStreamManager`: class that handles the creation and the assignment of streams to kernels + 4. `GrCUDAStreamManager`: class that handles the creation and the assignment of streams to kernels, and the synchronization between different streams or the host thread * **Basic execution flow** 1. The host language (i.e. the user) calls an `InteropLibrary` object that can be associated to a `GrCUDAComputationalElement`, e.g. a kernel execution or an array access 2. A new `GrCUDAComputationalElement` is created and registered to the `GpuExecutionContext`, to represent the computation 3. `GpuExecutionContext` adds the computation to the DAG and computes its dependencies 4. Based on the dependencies, the `GpuExecutionContext` associates a stream to the computation through `GrCUDAStreamManager` 5. `GpuExecutionContext` executes the computation on the chosen stream, performing synchronization if necessary + * GPU computations do not require synchronization w.r.t. previous computations on the stream where they executed, as CUDA guarantees stream-ordered execution. + CUDA streams are synchronized with (asynchronous) CUDA events, without blocking the host. + CPU computations that require a GPU result are synchronized with `cudaStreamSynchronize` only on the necessary streams 6. In case of subsequent array accesses, we skip the scheduling part as accesses are synchronous, and minimize overheads + 7. From the point of view of GrCUDA, asynchronous GPU computations are considered **active** until the CPU requires the result of either them or their children. + Active computations are used in dependency computations (unless all their parameters have been *covered* by children) and to determine which streams are free. * The CUDA stream interface has been added to GrCUDA, and is accessible by the users (not recommended, but possible) * Users can create/destroy streams, and assign streams to kernels + * The CUDA events API is also available * The `cudaStreamAttachMemAsync` is also exposed, to exclusively associate a managed memory array to a given stream. This is used, on Pre-Pascal GPUs, to access arrays on CPU while a kernel is using other arrays on GPU * Most of the new code is unit-tested and integration-tested, and there is a Python benchmarking suite to measure execution time with different settings - * For example, the file `projects/resources/python/benchmark/bench/bench_6` is a fairly complex ML ensemble using multiple GPU kernels on different streams. - Compared to sequential scheduling, we are up to **40% faster**! + * For example, the file `projects/resources/python/benchmark/bench/bench_8` is a fairly complex image processing pipeline that automatically manages up to 4 different streams + Compared to sequential scheduling, we are up to **2.5x faster**! * **Streams** are managed internally by the GrCUDA runtime: we keep track of existing streams that are currently empty, and schedule computations on them in a FIFO order. New streams are created only if no existing stream is available * **Read-only** input arguments can be specified with the `const` keyword; they will be ignored in the dependency computations if possible: for example, if there are 2 kernels that use the same read-only input array, they will be executed concurrently * **Current limitations** - 1. **Dependency computation does not consider disjoint parameter subsets.** + 1. ~~Dependency computation does not consider disjoint parameter subsets.~~ **Now available!** Consider 3 kernels, `K1(X, Y)`, `K2(X)`, `K3(Y)`: `K2` and `K3` are both depending on `K1`, but are using different inputs, and can run in parallel. - Currently, I'm just computing that they both depend on `K1`, but I'm not considering that they have disjoint dependencies. - 2. **Synchronization happens the main execution thread**, this limits parallel execution: + 2. ~~Synchronization happens the main execution thread.~~ **We now support fully asynchronous GPU execution on a single CPU thread thanks to CUDA events** in the example before, calling `K2` requires to sync on the stream used by `K1`, and `K3` starts only after `K2` has started. - If `Y` was read-only in `K1`, this wait would have been unnecessary. - Instead, we can assign computations to different threads, block the thread execution, and start child computations with callbacks. - This was the first approach, but it gave sync errors (probably due to other problems that are now solved) - 3. **Scalar values are not considered for dependencies**: they are read-only when used as input, but there could be output-input depenencies in libraries ([API Design, point 4](#api-design)) + If `Y` was read-only in `K1`, this wait would have been unnecessary + 3. **Scalar values are not considered for dependencies**: they are read-only when used as input, but there could be output-input dependencies in library functions with scalar output ([API Design, point 4](#api-design)) 4. Read-only arguments are visible on the **default stream**, instead of having their visibility limited to the stream where they are used. This makes the arguments visible to kernels running on different streams, but accesses by the CPU to these arguments require full device synchronization. + This limitation is likely to occur only on Pre-Pascal devices, however + 5. **Library functions are not considered for asynchronous execution**: not all library functions expose a stream interface for asynchronous execution, and they are currently ignored by the DAG scheduler. + We need to add, at the very least, a synchronization point before synchronous library functions ## Open questions @@ -85,16 +94,16 @@ The main idea is to **represent GrCUDA computations as vertices of a DAG**, conn ## API Design -Dependencies can be explicitely specified by the user using handles, or we can try inferring dependencies automatically +Dependencies are inferred automatically, instead of being manually specified by the user using handles 1. Automatic dependency inferring is more interesting from a research perspective, and *cleaner* for end-users * One option is to perform synchronization *white-listing*: have explicit sync points after every kernel call, and remove dependencies if possible. - **Pro:** it should be better at guaranteeing correctness. **Cons:** finding if we *do not* have a dependency is more complex that finding if we have one + **Pro:** it should be better for guaranteeing correctness. **Cons:** finding if we *do not* have a dependency is more complex than finding if we have one * The other option is *black-listing*, i.e. do not have any sync point and add them if a dependency is found. - This is the option currently used: it is simpler, faster, and so far I could not find cases where the 2 approaches are not identical + This is the option currently used: it is simpler, faster, and provides identical results to the other approach 2. The API needs ways to modify the scheduling policy, if desired (e.g. go back to fully synchronized execution) * Context startup option? Easy, but cannot be modified * Expose a function in the GrCUDA DSL? More flexibility, but changing options using the DSL is not very clean - 3. How to handle CPU control flow? In GrCUDA we are not aware of `if` and `for` loops on the host side + 3. ~~How to handle CPU control flow? In GrCUDA we are not aware of `if` and `for` loops on the host side~~ * The DAG is built dynamically: we need to update it as we receive scheduling orders, and decide if we can execute or not. We don't care about the original control flow 4. How do we identify if a **parameter is read-only**? If two kernels use the same parameter but only read from it, they can execute in parallel * This is not trivial: LLVM can understand, for example, if a scalar value is read-only, but doing that with an array is not always possible @@ -137,10 +146,8 @@ Library functions (non-kernels) can also be loaded, using `BindFunction` * This loads the function using NFI, and returns a callable object * They can also return scalar values (see [API Design, point 6](#api-design)) -Other stuff? E.g. `map` and `shred`, currently not documented - -Invocation to computational elements are wrapped in classes that extend a generic `GrCUDAComputationalElement`, -which is used to build the vertices of the DAG and exposes interfaces to compute data dependencies with other `GrCUDAComputationalElements` and to schedule the computation +Invocation to computational elements are wrapped in classes that extend a generic `GrCUDAComputationalElement`. +`GrCUDAComputationalElement` is used to build the vertices of the DAG and exposes interfaces to compute data dependencies with other `GrCUDAComputationalElements` and to schedule the computation ## Other notes on GrCUDA architecture diff --git a/README.md b/README.md index 632a07da..ea287f73 100644 --- a/README.md +++ b/README.md @@ -288,8 +288,8 @@ and you can create more benchmarks by inheriting from the `Benchmark` class 3. `-o`, `--output_path`: full path to the file where results are stored. By default results are stored in `data/results`, and the file name is generated automatically 4. `--realloc`: if true, allocate new memory and rebuild the GPU code at each iteration. False by default - 5. `-reinit`: if true, re-initialize the values used in each benchmark at each iteration. True by default - 6. `-c`, `--cpu_validation`: if present, validate the result of each benchmark using the CPU + 5. `--reinit`: if true, re-initialize the values used in each benchmark at each iteration. True by default + 6. `-c`, `--cpu_validation`: if present, validate the result of each benchmark using the CPU (use `--no_cpu_validation` to skip it instead) 7. `-b`, `--benchmark`: run the benchmark only for the specified kernel. Otherwise run all benchmarks specified in `benchmark_main.py` 8. `-n`, `--size`: specify the input size of data used as input for each benchmark. Otherwise use the sizes specified in `benchmark_main.py` 9. `-r`, `--random`: initialize benchmarks randomly whenever possible. True by default From 45c725b7111e0942299fee4d33eca97dce5e44f9 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 9 Jun 2020 09:46:35 +0200 Subject: [PATCH 083/236] updated readme with dag settings --- NOTES.md | 6 +++--- README.md | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/NOTES.md b/NOTES.md index ae0ba999..1b6e9619 100644 --- a/NOTES.md +++ b/NOTES.md @@ -92,7 +92,7 @@ The main idea is to **represent GrCUDA computations as vertices of a DAG**, conn ## Detailed development notes -## API Design +### API Design Dependencies are inferred automatically, instead of being manually specified by the user using handles 1. Automatic dependency inferring is more interesting from a research perspective, and *cleaner* for end-users @@ -124,7 +124,7 @@ Dependencies are inferred automatically, instead of being manually specified by * They can also return scalars (see problem 5) * If we run them on threads, we parallelize at least the CPU side -## What is a computational element in GrCUDA? +### What is a computational element in GrCUDA? `bindkernel`, `buildkernel` functions create a `Kernel` object that contains information about the signature and code * `Kernel` is an executable `InteropLibrary` class that creates a `ConfiguredKernel` that contains information about the number of blocks, shared memory size, etc... @@ -149,7 +149,7 @@ Library functions (non-kernels) can also be loaded, using `BindFunction` Invocation to computational elements are wrapped in classes that extend a generic `GrCUDAComputationalElement`. `GrCUDAComputationalElement` is used to build the vertices of the DAG and exposes interfaces to compute data dependencies with other `GrCUDAComputationalElements` and to schedule the computation -## Other notes on GrCUDA architecture +### Other notes on GrCUDA architecture These notes relate to the structure of the original GrCUDA repository. You can skip them if you are already familiar with it! diff --git a/README.md b/README.md index ea287f73..4a4e8712 100644 --- a/README.md +++ b/README.md @@ -294,5 +294,17 @@ and you can create more benchmarks by inheriting from the `Benchmark` class 8. `-n`, `--size`: specify the input size of data used as input for each benchmark. Otherwise use the sizes specified in `benchmark_main.py` 9. `-r`, `--random`: initialize benchmarks randomly whenever possible. True by default +## DAG Scheduling Settings +The automatic DAG scheduling of GrCUDA supports different settings that can be used for debugging or to simplify the dependency computation in some circumstances + +* `ExecutionPolicy`: this regulates the global scheduling policy; + `default` uses the DAG for asynchronous parallel execution, while `sync` executes each computation synchronously and can be used for debugging or to measure the execution time of each kernel +* `DependencyPolicy`: choose how data dependencies between GrCUDA computations are computed; +`with_const` considers read-only parameter, while `default` assumes that all arguments can be modified in a computation +* `RetrieveNewStreamPolicy`: choose how streams for new GrCUDA computations are created; + `fifo` (the default) reuses free streams whenever possible, while `always_new` creates new streams every time a computation should use a stream different from its parent +* `RetrieveParentStreamPolicy`: choose how streams for new GrCUDA computations are obtained from parent computations; +`default` simply reuse the stream of one of the parent computations, while `disjoint` allows parallel scheduling of multiple child computations as long as their arguments are disjoint + From 8430ec783c22f6851d1d6be6ec1f3ddaadfd2b04 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 9 Jun 2020 10:42:16 +0200 Subject: [PATCH 084/236] adding benchmark results --- RESULTS.md | 126 ++++++++++++++++++ .../python/benchmark/bench/bench_7.py | 6 + 2 files changed, 132 insertions(+) create mode 100644 RESULTS.md diff --git a/RESULTS.md b/RESULTS.md new file mode 100644 index 00000000..6633988c --- /dev/null +++ b/RESULTS.md @@ -0,0 +1,126 @@ +# Benchmark Results + +This document contains some performance results obtained running Graalpython benchmarks in `projects/resources/python/benchmark/bench`. + We compare the performance achieved with DAG scheduling compared to a synchronous GrCUDA execution, and to a native CUDA application when possible. + +## Setup + +* **GPU**: Nvidia GTX 960, 2 GB +* **CPU**: Intel i7-6700 @ 3.40GHz, 8 threads +* **DRAM**: 32 GB, DDR4 +* Execution time measures the total amount of time spent by GPU execution, from the first kernel scheduling until all GPU kernels have finished executing +* Each benchmark is executed for **30 iterations**, and the average time skips the first 3 to allow the performance of GraalVM to stabilize +* The field **Threads** is the number of threads for each block, in CUDA; this number ranges from 32 to 1024. A higher number implies bigger blocks, and possibly less GPU occupation +* The field **Size** is the number of elements in the input. +Depending on the benchmark it could be the size of a vector, the number of rows in a square matrix, the number of vertices of a graph; more information are provided for each benchmark + +## Results + +### Benchmark 1 (bench_1) + +Compute the sum of difference of squares of 2 vectors, using multiple GrCUDA kernels. It's a fairly artificial benchmark that measures a simple case of parallelism. +Most of the execution time is spent in the square computation + +Structure of the computation: + +``` +A: x^2 ──┐ + ├─> C: z=x-y ──> D: sum(z) +B: x^2 ──┘ +``` + +| Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | +|-----|-----|-----|-----|-----| +| 32 | 10000 | | 0.0020 | | +| | 100000 | 0.0037 | 0.0021 | | +| | 1000000 | 0.0089 | 0.0068 | | +| 1024 | 10000 | | | | +| | 100000 | | | | + +### Machine Learning Ensemble (bench_6) + +Compute an ensemble of Categorical Naive Bayes and Ridge Regression classifiers. +Predictions are aggregated averaging the class scores after softmax normalization. +The computation is done on mock data and parameters, but is conceptually identical to a real ML pipeline. +In the DAG below, input arguments that are not involved in the computation of dependencies are omitted. + +The size of the benchmark is the number of rows in the matrix (each representing a document with 1000 features). Predictions are done by choosing among 5 classes. +The Ridge Regression classifier takes about 2x the time of the Categorical Naive Bayes classifier. + +Structure of the computation: + +``` +RR-1: standard normalization +RR-2: matrix multiplication +RR-3: add vector to matrix, row-wise +NB-1: matrix multiplication +NB-2: row-wise maximum +NB-3: log of sum of exponential, row-wise +NB-4: exponential, element-wise + + ┌─> RR-1(const X,Z) ─> RR-2(const Z,R2) ─> RR-3(R2) ─> SOFTMAX(R1) ─────────────┐ +─┤ ├─> ARGMAX(const R1,const R2,R) + └─> NB-1(const X,R1) ─> NB-2(const R1,AMAX) ─> (...) │ + (...) -> NB-3(const R1,const AMAX,L) ─> NB-4(R1,const L) ─> SOFTMAX(R2) ──┘ +``` + +| Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | +|-----|-----|-----|-----|-----| +| 32 | 10000 | | | | +| | 100000 | | | | +| | 1000000 | | | | +| 1024 | 10000 | | | | +| | 100000 | | | | + +### HITS (bench_7) + +Compute the HITS algorithm on a graph. The algorithm is composed of repeated sparse matrix-vector multiplications +on a matrix and its transpose (outgoing and ingoing edges of a graph). The 2 matrix multiplications, +for each iteration, can be computed in parallel, and take most of the total computation time. + +The input graph has **size** vertices, degree 10 and uniform distribution. Each execution of this algorithm is composed of 10 iterations. + +Structure of the computation (read-only parameters that do not influence the DAG are omitted): + +``` + ┌─> SPMV(const H1,A2) ┬─> SUM(const A2,A_norm) ┬─> DIVIDE(A1,const A2,const A_norm) ─> CPU: A_norm=0 ─> (repeat) + │ └─────────┐ │ +─┤ ┌─────────│──────────────┘ + │ │ └──────────────┐ + └─> SPMV(const A1,H2) ┴─> SUM(const H2,H_norm) ┴─> DIVIDE(H1,const H2,const H_norm) ─> CPU: H_norm=0 ─> (repeat) +``` + +| Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | +|-----|-----|-----|-----|-----| +| 32 | 10000 | | | | +| | 100000 | | | | +| | 1000000 | | | | +| 1024 | 10000 | | | | +| | 100000 | | | | + +### Image Processing Pipeline (bench_8) + +Compute an image processing pipeline in which we sharpen an image and combine it +with copies that have been blurred at low and medium frequencies. The result is an image sharper on the edges, +and softer everywhere else: this filter is common, for example, in portrait retouching, where a photographer desires + to enhance the clarity of facial features while smoothing the subject' skin and the background. + +The input is a random square single-channel image with floating-point values between 0 and 1, with side of length **size**. +The execution time is evenly distributed between Blur and Sobel filter kernels, with Sobel filter taking slightly longer time. + +Structure of the computation (read-only parameters that do not influence the DAG are omitted): + +``` +BLUR(image,blur1) ─> SOBEL(blur1,mask1) ───────────────────────────────────────────────────────────────────────────────┐ +BLUR(image,blur2) ─> SOBEL(blur2,mask2) ┬─> MAX(mask2) ──┬─> EXTEND(mask2) ──┐ │ + └─> MIN(mask2) ──┘ │ │ +SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ────────────────────┴─> COMBINE(sharpened,blur2,mask2,image2) ┴─> COMBINE(image2,blur1,mask1,image3) +``` + +| Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | +|-----|-----|-----|-----|-----| +| 32 | 10000 | | | | +| | 100000 | | | | +| | 1000000 | | | | +| 1024 | 10000 | | | | +| | 100000 | | | | \ No newline at end of file diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index 956682b3..44b0bc16 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -68,6 +68,12 @@ class Benchmark7(Benchmark): Compute the HITS algorithm on a graph. The algorithm is composed of repeated sparse matrix-vector multiplications computed on a matrix and its transpose (outgoing and ingoing edges of a graph). The 2 matrix multiplications, for each iteration, can be computed in parallel; + + ┌─> SPMV(const H1,A2) ┬─> SUM(const A2,A_norm) ┬─> DIVIDE(A1,const A2,const A_norm) ─> CPU: A_norm=0 ─> (repeat) + │ └─────────┐ │ + ─┤ ┌─────────│──────────────┘ + │ │ └──────────────┐ + └─> SPMV(const A1,H2) ┴─> SUM(const H2,H_norm) ┴─> DIVIDE(H1,const H2,const H_norm) ─> CPU: H_norm=0 ─> (repeat) """ def __init__(self, benchmark: BenchmarkResult): From 077a435b0548fc3928bbe7cd972cab1e84fe8013 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 9 Jun 2020 13:22:14 +0200 Subject: [PATCH 085/236] added benchmark results --- RESULTS.md | 50 +++++++++++-------- .../python/benchmark/bench/bench_1.py | 2 +- .../python/benchmark/bench/bench_6.py | 2 +- .../python/benchmark/bench/bench_7.py | 2 +- .../python/benchmark/bench/bench_8.py | 15 +++--- 5 files changed, 40 insertions(+), 31 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index 6633988c..0090a42c 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -19,7 +19,7 @@ Depending on the benchmark it could be the size of a vector, the number of rows ### Benchmark 1 (bench_1) Compute the sum of difference of squares of 2 vectors, using multiple GrCUDA kernels. It's a fairly artificial benchmark that measures a simple case of parallelism. -Most of the execution time is spent in the square computation +Most of the execution time is spent in the reduction computation, limiting the amount of parallelism available, especially on large input data. Structure of the computation: @@ -31,11 +31,15 @@ B: x^2 ──┘ | Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | |-----|-----|-----|-----|-----| -| 32 | 10000 | | 0.0020 | | -| | 100000 | 0.0037 | 0.0021 | | -| | 1000000 | 0.0089 | 0.0068 | | -| 1024 | 10000 | | | | -| | 100000 | | | | +| 32 | 100000 | 0.0014 | 0.0018 | 0.77x | +| | 1000000 | 0.0045 | 0.003 | 1.5x | +| | 10000000 | 0.0358 | 0.030 | 1.19x | +| 128 | 100000 | 0.0015 | 0.0018 | 0.83x | +| | 1000000 | 0.0046 | 0.0032 | 1.43x | +| | 10000000 | 0.034 | 0.030 | 1.13x | +| 1024 | 100000 | 0.0012 | 0.0019 | 0.63x | +| | 1000000 | 0.0047 | 0.0037 | 1.27x | +| | 10000000 | 0.0355 | 0.0316 | 1.12x | ### Machine Learning Ensemble (bench_6) @@ -46,6 +50,7 @@ In the DAG below, input arguments that are not involved in the computation of de The size of the benchmark is the number of rows in the matrix (each representing a document with 1000 features). Predictions are done by choosing among 5 classes. The Ridge Regression classifier takes about 2x the time of the Categorical Naive Bayes classifier. +Speedups are especially noticeable for small input size, as for larger data the Ridge-Regression classifiers bottlenecks the overall computation and results in high GPU occupation. Structure of the computation: @@ -66,11 +71,10 @@ NB-4: exponential, element-wise | Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | |-----|-----|-----|-----|-----| -| 32 | 10000 | | | | -| | 100000 | | | | -| | 1000000 | | | | -| 1024 | 10000 | | | | -| | 100000 | | | | +| 32 | 2000 | 0.0295 | 0.0120 | 2.45x | +| | 20000 | 0.2143 | 0.1733 | 1.23x | +| 1024 | 2000 | 0.0412 | 0.0204 | 2.01x | +| | 20000 | 0.3247 | 0.2907 | 1.11x | ### HITS (bench_7) @@ -79,6 +83,8 @@ on a matrix and its transpose (outgoing and ingoing edges of a graph). The 2 mat for each iteration, can be computed in parallel, and take most of the total computation time. The input graph has **size** vertices, degree 10 and uniform distribution. Each execution of this algorithm is composed of 10 iterations. +Kernel computations are very fast, and the speedup increases for larger input graphs: most likely, this is the effect of having 2 SpMV running concurrently, +which makes better use of the available memory bandwidth. Structure of the computation (read-only parameters that do not influence the DAG are omitted): @@ -92,11 +98,10 @@ Structure of the computation (read-only parameters that do not influence the DAG | Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | |-----|-----|-----|-----|-----| -| 32 | 10000 | | | | -| | 100000 | | | | -| | 1000000 | | | | -| 1024 | 10000 | | | | -| | 100000 | | | | +| 32 | 10000 | 0.0101 | 0.0116 | 0.87x | +| | 100000 | 0.0270 | 0.0129 | 2.09x | +| 1024 | 10000 | 0.0107 | 0.0119 | 0.89x | +| | 100000 | 0.0380 | 0.0145 | 2.62x | ### Image Processing Pipeline (bench_8) @@ -106,7 +111,7 @@ and softer everywhere else: this filter is common, for example, in portrait reto to enhance the clarity of facial features while smoothing the subject' skin and the background. The input is a random square single-channel image with floating-point values between 0 and 1, with side of length **size**. -The execution time is evenly distributed between Blur and Sobel filter kernels, with Sobel filter taking slightly longer time. +The execution time is evenly distributed between Blur and Sobel filter kernels, with Sobel filter taking about 2x more time. Structure of the computation (read-only parameters that do not influence the DAG are omitted): @@ -119,8 +124,9 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── | Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | |-----|-----|-----|-----|-----| -| 32 | 10000 | | | | -| | 100000 | | | | -| | 1000000 | | | | -| 1024 | 10000 | | | | -| | 100000 | | | | \ No newline at end of file +| 32 | 500 | 0.0169 | 0.0077 | 2.19x | +| | 1000 | 0.0550 | 0.0424 | 1.29x | +| | 4000 | 0.774 | 0.765 | 1.01x | +| 1024 | 500 | 0.0174 | 0.0077 | 2.25x | +| | 1000 | 0.587 | 0.0421 | 1.39x | +| | 4000 | 0.786 | 0.778 | 1.01x | \ No newline at end of file diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index 54bb7298..28c32852 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -10,7 +10,7 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 128 +NUM_THREADS_PER_BLOCK = 1024 SQUARE_KERNEL = """ extern "C" __global__ void square(const float* x, float* y, int n) { diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index 940454dc..a359ae43 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -10,7 +10,7 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 32 +NUM_THREADS_PER_BLOCK = 1024 NB_KERNEL = """ extern "C" __global__ void nb_1(const int* x, const float* y, float* z, int size, int n_feat, int n_classes) { diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index 44b0bc16..b7265890 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -10,7 +10,7 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 32 +NUM_THREADS_PER_BLOCK = 1024 SPMV_KERNEL = """ extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index 576f9809..44a0480e 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -10,7 +10,8 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 32 +NUM_THREADS_PER_BLOCK_2D = 32 +NUM_THREADS_PER_BLOCK = 1024 GAUSSIAN_BLUR = """ extern "C" __global__ void gaussian_blur(const float *image, float *result, int rows, int cols, const float* kernel, int diameter) { @@ -218,6 +219,7 @@ def __init__(self, benchmark: BenchmarkResult): self.gpu_result = None self.num_blocks_size = 0 + self.num_blocks_size_2d = 0 self.gaussian_blur_kernel = None self.sobel_kernel = None @@ -230,6 +232,7 @@ def __init__(self, benchmark: BenchmarkResult): @time_phase("allocation") def alloc(self, size: int): self.size = size + self.num_blocks_size_2d = (size + NUM_THREADS_PER_BLOCK_2D - 1) // NUM_THREADS_PER_BLOCK_2D self.num_blocks_size = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK self.gpu_result = np.zeros(self.size) @@ -312,34 +315,34 @@ def execute(self) -> object: # Blur - Small; start = time.time() - self.gaussian_blur_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ + self.gaussian_blur_kernel((self.num_blocks_size_2d, self.num_blocks_size_2d), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ (self.image, self.blurred_small, self.size, self.size, self.kernel_small, self.kernel_small_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_small", "time_sec": end - start}) # Blur - Large; start = time.time() - self.gaussian_blur_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ + self.gaussian_blur_kernel((self.num_blocks_size_2d, self.num_blocks_size_2d), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ (self.image, self.blurred_large, self.size, self.size, self.kernel_large, self.kernel_large_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_large", "time_sec": end - start}) # Blur - Unsharpen; start = time.time() - self.gaussian_blur_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ + self.gaussian_blur_kernel((self.num_blocks_size_2d, self.num_blocks_size_2d), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ (self.image, self.blurred_unsharpen, self.size, self.size, self.kernel_unsharpen, self.kernel_unsharpen_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_unsharpen", "time_sec": end - start}) # Sobel filter (edge detection); start = time.time() - self.sobel_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ + self.sobel_kernel((self.num_blocks_size_2d, self.num_blocks_size_2d), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ (self.blurred_small, self.mask_small, self.size, self.size) end = time.time() self.benchmark.add_phase({"name": "sobel_small", "time_sec": end - start}) start = time.time() - self.sobel_kernel((self.num_blocks_size, self.num_blocks_size), (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK))\ + self.sobel_kernel((self.num_blocks_size_2d, self.num_blocks_size_2d), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ (self.blurred_large, self.mask_large, self.size, self.size) end = time.time() self.benchmark.add_phase({"name": "sobel_large", "time_sec": end - start}) From 264a3e23987aca18113eab920136a122df666039 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 11 Jun 2020 11:38:55 +0200 Subject: [PATCH 086/236] updated bench8 with faster kernels --- .../src/com/nvidia/grcuda/gpu/Kernel.java | 3 +- .../python/benchmark/bench/bench_8.py | 218 ++++++++++-------- 2 files changed, 120 insertions(+), 101 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index 7d220520..802bbe28 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -343,7 +343,7 @@ Object execute(Object[] arguments, @CachedLibrary(limit = "3") InteropLibrary blockSizeAccess, @CachedLibrary(limit = "3") InteropLibrary blockSizeElementAccess, @CachedLibrary(limit = "3") InteropLibrary sharedMemoryAccess) throws UnsupportedTypeException, ArityException { - // FIXME: ArityException allows to specify only 1 arity, and cannot be sublassed! We might want to use a custom exception here; + // FIXME: ArityException allows to specify only 1 arity, and cannot be subclassed! We might want to use a custom exception here; if (arguments.length < 2 || arguments.length > 4) { CompilerDirectives.transferToInterpreter(); throw ArityException.create(2, arguments.length); @@ -365,7 +365,6 @@ Object execute(Object[] arguments, // Stream specified; configBuilder.stream(extractStream(arguments[3])); } - return new ConfiguredKernel(this, configBuilder.build()); } } diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index 44a0480e..e2078993 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -10,63 +10,98 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK_2D = 32 -NUM_THREADS_PER_BLOCK = 1024 +NUM_THREADS_PER_BLOCK_2D = 8 +NUM_THREADS_PER_BLOCK = 256 +WARP_SIZE = 32 GAUSSIAN_BLUR = """ extern "C" __global__ void gaussian_blur(const float *image, float *result, int rows, int cols, const float* kernel, int diameter) { - int i = blockDim.x * blockIdx.x + threadIdx.x; - int j = blockDim.y * blockIdx.y + threadIdx.y; - if (i < rows && j < cols) { - float sum = 0; - int radius = diameter / 2; - for (int x = -radius; x <= radius; ++x) { - for (int y = -radius; y <= radius; ++y) { - int nx = x + i; - int ny = y + j; - if (nx >= 0 && ny >= 0 && nx < rows && ny < cols) { - sum += kernel[(x + radius) * diameter + (y + radius)] * image[nx * cols + ny]; + extern __shared__ float kernel_local[]; + for(int i = threadIdx.x; i < diameter; i += blockDim.x) { + for(int j = threadIdx.y; j < diameter; j += blockDim.y) { + kernel_local[i * diameter + j] = kernel[i * diameter + j]; + } + } + __syncthreads(); + + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < rows; i += blockDim.x * gridDim.x) { + for(int j = blockIdx.y * blockDim.y + threadIdx.y; j < cols; j += blockDim.y * gridDim.y) { + float sum = 0; + int radius = diameter / 2; + for (int x = -radius; x <= radius; ++x) { + for (int y = -radius; y <= radius; ++y) { + int nx = x + i; + int ny = y + j; + if (nx >= 0 && ny >= 0 && nx < rows && ny < cols) { + sum += kernel_local[(x + radius) * diameter + (y + radius)] * image[nx * cols + ny]; + } } } + result[i * cols + j] = sum; } - result[i * cols + j] = sum; } } """ SOBEL = """ + extern "C" __global__ void sobel(const float *image, float *result, int rows, int cols) { - float SOBEL_X[3][3] = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}}; - float SOBEL_Y[3][3] = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}}; + // int SOBEL_X[3][3] = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}}; + // int SOBEL_Y[3][3] = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}}; + __shared__ int SOBEL_X[9]; + __shared__ int SOBEL_Y[9]; + if (threadIdx.x == 0 && threadIdx.y == 0) { + SOBEL_X[0] = -1; + SOBEL_X[1] = -2; + SOBEL_X[2] = -1; + SOBEL_X[3] = 0; + SOBEL_X[4] = 0; + SOBEL_X[5] = 0; + SOBEL_X[6] = 1; + SOBEL_X[7] = 2; + SOBEL_X[8] = 1; + + SOBEL_Y[0] = -1; + SOBEL_Y[1] = 0; + SOBEL_Y[2] = 1; + SOBEL_Y[3] = -2; + SOBEL_Y[4] = 0; + SOBEL_Y[5] = 2; + SOBEL_Y[6] = -1; + SOBEL_Y[7] = 0; + SOBEL_Y[8] = 1; + } + __syncthreads(); - int i = blockDim.x * blockIdx.x + threadIdx.x; - int j = blockDim.y * blockIdx.y + threadIdx.y; - if (i < rows && j < cols) { - float sum_gradient_x = 0.0, sum_gradient_y = 0.0; - int radius = 1; - for (int x = -radius; x <= radius; ++x) { - for (int y = -radius; y <= radius; ++y) { - int nx = x + i; - int ny = y + j; - if (nx >= 0 && ny >= 0 && nx < rows && ny < cols) { - float neighbour = image[nx * cols + ny]; - sum_gradient_x += SOBEL_X[x+ radius][y + radius] * neighbour; - sum_gradient_y += SOBEL_Y[x+ radius][y + radius] * neighbour; + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < rows; i += blockDim.x * gridDim.x) { + for(int j = blockIdx.y * blockDim.y + threadIdx.y; j < cols; j += blockDim.y * gridDim.y) { + float sum_gradient_x = 0.0, sum_gradient_y = 0.0; + int radius = 1; + for (int x = -radius; x <= radius; ++x) { + for (int y = -radius; y <= radius; ++y) { + int nx = x + i; + int ny = y + j; + if (nx >= 0 && ny >= 0 && nx < rows && ny < cols) { + float neighbour = image[nx * cols + ny]; + int s = (x + radius) * 3 + y + radius; + sum_gradient_x += SOBEL_X[s] * neighbour; + sum_gradient_y += SOBEL_Y[s] * neighbour; + } } } + result[i * cols + j] = sqrt(sum_gradient_x * sum_gradient_x + sum_gradient_y * sum_gradient_y); } - result[i * cols + j] = sqrt(sum_gradient_x * sum_gradient_x + sum_gradient_y * sum_gradient_y); } } """ EXTEND_MASK = """ -__device__ float atomicMaxf(float* address, float val) +__device__ float atomicMinf(float* address, float val) { int *address_as_int =(int*)address; int old = *address_as_int, assumed; - while (val > __int_as_float(old)) { + while (val < __int_as_float(old)) { assumed = old; old = atomicCAS(address_as_int, assumed, __float_as_int(val)); @@ -74,79 +109,65 @@ return __int_as_float(old); } -__device__ float atomicMinf(float* address, float val) +__device__ float atomicMaxf(float* address, float val) { - int *address_as_int =(int*)address; + int *address_as_int = (int*) address; int old = *address_as_int, assumed; - while (val < __int_as_float(old)) { + // If val is smaller than current, don't do anything, else update the current value atomically; + while (val > __int_as_float(old)) { assumed = old; - old = atomicCAS(address_as_int, assumed, - __float_as_int(val)); - } + old = atomicCAS(address_as_int, assumed, __float_as_int(val)); + } return __int_as_float(old); } -extern "C" __global__ void maximum(const float *x, float *res, int n) { - extern __shared__ float shared[%d]; +__inline__ __device__ float warp_reduce_max(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val = max(val, __shfl_down_sync(0xFFFFFFFF, val, offset)); + return val; +} - int tid = threadIdx.x; - int gid = (blockDim.x * blockIdx.x) + tid; - shared[tid] = -1000; // Some small value; +__inline__ __device__ float warp_reduce_min(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val = min(val, __shfl_down_sync(0xFFFFFFFF, val, offset)); + return val; +} - while (gid < n) { - shared[tid] = max(shared[tid], x[gid]); - gid += gridDim.x*blockDim.x; - } - __syncthreads(); - gid = (blockDim.x * blockIdx.x) + tid; // 1 - for (unsigned int s=blockDim.x/2; s>0; s>>=1) - { - if (tid < s && gid < n) - shared[tid] = max(shared[tid], shared[tid + s]); - __syncthreads(); +__global__ void maximum(const float *in, float* out, int N) { + int warp_size = 32; + float maximum = -1000; + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + maximum = max(maximum, in[i]); } - - if (tid == 0) - atomicMaxf(res, shared[0]); + maximum = warp_reduce_max(maximum); // Obtain the max of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicMaxf(out, maximum); // The first thread in the warp updates the output; } - -extern "C" __global__ void minimum(const float *x, float *res, int n) { - extern __shared__ float shared[%d]; - int tid = threadIdx.x; - int gid = (blockDim.x * blockIdx.x) + tid; - shared[tid] = 1000; // Some big value; - - while (gid < n) { - shared[tid] = min(shared[tid], x[gid]); - gid += gridDim.x*blockDim.x; - } - __syncthreads(); - gid = (blockDim.x * blockIdx.x) + tid; // 1 - for (unsigned int s=blockDim.x/2; s>0; s>>=1) - { - if (tid < s && gid < n) - shared[tid] = min(shared[tid], shared[tid + s]); - __syncthreads(); +__global__ void minimum(const float *in, float* out, int N) { + int warp_size = 32; + float minimum = 1000; + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + minimum = min(minimum, in[i]); } - - if (tid == 0) - atomicMinf(res, shared[0]); + minimum = warp_reduce_min(minimum); // Obtain the min of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicMinf(out, minimum); // The first thread in the warp updates the output; } extern "C" __global__ void extend(float *x, const float *minimum, const float *maximum, int n) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { float res_tmp = 5 * (x[i] - *minimum) / (*maximum - *minimum); x[i] = res_tmp > 1 ? 1 : res_tmp; } } -""" % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) +""" UNSHARPEN = """ extern "C" __global__ void unsharpen(const float *x, const float *y, float *res, float amount, int n) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { float res_tmp = x[i] * (1 + amount) - y[i] * amount; res_tmp = res_tmp > 1 ? 1 : res_tmp; res[i] = res_tmp < 0 ? 0 : res_tmp; @@ -156,8 +177,7 @@ COMBINE = """ extern "C" __global__ void combine(const float *x, const float *y, const float *mask, float *res, int n) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { res[i] = x[i] * mask[i] + y[i] * (1 - mask[i]); } } @@ -199,7 +219,7 @@ def __init__(self, benchmark: BenchmarkResult): self.mask_large = None self.kernel_large = None self.kernel_large_diameter = 5 - self.kernel_large_variance = 10 + self.kernel_large_variance = 9 self.maximum = None self.minimum = None @@ -220,6 +240,7 @@ def __init__(self, benchmark: BenchmarkResult): self.num_blocks_size = 0 self.num_blocks_size_2d = 0 + self.num_blocks_per_processor = 64 # i.e. 8 * number of SM on the GTX960 self.gaussian_blur_kernel = None self.sobel_kernel = None @@ -315,66 +336,65 @@ def execute(self) -> object: # Blur - Small; start = time.time() - self.gaussian_blur_kernel((self.num_blocks_size_2d, self.num_blocks_size_2d), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ + self.gaussian_blur_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_small_diameter**2)\ (self.image, self.blurred_small, self.size, self.size, self.kernel_small, self.kernel_small_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_small", "time_sec": end - start}) # Blur - Large; start = time.time() - self.gaussian_blur_kernel((self.num_blocks_size_2d, self.num_blocks_size_2d), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ + self.gaussian_blur_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_large_diameter**2)\ (self.image, self.blurred_large, self.size, self.size, self.kernel_large, self.kernel_large_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_large", "time_sec": end - start}) # Blur - Unsharpen; start = time.time() - self.gaussian_blur_kernel((self.num_blocks_size_2d, self.num_blocks_size_2d), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ + self.gaussian_blur_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_unsharpen_diameter**2)\ (self.image, self.blurred_unsharpen, self.size, self.size, self.kernel_unsharpen, self.kernel_unsharpen_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_unsharpen", "time_sec": end - start}) # Sobel filter (edge detection); start = time.time() - self.sobel_kernel((self.num_blocks_size_2d, self.num_blocks_size_2d), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ + self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ (self.blurred_small, self.mask_small, self.size, self.size) end = time.time() self.benchmark.add_phase({"name": "sobel_small", "time_sec": end - start}) start = time.time() - self.sobel_kernel((self.num_blocks_size_2d, self.num_blocks_size_2d), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ + self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ (self.blurred_large, self.mask_large, self.size, self.size) end = time.time() self.benchmark.add_phase({"name": "sobel_large", "time_sec": end - start}) # Extend large edge detection mask; start = time.time() - num_blocks_tmp = (self.size * self.size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK - self.maximum_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)(self.mask_large, self.maximum, self.size**2) - self.minimum_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)(self.mask_large, self.minimum, self.size**2) - self.extend_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)(self.mask_large, self.minimum, self.maximum, self.size**2) + self.maximum_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)(self.mask_large, self.maximum, self.size**2) + self.minimum_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)(self.mask_large, self.minimum, self.size**2) + self.extend_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)(self.mask_large, self.minimum, self.maximum, self.size**2) end = time.time() self.benchmark.add_phase({"name": "extend", "time_sec": end - start}) # Unsharpen; start = time.time() - self.unsharpen_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)\ + self.unsharpen_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)\ (self.image, self.blurred_unsharpen, self.image_unsharpen, self.unsharpen_amount, self.size * self.size) end = time.time() self.benchmark.add_phase({"name": "unsharpen", "time_sec": end - start}) # Combine results; start = time.time() - self.combine_mask_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)\ + self.combine_mask_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)\ (self.image_unsharpen, self.blurred_large, self.mask_large, self.image2, self.size * self.size) - self.combine_mask_kernel(num_blocks_tmp, NUM_THREADS_PER_BLOCK)\ + self.combine_mask_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)\ (self.image2, self.blurred_small, self.mask_small, self.image3, self.size * self.size) end = time.time() self.benchmark.add_phase({"name": "combine", "time_sec": end - start}) # Add a final sync step to measure the real computation time; start = time.time() - tmp = self.image3[0][0] + # tmp = self.image3[0][0] end = time.time() self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) From 13c72be59acef46d4c73e479b14d1fdc669194de Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 16 Jun 2020 15:15:50 +0200 Subject: [PATCH 087/236] updated benchmarks to use grid-stride --- RESULTS.md | 28 ++-- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 2 +- .../python/benchmark/bench/bench_1.py | 52 +++---- .../python/benchmark/bench/bench_6.py | 37 ++--- .../python/benchmark/bench/bench_7.py | 139 +++++++++++------- .../python/benchmark/bench/bench_8.py | 13 +- 6 files changed, 147 insertions(+), 124 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index 0090a42c..1e7fc817 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -10,11 +10,16 @@ This document contains some performance results obtained running Graalpython ben * **DRAM**: 32 GB, DDR4 * Execution time measures the total amount of time spent by GPU execution, from the first kernel scheduling until all GPU kernels have finished executing * Each benchmark is executed for **30 iterations**, and the average time skips the first 3 to allow the performance of GraalVM to stabilize + +## Results + +* **Sync time** is the baseline, it measures synchronous GPU kernel scheduling. In this case, dependencies between kernels are not computed, making GrCUDA overheads even smaller. +* **DAG** is the computation time when using GrCUDA DAG kernel scheduling, performing transparent GPU resource-sharing. + * The field **Threads** is the number of threads for each block, in CUDA; this number ranges from 32 to 1024. A higher number implies bigger blocks, and possibly less GPU occupation * The field **Size** is the number of elements in the input. Depending on the benchmark it could be the size of a vector, the number of rows in a square matrix, the number of vertices of a graph; more information are provided for each benchmark -## Results ### Benchmark 1 (bench_1) @@ -84,7 +89,9 @@ for each iteration, can be computed in parallel, and take most of the total comp The input graph has **size** vertices, degree 10 and uniform distribution. Each execution of this algorithm is composed of 10 iterations. Kernel computations are very fast, and the speedup increases for larger input graphs: most likely, this is the effect of having 2 SpMV running concurrently, -which makes better use of the available memory bandwidth. +which makes better use of the available memory bandwidth. The number of blocks is kept constant at 32, as higher block count resulted in worse overall performance. + +As the benchmark is composed of 2 independent branches, the **maximum theoretical speedup is 2x**. Structure of the computation (read-only parameters that do not influence the DAG are omitted): @@ -96,12 +103,15 @@ Structure of the computation (read-only parameters that do not influence the DAG └─> SPMV(const A1,H2) ┴─> SUM(const H2,H_norm) ┴─> DIVIDE(H1,const H2,const H_norm) ─> CPU: H_norm=0 ─> (repeat) ``` -| Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | -|-----|-----|-----|-----|-----| -| 32 | 10000 | 0.0101 | 0.0116 | 0.87x | -| | 100000 | 0.0270 | 0.0129 | 2.09x | -| 1024 | 10000 | 0.0107 | 0.0119 | 0.89x | -| | 100000 | 0.0380 | 0.0145 | 2.62x | + +| Threads | Vertices | Degree | Sync time (s) | DAG (s) | DAG Speedup | +|-----|-----|-----|-----|-----|-----| +| 32 | 100000 | 10 | 0.020 | 0.011 | 1.81x | +| | | 100 | 0.088| 0.042 | 2.09x | +| | 1000000 | 10 | 0.224 | 0.196 | 1.14x | +| 1024 | 100000 | 10 | 0.016 | 0.012 | 1.33x | +| | | 100 | 0.191 | 0.174 | 1.09x | +| | 1000000 | 10 | 0.232 | 0.212 | 1.09x | ### Image Processing Pipeline (bench_8) @@ -129,4 +139,4 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── | | 4000 | 0.774 | 0.765 | 1.01x | | 1024 | 500 | 0.0174 | 0.0077 | 2.25x | | | 1000 | 0.587 | 0.0421 | 1.39x | -| | 4000 | 0.786 | 0.778 | 1.01x | \ No newline at end of file +| | 4000 | 0.786 | 0.778 | 1.01x | diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index bb47560e..228ffcfc 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -909,7 +909,7 @@ public Kernel loadKernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, @TruffleBoundary public Kernel buildKernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, String code, String kernelName, String signature) { String moduleName = "truffle" + context.getNextModuleId(); - PTXKernel ptx = nvrtc.compileKernel(code, kernelName, moduleName, "--std=c++14", "-G", "-lineinfo"); + PTXKernel ptx = nvrtc.compileKernel(code, kernelName, moduleName, "--std=c++14"); CUModule module = null; try { module = cuModuleLoadData(ptx.getPtxSource(), moduleName); diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index 28c32852..35f8f1ab 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -10,25 +10,23 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 1024 +NUM_THREADS_PER_BLOCK = 256 SQUARE_KERNEL = """ - extern "C" __global__ void square(const float* x, float* y, int n) { - int idx = blockIdx.x * blockDim.x + threadIdx.x; - if (idx < n) { - y[idx] = x[idx] * x[idx]; - } +extern "C" __global__ void square(const float* x, float* y, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = x[i] * x[i]; } - """ +} +""" DIFF_KERNEL = """ - extern "C" __global__ void diff(const float* x, const float* y, float* z, int n) { - int idx = blockIdx.x * blockDim.x + threadIdx.x; - if (idx < n) { - z[idx] = x[idx] - y[idx]; - } +extern "C" __global__ void diff(const float* x, const float* y, float* z, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + z[i] = x[i] - y[i]; } - """ +} +""" REDUCE_KERNEL = """ @@ -41,15 +39,15 @@ return val; } -__global__ void reduce(const float *in, float* out, int N) { +__global__ void reduce(const float *x, const float *y, float* z, int N) { int warp_size = 32; float sum = float(0); for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { - sum += in[i]; + sum += x[i] - y[i]; } sum = warp_reduce(sum); // Obtain the sum of values in the current warp; if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster - atomicAdd(out, sum); // The first thread in the warp updates the output; + atomicAdd(z, sum); // The first thread in the warp updates the output; } """ @@ -62,7 +60,7 @@ class Benchmark1(Benchmark): Compute the sum of difference of squares of 2 vectors, using multiple GrCUDA kernels. Structure of the computation: A: x^2 ──┐ - ├─> C: z=x-y ──> D: sum(z) + ├─> C: z=sum(x-y) B: x^2 ──┘ """ @@ -75,16 +73,16 @@ def __init__(self, benchmark: BenchmarkResult): self.y1 = None self.z = None self.res = None - self.num_blocks = 0 self.square_kernel = None self.diff_kernel = None self.reduce_kernel = None self.cpu_result = 0 + self.num_blocks = 64 + @time_phase("allocation") def alloc(self, size: int): self.size = size - self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK # Allocate 2 vectors; self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") @@ -93,14 +91,12 @@ def alloc(self, size: int): self.y1 = polyglot.eval(language="grcuda", string=f"float[{size}]") # Allocate a support vector; - self.z = polyglot.eval(language="grcuda", string=f"float[{size}]") self.res = polyglot.eval(language="grcuda", string=f"float[1]") # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") self.square_kernel = build_kernel(SQUARE_KERNEL, "square", "const pointer, pointer, sint32") - self.diff_kernel = build_kernel(DIFF_KERNEL, "diff", "const pointer, const pointer, pointer, sint32") - self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "const pointer, pointer, sint32") + self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "const pointer, const pointer, pointer, sint32") @time_phase("initialization") def init(self): @@ -120,22 +116,16 @@ def reset_result(self) -> None: def execute(self) -> object: - # Call the kernel. The 2 computations are independent, and can be done in parallel; + # A, B. Call the kernel. The 2 computations are independent, and can be done in parallel; start = time.time() self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.x1, self.size) self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.y1, self.size) end = time.time() self.benchmark.add_phase({"name": "square", "time_sec": end - start}) - # C. Compute the difference of the 2 vectors. This must be done after the 2 previous computations; - start = time.time() - self.diff_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x1, self.y1, self.z, self.size) - end = time.time() - self.benchmark.add_phase({"name": "diff", "time_sec": end - start}) - - # D. Compute the sum of the result; + # C. Compute the sum of the result; start = time.time() - self.reduce_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.z, self.res, self.size) + self.reduce_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x1, self.y1, self.res, self.size) end = time.time() self.benchmark.add_phase({"name": "reduce", "time_sec": end - start}) diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index a359ae43..be98ac6a 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -14,8 +14,7 @@ NB_KERNEL = """ extern "C" __global__ void nb_1(const int* x, const float* y, float* z, int size, int n_feat, int n_classes) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < size) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) { for (int j = 0; j < n_classes; j++) { for (int q = 0; q < n_feat; q++) { z[i * n_classes + j] += x[i * n_feat + q] * y[j * n_feat + q]; @@ -25,8 +24,7 @@ } extern "C" __global__ void nb_2(const float* x, float* y, int n_row_x, int n_col_x) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n_row_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { float curr_max = x[i * n_col_x]; for (int j = 0; j < n_col_x; j++) { curr_max = fmaxf(curr_max, x[i * n_col_x + j]); @@ -36,9 +34,8 @@ } extern "C" __global__ void nb_3(const float* x, const float* y, float* z, int n_row_x, int n_col_x) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - float sum = 0; - if (i < n_row_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + float sum = 0; for (int j = 0; j < n_col_x; j++) { sum += expf(x[i * n_col_x + j] - y[i]); } @@ -47,8 +44,7 @@ } extern "C" __global__ void nb_4(float* x, float* y, int n_row_x, int n_col_x) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n_row_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { for (int j = 0; j < n_col_x; j++) { x[i * n_col_x + j] = expf(x[i * n_col_x + j] - y[i]); } @@ -58,8 +54,7 @@ RR_KERNEL = """ extern "C" __global__ void rr_1(const int* x, float *y, int n_row_x, int n_col_x) { - int j = blockIdx.x * blockDim.x + threadIdx.x; - if (j < n_col_x) { + for(int j = blockIdx.x * blockDim.x + threadIdx.x; j < n_col_x; j += blockDim.x * gridDim.x) { float feature_mean = 0; float sum_sq = 0; // Compute mean and variance; @@ -78,8 +73,7 @@ } extern "C" __global__ void rr_2(const float* x, const float* y, float* z, int size, int n_feat, int n_classes) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < size) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) { for (int j = 0; j < n_classes; j++) { for (int q = 0; q < n_feat; q++) { z[i * n_classes + j] += x[i * n_feat + q] * y[j * n_feat + q]; @@ -89,8 +83,7 @@ } extern "C" __global__ void rr_3(float* x, const float *y, int n_row_x, int n_col_x) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n_row_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { for (int j = 0; j < n_col_x; j++) { x[i * n_col_x + j] += y[j]; } @@ -100,8 +93,7 @@ ENSEMBLE_KERNEL = """ extern "C" __global__ void softmax(float *x, int n_row_x, int n_col_x) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n_row_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { float row_exp_sum = 0; for (int j = 0; j < n_col_x; j++) { row_exp_sum += expf( x[i * n_col_x + j]); @@ -113,8 +105,7 @@ } extern "C" __global__ void argmax(const float *x, const float *y, int *z, int n_row_x, int n_col_x) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n_row_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { int curr_best_index = 0; float curr_best = x[i * n_col_x] + y[i * n_col_x]; for (int j = 0; j < n_col_x; j++) { @@ -189,11 +180,11 @@ def __init__(self, benchmark: BenchmarkResult): self.nb_amax = None self.nb_l = None - self.num_features = 1000 # self.nb_feat_log_prob_np.shape[1] - self.num_classes = 5 # self.nb_feat_log_prob_np.shape[0] + self.num_features = 2000 # self.nb_feat_log_prob_np.shape[1] + self.num_classes = 10 # self.nb_feat_log_prob_np.shape[0] - self.num_blocks_size = 0 - self.num_blocks_feat = (self.num_features + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + self.num_blocks_size = 64 + self.num_blocks_feat = 32 @time_phase("allocation") def alloc(self, size: int): diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index b7265890..29bfde56 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -10,54 +10,48 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 1024 +NUM_THREADS_PER_BLOCK = 32 SPMV_KERNEL = """ - extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { - - int n = blockIdx.x * blockDim.x + threadIdx.x; - if (n < num_rows) { - float sum = 0; - for (int i = ptr[n]; i < ptr[n + 1]; i++) { - sum += val[i] * vec[idx[i]]; - } - res[n] = sum; +extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { + + for(int n = blockIdx.x * blockDim.x + threadIdx.x; n < num_rows; n += blockDim.x * gridDim.x) { + float sum = 0; + for (int i = ptr[n]; i < ptr[n + 1]; i++) { + sum += val[i] * vec[idx[i]]; } + res[n] = sum; } - """ +} +""" SUM_KERNEL = """ - extern "C" __global__ void sum(const float *x, float *res, int n) { - __shared__ float cache[%d]; - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n) { - cache[threadIdx.x] = x[i]; - } - __syncthreads(); - - // Perform tree reduction; - i = %d / 2; - while (i > 0) { - if (threadIdx.x < i) { - cache[threadIdx.x] += cache[threadIdx.x + i]; - } - __syncthreads(); - i /= 2; - } - if (threadIdx.x == 0) { - atomicAdd(res, cache[0]); - } +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +extern "C" __global__ void sum(const float *x, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i]; } - """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} +""" DIVIDE_KERNEL = """ - extern "C" __global__ void divide(const float* x, float *y, float *val, int n) { - int idx = blockIdx.x * blockDim.x + threadIdx.x; - if (idx < n) { - y[idx] = x[idx] / val[0]; - } +extern "C" __global__ void divide(const float* x, float *y, float *val, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = x[i] / val[0]; } - """ +} +""" ############################## ############################## @@ -105,7 +99,7 @@ def __init__(self, benchmark: BenchmarkResult): self.cpu_result = None self.gpu_result = None - self.num_blocks_size = 0 + self.num_blocks_size = 32 self.spmv_kernel = None self.sum_kernel = None @@ -115,7 +109,6 @@ def __init__(self, benchmark: BenchmarkResult): def alloc(self, size: int): self.size = size self.num_nnz = size * self.max_degree - self.num_blocks_size = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK self.gpu_result = np.zeros(self.size) @@ -144,32 +137,67 @@ def alloc(self, size: int): @time_phase("initialization") def init(self): - def create_csr_from_coo(x_in, y_in, val_in): - ptr_out = np.zeros(max(np.max(x_in), np.max(y_in)) + 2, dtype=int) - for x_curr in x_in: - ptr_out[x_curr + 1] += 1 - ptr_out = np.cumsum(ptr_out) + def create_csr_from_coo(x_in, y_in, val_in, size, degree=None): + start = time.time() + ptr_out = np.zeros(size + 1, dtype=np.int32) + end = time.time() + print("\tinit zeros=", end - start, "sec") + start = time.time() + + if degree: + ptr_out[1:] = degree + else: + values, count = np.unique(x_in, return_counts=True) + for v, c in zip(values, count): + ptr_out[v + 1] = c + + end = time.time() + print("\tinit ptr=", end - start, "sec") + start = time.time() + ptr_out = np.cumsum(ptr_out, dtype=np.int32) + end = time.time() + print("\tinit cumsum=", end - start, "sec") return ptr_out, y_in, val_in self.random_seed = randint(0, 10000000) seed(self.random_seed) # Create a random COO graph; - x = [] - y = [] - val = [] + start = time.time() + x = [0] * self.size * self.max_degree + y = [0] * self.size * self.max_degree + val = [1] * self.size * self.max_degree for i in range(self.size): # Create max_degree random edges; edges = sorted(sample(range(self.size), self.max_degree)) - for j in edges: - x += [i] - y += [j] - val += [1] + for j, e in enumerate(edges): + x[i * self.max_degree + j] = i + y[i * self.max_degree + j] = e + end = time.time() + print("init coo=", end - start, "sec") # Turn the COO into CSR and CSC representations; - self.ptr_cpu, self.idx_cpu, self.val_cpu = create_csr_from_coo(x, y, val) + start = time.time() + self.ptr_cpu, self.idx_cpu, self.val_cpu = create_csr_from_coo(x, y, val, self.size, degree=self.max_degree) + end = time.time() + print("init csr=", end - start, "sec") + start = time.time() x2, y2 = zip(*sorted(zip(y, x))) - self.ptr2_cpu, self.idx2_cpu, self.val2_cpu = create_csr_from_coo(x2, y2, val) + end = time.time() + print("init sort=", end - start, "sec") + start = time.time() + self.ptr2_cpu, self.idx2_cpu, self.val2_cpu = create_csr_from_coo(x2, y2, val, self.size) + end = time.time() + print("init csr2=", end - start, "sec") + + start = time.time() + # Low-level copies from numpy array, they are faster but require slow casting to numpy arrays; + # self.ptr.copyFrom(int(np.int64(self.ptr_cpu.ctypes.data)), len(self.ptr)) + # self.ptr2.copyFrom(int(np.int64(self.ptr2_cpu.ctypes.data)), len(self.ptr2)) + # self.idx.copyFrom(int(np.int64(self.idx_cpu.ctypes.data)), len(self.idx)) + # self.idx2.copyFrom(int(np.int64(self.idx2_cpu.ctypes.data)), len(self.idx2)) + # self.val.copyFrom(int(np.int64(self.val_cpu.ctypes.data)), len(self.val)) + # self.val2.copyFrom(int(np.int64(self.val2_cpu.ctypes.data)), len(self.val2)) for i in range(len(self.ptr_cpu)): self.ptr[i] = int(self.ptr_cpu[i]) self.ptr2[i] = int(self.ptr2_cpu[i]) @@ -179,6 +207,9 @@ def create_csr_from_coo(x_in, y_in, val_in): self.val[i] = int(self.val_cpu[i]) self.val2[i] = int(self.val2_cpu[i]) + end = time.time() + print("init copy=", end - start, "sec") + @time_phase("reset_result") def reset_result(self) -> None: for i in range(self.size): diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index e2078993..972ee707 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -219,14 +219,14 @@ def __init__(self, benchmark: BenchmarkResult): self.mask_large = None self.kernel_large = None self.kernel_large_diameter = 5 - self.kernel_large_variance = 9 + self.kernel_large_variance = 10 self.maximum = None self.minimum = None self.blurred_unsharpen = None self.image_unsharpen = None self.kernel_unsharpen = None - self.kernel_unsharpen_diameter = 3 + self.kernel_unsharpen_diameter = 5 self.kernel_unsharpen_variance = 5 self.unsharpen_amount = 0.5 @@ -336,21 +336,22 @@ def execute(self) -> object: # Blur - Small; start = time.time() - self.gaussian_blur_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_small_diameter**2)\ + a = 32 + self.gaussian_blur_kernel((a, a), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_small_diameter**2)\ (self.image, self.blurred_small, self.size, self.size, self.kernel_small, self.kernel_small_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_small", "time_sec": end - start}) # Blur - Large; start = time.time() - self.gaussian_blur_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_large_diameter**2)\ + self.gaussian_blur_kernel((a, a), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_large_diameter**2)\ (self.image, self.blurred_large, self.size, self.size, self.kernel_large, self.kernel_large_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_large", "time_sec": end - start}) # Blur - Unsharpen; start = time.time() - self.gaussian_blur_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_unsharpen_diameter**2)\ + self.gaussian_blur_kernel((a, a), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_unsharpen_diameter**2)\ (self.image, self.blurred_unsharpen, self.size, self.size, self.kernel_unsharpen, self.kernel_unsharpen_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_unsharpen", "time_sec": end - start}) @@ -394,7 +395,7 @@ def execute(self) -> object: # Add a final sync step to measure the real computation time; start = time.time() - # tmp = self.image3[0][0] + tmp = self.image3[0][0] end = time.time() self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) From 8e63eb264ad4d7b203a7d87099b6d73585384542 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 16 Jun 2020 18:17:21 +0200 Subject: [PATCH 088/236] updated benchmark results --- RESULTS.md | 25 +++--- .../python/benchmark/bench/bench_1.py | 2 +- .../python/benchmark/bench/bench_6.py | 87 +++++++++---------- 3 files changed, 53 insertions(+), 61 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index 1e7fc817..9d59002c 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -30,21 +30,16 @@ Structure of the computation: ``` A: x^2 ──┐ - ├─> C: z=x-y ──> D: sum(z) + ├─> C: z=sum(x-y) B: x^2 ──┘ ``` | Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | |-----|-----|-----|-----|-----| -| 32 | 100000 | 0.0014 | 0.0018 | 0.77x | -| | 1000000 | 0.0045 | 0.003 | 1.5x | -| | 10000000 | 0.0358 | 0.030 | 1.19x | -| 128 | 100000 | 0.0015 | 0.0018 | 0.83x | -| | 1000000 | 0.0046 | 0.0032 | 1.43x | -| | 10000000 | 0.034 | 0.030 | 1.13x | -| 1024 | 100000 | 0.0012 | 0.0019 | 0.63x | -| | 1000000 | 0.0047 | 0.0037 | 1.27x | -| | 10000000 | 0.0355 | 0.0316 | 1.12x | +| 32 | 2000000 | 0.0020 | 0.0016 | 1.25x | +| | 20000000 | 0.0125 | 0.0063 | 1.98x | +| 1024 | 2000000 | 0.0013 | 0.0013 | 1x | +| | 20000000 | 0.0074 | 0.0037 | 2x | ### Machine Learning Ensemble (bench_6) @@ -76,10 +71,10 @@ NB-4: exponential, element-wise | Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | |-----|-----|-----|-----|-----| -| 32 | 2000 | 0.0295 | 0.0120 | 2.45x | -| | 20000 | 0.2143 | 0.1733 | 1.23x | -| 1024 | 2000 | 0.0412 | 0.0204 | 2.01x | -| | 20000 | 0.3247 | 0.2907 | 1.11x | +| 32 | 50000 | 0.100 | 0.068 | 1.47x | +| | 500000 | 1.160 | 0.91 | 1.27x | +| 1024 | 50000 | 0.122 | 0.103 | 1.18x | +| | 500000 | 2.11 | 2.02 | 1.04x | ### HITS (bench_7) @@ -140,3 +135,5 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── | 1024 | 500 | 0.0174 | 0.0077 | 2.25x | | | 1000 | 0.587 | 0.0421 | 1.39x | | | 4000 | 0.786 | 0.778 | 1.01x | + + diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index 35f8f1ab..8304033a 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -10,7 +10,7 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 256 +NUM_THREADS_PER_BLOCK = 1024 SQUARE_KERNEL = """ extern "C" __global__ void square(const float* x, float* y, int n) { diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index be98ac6a..aca41013 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -180,11 +180,19 @@ def __init__(self, benchmark: BenchmarkResult): self.nb_amax = None self.nb_l = None - self.num_features = 2000 # self.nb_feat_log_prob_np.shape[1] - self.num_classes = 10 # self.nb_feat_log_prob_np.shape[0] + self.num_features = 200 # self.nb_feat_log_prob_np.shape[1] + self.num_classes = 5 # self.nb_feat_log_prob_np.shape[0] self.num_blocks_size = 64 - self.num_blocks_feat = 32 + self.num_blocks_feat = 64 + + self.x_cpu = None + self.nb_feat_log_prob_cpu = None + self.ridge_coeff_cpu = None + self.nb_class_log_prior_cpu = None + self.ridge_intercept_cpu = None + self.r1_cpu = None + self.r2_cpu = None @time_phase("allocation") def alloc(self, size: int): @@ -192,19 +200,19 @@ def alloc(self, size: int): self.num_blocks_size = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK # Allocate vectors; - self.x = polyglot.eval(language="grcuda", string=f"int[{size}][{self.num_features}]") - self.z = polyglot.eval(language="grcuda", string=f"float[{size}][{self.num_features}]") + self.x = polyglot.eval(language="grcuda", string=f"int[{size * self.num_features}]") + self.z = polyglot.eval(language="grcuda", string=f"float[{size * self.num_features}]") - self.nb_feat_log_prob = polyglot.eval(language="grcuda", string=f"float[{self.num_classes}][{self.num_features}]") + self.nb_feat_log_prob = polyglot.eval(language="grcuda", string=f"float[{self.num_classes * self.num_features}]") self.nb_class_log_prior = polyglot.eval(language="grcuda", string=f"float[{self.num_classes}]") - self.ridge_coeff = polyglot.eval(language="grcuda", string=f"float[{self.num_classes}][{self.num_features}]") + self.ridge_coeff = polyglot.eval(language="grcuda", string=f"float[{self.num_classes * self.num_features}]") self.ridge_intercept = polyglot.eval(language="grcuda", string=f"float[{self.num_classes}]") self.nb_amax = polyglot.eval(language="grcuda", string=f"float[{self.size}]") self.nb_l = polyglot.eval(language="grcuda", string=f"float[{self.size}]") - self.r1 = polyglot.eval(language="grcuda", string=f"float[{self.size}][{self.num_classes}]") - self.r2 = polyglot.eval(language="grcuda", string=f"float[{self.size}][{self.num_classes}]") + self.r1 = polyglot.eval(language="grcuda", string=f"float[{self.size * self.num_classes}]") + self.r2 = polyglot.eval(language="grcuda", string=f"float[{self.size * self.num_classes}]") self.r = polyglot.eval(language="grcuda", string=f"int[{self.size}]") # Build the kernels; @@ -226,30 +234,34 @@ def init(self): self.random_seed = randint(0, 10000000) seed(self.random_seed) - # Initialize the support device arrays; - for i in range(self.num_classes): - for j in range(self.num_features): - self.nb_feat_log_prob[i][j] = random() # self.nb_feat_log_prob_np[i][j] - self.ridge_coeff[i][j] = random() # self.ridge_coeff_np[i][j] - self.nb_class_log_prior[i] = random() # self.nb_class_log_prior_np[i] - self.ridge_intercept[i] = random() # self.ridge_intercept_np[i] - # Create a random input; max_occurrence_of_ngram = 10 - for i in range(self.size): - for j in range(self.num_features): - self.x[i][j] = randint(0, max_occurrence_of_ngram) - # Initialize a support array; - for j in range(self.num_classes): - self.r1[i][j] = self.nb_class_log_prior[j] - self.r2[i][j] = 0 + self.x_cpu = np.random.randint(0, max_occurrence_of_ngram, (self.size, self.num_features), dtype=np.int32) + + self.nb_feat_log_prob_cpu = np.random.random_sample((self.num_classes, self.num_features)).astype(dtype=np.float32) + self.ridge_coeff_cpu = np.random.random_sample((self.num_classes, self.num_features)).astype(dtype=np.float32) + self.nb_class_log_prior_cpu = np.random.random_sample(self.num_classes).astype(dtype=np.float32) + self.ridge_intercept_cpu = np.random.random_sample(self.num_classes).astype(dtype=np.float32) + + self.r1_cpu = np.zeros((self.size, self.num_classes)) + for j in range(self.num_classes): + self.r1_cpu[:, j] = self.nb_class_log_prior_cpu[j] + self.r2_cpu = np.zeros((self.size, self.num_classes)) + + self.x.copyFrom(int(np.int64(self.x_cpu.ctypes.data)), len(self.x)) + self.nb_feat_log_prob.copyFrom(int(np.int64(self.nb_feat_log_prob_cpu.ctypes.data)), len(self.nb_feat_log_prob)) + self.ridge_coeff.copyFrom(int(np.int64(self.ridge_coeff_cpu.ctypes.data)), len(self.ridge_coeff)) + self.nb_class_log_prior.copyFrom(int(np.int64(self.nb_class_log_prior_cpu.ctypes.data)), len(self.nb_class_log_prior)) + self.ridge_intercept.copyFrom(int(np.int64(self.ridge_intercept_cpu.ctypes.data)), len(self.ridge_intercept)) + self.r1.copyFrom(int(np.int64(self.r1_cpu.ctypes.data)), len(self.r1)) + self.r2.copyFrom(int(np.int64(self.r2_cpu.ctypes.data)), len(self.r2)) @time_phase("reset_result") def reset_result(self) -> None: for i in range(self.size): for j in range(self.num_classes): - self.r1[i][j] = self.nb_class_log_prior[j] - self.r2[i][j] = 0 + self.r1[i * self.num_classes + j] = self.nb_class_log_prior[j] + self.r2[i * self.num_classes + j] = 0 def execute(self) -> object: @@ -350,26 +362,9 @@ def ridge_pred(X, coef, intercept): if self.current_iter == 0 or reinit: # Re-initialize the random number generator with the same seed as the GPU to generate the same values; seed(self.random_seed) - # Initialize the support device arrays; - x_g = np.zeros((self.size, self.num_features)) - feat_log_prob = np.zeros((self.num_classes, self.num_features)) - ridge_coeff = np.zeros((self.num_classes, self.num_features)) - class_log_prior = np.zeros(self.num_classes) - ridge_intercept = np.zeros(self.num_classes) - for i in range(self.num_classes): - for j in range(self.num_features): - feat_log_prob[i, j] = random() # self.nb_feat_log_prob_np[i][j] - ridge_coeff[i, j] = random() # self.ridge_coeff_np[i][j] - class_log_prior[i] = random() # self.nb_class_log_prior_np[i] - ridge_intercept[i] = random() # self.ridge_intercept_np[i] - - # Create a random input; - for i in range(self.size): - for j in range(self.num_features): - x_g[i, j] = self.x[i][j] - - r1_g = naive_bayes_predict(x_g, feat_log_prob, class_log_prior) - r2_g = ridge_pred(normalize(x_g), ridge_coeff, ridge_intercept) + + r1_g = naive_bayes_predict(self.x_cpu, self.nb_feat_log_prob_cpu, self.nb_class_log_prior_cpu) + r2_g = ridge_pred(normalize(self.x_cpu), self.ridge_coeff_cpu, self.ridge_intercept_cpu) r_g = np.argmax(softmax(r1_g) + softmax(r2_g), axis=1) self.cpu_result = r_g From 674448d3f4550bdfbf502aea00e39ebeb20eeb7c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 16 Jun 2020 18:43:52 +0200 Subject: [PATCH 089/236] updated benchmark results --- RESULTS.md | 10 ++++------ projects/resources/python/benchmark/bench/bench_8.py | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index 9d59002c..2198da74 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -129,11 +129,9 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── | Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | |-----|-----|-----|-----|-----| -| 32 | 500 | 0.0169 | 0.0077 | 2.19x | -| | 1000 | 0.0550 | 0.0424 | 1.29x | -| | 4000 | 0.774 | 0.765 | 1.01x | -| 1024 | 500 | 0.0174 | 0.0077 | 2.25x | -| | 1000 | 0.587 | 0.0421 | 1.39x | -| | 4000 | 0.786 | 0.778 | 1.01x | +| 32 | 2000 | 0.0241 | 0.0182 | 1.32x | +| | 4000 | 0.0890 | 0.0785 | 1.13x | +| 1024 | 2000 | 0.056 | 0.040 | 1.4x | +| | 4000 | 0.179 | 0.169 | 1.05x | diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index 972ee707..b5fefca8 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -10,8 +10,8 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK_2D = 8 -NUM_THREADS_PER_BLOCK = 256 +NUM_THREADS_PER_BLOCK_2D = 32 +NUM_THREADS_PER_BLOCK = 1024 WARP_SIZE = 32 GAUSSIAN_BLUR = """ From 34a2d239ef334e4fbb680e2f03ea7dae60cbf1b7 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 17 Jun 2020 11:17:32 +0200 Subject: [PATCH 090/236] modified event-based sync so that each kernel has an associated event --- .gitignore | 1 + RESULTS.md | 4 +- .../test/mock/GrCUDAStreamManagerMock.java | 8 ++++ .../src/com/nvidia/grcuda/CUDAEvent.java | 18 +++++++++ .../com/nvidia/grcuda/gpu/CUDARuntime.java | 10 +++++ .../GrCUDAComputationalElement.java | 20 ++++++++++ .../gpu/computation/KernelExecution.java | 4 +- .../GrCUDAExecutionContext.java | 13 ++++-- .../gpu/stream/GrCUDAStreamManager.java | 40 +++++++++++++++---- .../python/benchmark/bench/bench_7.py | 2 +- .../python/benchmark/bench/bench_8.py | 8 ++-- 11 files changed, 108 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 63ff0ff2..f6cb476f 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,4 @@ mx.grcuda/eclipse-launches /venv **.log /scratch +**.nvvp diff --git a/RESULTS.md b/RESULTS.md index 2198da74..5e01a073 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -129,8 +129,8 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── | Threads | Size | Sync time (s) | DAG (s) | DAG Speedup | |-----|-----|-----|-----|-----| -| 32 | 2000 | 0.0241 | 0.0182 | 1.32x | -| | 4000 | 0.0890 | 0.0785 | 1.13x | +| 32 | 2000 | 0.0241 | 0.0128 | 1.88x | +| | 4000 | 0.0890 | 0.0760 | 1.17x | | 1024 | 2000 | 0.056 | 0.040 | 1.4x | | | 4000 | 0.179 | 0.169 | 1.05x | diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java index 67bc8b36..88829281 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/mock/GrCUDAStreamManagerMock.java @@ -42,9 +42,17 @@ public CUDAStream createStream() { return newStream; } + @Override + public void assignEvent(ExecutionDAG.DAGVertex vertex) { } + @Override public void syncStream(CUDAStream stream) { } + @Override + protected void setComputationFinishedInner(GrCUDAComputationalElement computation) { + computation.setComputationFinished(); + } + @Override protected void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/CUDAEvent.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/CUDAEvent.java index eda7b19f..f65dd3fe 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/CUDAEvent.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/CUDAEvent.java @@ -11,6 +11,10 @@ public class CUDAEvent extends GPUPointer { private final long eventNumber; + /** + * Keep track of whether this event has been destroyed by {@link com.nvidia.grcuda.gpu.CUDARuntime#cudaEventDestroy} + */ + private boolean isAlive = true; public CUDAEvent(long rawPointer, long eventNumber) { super(rawPointer); @@ -23,6 +27,20 @@ public long getEventNumber() { public boolean isDefaultStream() { return false; } + /** + * Keep track of whether this event has been destroyed by {@link com.nvidia.grcuda.gpu.CUDARuntime#cudaEventDestroy} + */ + public boolean isAlive() { + return isAlive; + } + + /** + * Set the event as destroyed by the CUDA runtime; + */ + public void setDead() { + isAlive = false; + } + @Override public String toString() { return "CUDAEvent(eventNumber=" + this.eventNumber + "; address=0x" + Long.toHexString(this.getRawPointer()) + ")"; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 228ffcfc..4cf2ae23 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -435,10 +435,14 @@ public CUDAEvent cudaEventCreate() { */ @TruffleBoundary public void cudaEventDestroy(CUDAEvent event) { + if (!event.isAlive()) { + throw new RuntimeException("CUDA event=" + event + " has already been destroyed"); + } try { Object callable = CUDARuntimeFunction.CUDA_EVENTDESTROY.getSymbol(this); Object result = INTEROP.execute(callable, event.getRawPointer()); checkCUDAReturnCode(result, "cudaEventDestroy"); + event.setDead(); } catch (InteropException e) { throw new GrCUDAException(e); } @@ -452,6 +456,9 @@ public void cudaEventDestroy(CUDAEvent event) { */ @TruffleBoundary public void cudaEventRecord(CUDAEvent event, CUDAStream stream) { + if (!event.isAlive()) { + throw new RuntimeException("CUDA event=" + event + " has already been destroyed"); + } try { Object callable = CUDARuntimeFunction.CUDA_EVENTRECORD.getSymbol(this); Object result = INTEROP.execute(callable, event.getRawPointer(), stream.getRawPointer()); @@ -468,6 +475,9 @@ public void cudaEventRecord(CUDAEvent event, CUDAStream stream) { */ @TruffleBoundary public void cudaStreamWaitEvent(CUDAStream stream, CUDAEvent event) { + if (!event.isAlive()) { + throw new RuntimeException("CUDA event=" + event + " has already been destroyed"); + } try { final int FLAGS = 0x0; // Must be 0 according to CUDA documentation; Object callable = CUDARuntimeFunction.CUDA_STREAMWAITEVENT.getSymbol(this); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java index 83b15c05..4b94e874 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/GrCUDAComputationalElement.java @@ -1,11 +1,13 @@ package com.nvidia.grcuda.gpu.computation; +import com.nvidia.grcuda.CUDAEvent; import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.computation.dependency.DependencyComputation; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.GrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.DefaultStream; +import com.oracle.truffle.api.Option; import com.oracle.truffle.api.interop.UnsupportedTypeException; import java.util.Collection; @@ -33,6 +35,12 @@ public abstract class GrCUDAComputationalElement { * but it is required to keep that value consistent to this one if it is modified; */ private CUDAStream stream = DefaultStream.get(); + /** + * Reference to the event associated to this computation, and recorded on the stream where this computation is executed, + * after the computation is started. It offers a precise synchronization point for children computations. + * If the computation is not executed on a stream, the event is null; + */ + private CUDAEvent event; /** * Keep track of whether this computation has already been executed, and represents a "dead" vertex in the DAG. * Computations that are already executed will not be considered when computing dependencies; @@ -126,6 +134,18 @@ public void setComputationStarted() { this.computationStarted = true; } + public Optional getEvent() { + if (event != null) { + return Optional.of(event); + } else { + return Optional.empty(); + } + } + + public void setEvent(CUDAEvent event) { + this.event = event; + } + /** * Find whether this computation should be done on a user-specified {@link com.nvidia.grcuda.gpu.stream.CUDAStream}; * If not, the stream will be provided internally using the specified execution policy. By default return false; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java index 37217353..236e85e3 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/KernelExecution.java @@ -1,5 +1,6 @@ package com.nvidia.grcuda.gpu.computation; +import com.nvidia.grcuda.CUDAEvent; import com.nvidia.grcuda.NoneValue; import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.ConfiguredKernel; @@ -104,9 +105,10 @@ public String toString() { // return "KernelExecution(" + configuredKernel.toString() + "; args=[" + // Arrays.stream(args.getOriginalArgs()).map(a -> Integer.toString(System.identityHashCode(a))).collect(Collectors.joining(", ")) + // "]" + "; stream=" + this.getStream() + ")"; + String event = this.getEvent().isPresent() ? Long.toString(this.getEvent().get().getEventNumber()) : "NULL"; return "kernel=" + kernel.getKernelName() + "; args=[" + Arrays.stream(args.getOriginalArgs()).map(a -> Integer.toString(System.identityHashCode(a))).collect(Collectors.joining(", ")) + - "]" + "; stream=" + this.getStream().getStreamNumber(); + "]" + "; stream=" + this.getStream().getStreamNumber() + "; event=" + event; } static class KernelExecutionInitializer implements InitializeArgumentList { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java index 0c59cf10..92c5703d 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java @@ -44,11 +44,18 @@ public Object registerExecution(GrCUDAComputationalElement computation) throws U // Add the new computation to the DAG ExecutionDAG.DAGVertex vertex = dag.append(computation); - // Compute the stream where the computation will be done; + // Compute the stream where the computation will be done, if the computation can be performed asynchronously; streamManager.assignStream(vertex); // Start the computation; - return executeComputationSync(vertex); + Object result = executeComputationSync(vertex); + + // Associate a CUDA event to this computation, if performed asynchronously; + streamManager.assignEvent(vertex); + + System.out.println("-- running " + vertex.getComputation()); + + return result; } @Override @@ -72,8 +79,6 @@ private Object executeComputationSync(ExecutionDAG.DAGVertex vertex) throws Unsu // Before starting this computation, ensure that all its parents have finished their computation; streamManager.syncParentStreams(vertex); - System.out.println("-- running " + vertex.getComputation()); - // Perform the computation; vertex.getComputation().setComputationStarted(); vertex.getComputation().updateIsComputationArrayAccess(); diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index a5bd93ac..774758ae 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -100,6 +100,21 @@ public void assignStream(ExecutionDAG.DAGVertex vertex) { } } + /** + * Associate a new {@link CUDAEvent} to this computation, if the computation is done on a {@link CUDAStream}. + * The event is created and recorded on the stream where the computation is running, + * and can be used for precise synchronization of children computation; + * @param vertex an input computation for which we want to assign an event + */ + public void assignEvent(ExecutionDAG.DAGVertex vertex) { + // If the computation cannot use customized streams, return immediately; + if (vertex.getComputation().canUseStream()) { + CUDAEvent event = runtime.cudaEventCreate(); + runtime.cudaEventRecord(event, vertex.getComputation().getStream()); + vertex.getComputation().setEvent(event); + } + } + public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { // If the vertex can be executed on a CUDA stream, use CUDA events, // otherwise use stream/device synchronization to block the host until synchronization is done; @@ -144,23 +159,22 @@ protected Set getParentStreams(Collection streamSynchronized = new HashSet<>(); for (GrCUDAComputationalElement parent : vertex.getParentComputations()) { CUDAStream stream = parent.getStream(); // Skip synchronization on the same stream where the new computation is executed, // as operations scheduled on a stream are executed in order; if (!vertex.getComputation().getStream().equals(stream)) { - // Don't process the same stream twice, in any case; - if (!streamSynchronized.contains(stream)) { - // Create a new synchronization event on the stream; - CUDAEvent event = runtime.cudaEventCreate(); - runtime.cudaEventRecord(event, stream); + // Synchronize on the events associated to the parents; + if (parent.getEvent().isPresent()) { + CUDAEvent event = parent.getEvent().get(); runtime.cudaStreamWaitEvent(vertex.getComputation().getStream(), event); - streamSynchronized.add(stream); System.out.println("\t* wait event on stream; stream to sync=" + stream.getStreamNumber() + "; stream that waits=" + vertex.getComputation().getStream().getStreamNumber() + "; event=" + event.getEventNumber()); + } else { + System.out.println("\t* WARNING: missing event to sync child computation=" + vertex.getComputation() + + " and parent computation=" + parent); } } } @@ -197,6 +211,16 @@ protected void syncParentStreamsImpl(ExecutionDAG.DAGVertex vertex) { }); } + protected void setComputationFinishedInner(GrCUDAComputationalElement computation) { + computation.setComputationFinished(); + // Destroy the event associated to this computation; + if (computation.getEvent().isPresent()) { + runtime.cudaEventDestroy(computation.getEvent().get()); + } else { + System.out.println("\t* WARNING: missing event to destroy for computation=" + computation); + } + } + private void setComputationsFinished(ExecutionDAG.DAGVertex vertex, Set streamsToSync) { // Vertices to process; final Queue queue = new ArrayDeque<>(Collections.singletonList(vertex)); @@ -205,7 +229,7 @@ private void setComputationsFinished(ExecutionDAG.DAGVertex vertex, Set Date: Wed, 17 Jun 2020 14:38:04 +0200 Subject: [PATCH 091/236] added support for device array copy as dag element --- .../GrCUDAExecutionContextTest.java | 51 +++++++++++ .../nvidia/grcuda/array/AbstractArray.java | 1 + .../com/nvidia/grcuda/array/DeviceArray.java | 21 +---- .../grcuda/array/MultiDimDeviceArray.java | 3 +- .../grcuda/array/MultiDimDeviceArrayView.java | 5 ++ .../functions/DeviceArrayCopyFunction.java | 8 +- .../ArrayReadWriteFunctionExecution.java | 88 +++++++++++++++++++ 7 files changed, 151 insertions(+), 26 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java index 8b1cd84b..b1ef45e3 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextTest.java @@ -258,4 +258,55 @@ public void dependencyPipelineSimple4Test() throws InterruptedException { assertEquals(4.0, z.getArrayElement(0).asFloat(), 0.1); } } + + @Test + public void dependencyPipelineWithArrayCopyTest() { + + try (Context context = Context.newBuilder().option("grcuda.ExecutionPolicy", this.policy).allowAllAccess(true).build()) { + + final int numElements = 100000; + final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; + Value deviceArrayConstructor = context.eval("grcuda", "DeviceArray"); + Value x = deviceArrayConstructor.execute("float", numElements); + Value y = deviceArrayConstructor.execute("float", numElements); + Value z = deviceArrayConstructor.execute("float", numElements); + Value x2 = deviceArrayConstructor.execute("float", numElements); + Value y2 = deviceArrayConstructor.execute("float", numElements); + Value res = deviceArrayConstructor.execute("float", 1); + Value res2 = deviceArrayConstructor.execute("float", 1); + + for (int i = 0; i < numElements; ++i) { + x.setArrayElement(i, 1.0 / (i + 1)); + y.setArrayElement(i, 2.0 / (i + 1)); + } + res.setArrayElement(0, 0.0); + + x2.invokeMember("copyFrom", x, numElements); + y2.invokeMember("copyFrom", y, numElements); + + Value buildkernel = context.eval("grcuda", "buildkernel"); + Value squareKernel = buildkernel.execute(SQUARE_KERNEL, "square", "pointer, sint32"); + Value diffKernel = buildkernel.execute(DIFF_KERNEL, "diff", "const pointer, const pointer, pointer, sint32"); + Value reduceKernel = buildkernel.execute(REDUCE_KERNEL, "reduce", "const pointer, pointer, sint32"); + assertNotNull(squareKernel); + assertNotNull(diffKernel); + assertNotNull(reduceKernel); + + Value configuredSquareKernel = squareKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredDiffKernel = diffKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + Value configuredReduceKernel = reduceKernel.execute(numBlocks, NUM_THREADS_PER_BLOCK); + + // Perform the computation; + configuredSquareKernel.execute(x2, numElements); + configuredSquareKernel.execute(y2, numElements); + configuredDiffKernel.execute(x2, y2, z, numElements); + configuredReduceKernel.execute(z, res, numElements); + + res.invokeMember("copyTo", res2, 1); + + // Verify the output; + float resScalar = res2.getArrayElement(0).asFloat(); + assertEquals(-4.93, resScalar, 0.01); + } + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 0961cb24..4a6cecbb 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -94,6 +94,7 @@ public synchronized void setLastComputationArrayAccess(boolean lastComputationAr } public abstract long getPointer(); + public abstract long getSizeBytes(); /** * Check if this array can be accessed by the host (read/write) without having to schedule a {@link com.nvidia.grcuda.gpu.computation.ArrayAccessExecution}. diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index 49744f93..791889ca 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -123,7 +123,8 @@ public DeviceArray(AbstractGrCUDAExecutionContext grCUDAExecutionContext, long n this.registerArray(); } - final long getSizeBytes() { + @Override + final public long getSizeBytes() { return sizeBytes; } @@ -319,22 +320,4 @@ boolean isPointer() { long asPointer() { return getPointer(); } - - public void copyFrom(long fromPointer, long numCopyElements) throws IndexOutOfBoundsException { - long numBytesToCopy = numCopyElements * elementType.getSizeBytes(); - if (numBytesToCopy > getSizeBytes()) { - CompilerDirectives.transferToInterpreter(); - throw new IndexOutOfBoundsException(); - } - grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(getPointer(), fromPointer, numBytesToCopy); - } - - public void copyTo(long toPointer, long numCopyElements) throws IndexOutOfBoundsException { - long numBytesToCopy = numCopyElements * elementType.getSizeBytes(); - if (numBytesToCopy > getSizeBytes()) { - CompilerDirectives.transferToInterpreter(); - throw new IndexOutOfBoundsException(); - } - grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(toPointer, getPointer(), numBytesToCopy); - } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java index 03f3cf78..9f4575a8 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java @@ -149,7 +149,8 @@ long getNumElements() { return numElements; } - final long getSizeBytes() { + @Override + final public long getSizeBytes() { return numElements * elementType.getSizeBytes(); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java index 09377390..637f5648 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java @@ -111,6 +111,11 @@ public CUDAStream getStreamMapping() { return this.mdDeviceArray.getStreamMapping(); } + @Override + final public long getSizeBytes() { + return mdDeviceArray.getElementsInDimension(thisDimension) * elementType.getSizeBytes(); + } + @Override public String toString() { return String.format("MultiDimDeviceArrayView(dim=%d, offset=%d, stride=%d)\n", diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java index 11c58e0f..eb3db253 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java @@ -28,6 +28,7 @@ package com.nvidia.grcuda.functions; import com.nvidia.grcuda.array.DeviceArray; +import com.nvidia.grcuda.gpu.computation.ArrayReadWriteFunctionExecution; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.interop.ArityException; import com.oracle.truffle.api.interop.InteropLibrary; @@ -95,12 +96,7 @@ Object execute(Object[] arguments, throw ArityException.create(1, arguments.length); } long pointer = extractPointer(arguments[0], "fromPointer", pointerAccess); - if (direction == CopyDirection.FROM_POINTER) { - deviceArray.copyFrom(pointer, numElements); - } - if (direction == CopyDirection.TO_POINTER) { - deviceArray.copyTo(pointer, numElements); - } + new ArrayReadWriteFunctionExecution<>(deviceArray, direction, pointer, numElements).schedule(); return deviceArray; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java new file mode 100644 index 00000000..27094c14 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java @@ -0,0 +1,88 @@ +package com.nvidia.grcuda.gpu.computation; + +import com.nvidia.grcuda.NoneValue; +import com.nvidia.grcuda.array.AbstractArray; +import com.nvidia.grcuda.functions.DeviceArrayCopyFunction; +import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; +import com.nvidia.grcuda.gpu.stream.CUDAStream; +import com.oracle.truffle.api.CompilerDirectives; +import com.oracle.truffle.api.interop.UnsupportedTypeException; + +import java.util.Optional; + +/** + * Computational elements that represents a low-level memory copy from/to a {@link AbstractArray} + * @param the type of {@link AbstractArray} used in the copy + */ +public class ArrayReadWriteFunctionExecution extends GrCUDAComputationalElement { + + /** + * The {@link AbstractArray} used in the copy; + */ + private final T array; + /** + * Whether this computations copies data from the array or writes to it; + */ + private final DeviceArrayCopyFunction.CopyDirection direction; + /** + * A memory pointer from which data copied to the array are retrieved, or memory pointer to which data are written; + */ + private final long pointer; + /** + * Number of elements copied (expressed as number of elements, not as a size in bytes); + */ + private final long numElements; + + protected boolean isComputationArrayAccess = true; + + public ArrayReadWriteFunctionExecution(T array, DeviceArrayCopyFunction.CopyDirection direction, long pointer, long numElements) { + super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array, direction.equals(DeviceArrayCopyFunction.CopyDirection.TO_POINTER))); + this.array = array; + this.direction = direction; + this.pointer = pointer; + this.numElements = numElements; + } + + @Override + public Object execute() throws UnsupportedTypeException { + if (direction == DeviceArrayCopyFunction.CopyDirection.FROM_POINTER) { + copyFrom(); + } + if (direction == DeviceArrayCopyFunction.CopyDirection.TO_POINTER) { + copyTo(); + } + this.setComputationFinished(); + return NoneValue.get(); + } + + private void copyFrom() throws IndexOutOfBoundsException { + long numBytesToCopy = numElements * array.getElementType().getSizeBytes(); + if (numBytesToCopy > array.getSizeBytes()) { + CompilerDirectives.transferToInterpreter(); + throw new IndexOutOfBoundsException(); + } + grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(array.getPointer(), pointer, numBytesToCopy); + } + + private void copyTo() throws IndexOutOfBoundsException { + long numBytesToCopy = numElements * array.getElementType().getSizeBytes(); + if (numBytesToCopy > array.getSizeBytes()) { + CompilerDirectives.transferToInterpreter(); + throw new IndexOutOfBoundsException(); + } + grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(pointer, array.getPointer(), numBytesToCopy); + } + + @Override + public void updateIsComputationArrayAccess() { + this.array.setLastComputationArrayAccess(isComputationArrayAccess); + } + + @Override + protected Optional additionalStreamDependencyImpl() { return Optional.of(array.getStreamMapping()); } + + @Override + public String toString() { + return "array memcpy on " + System.identityHashCode(array) + "; direction=" + direction + "; target=" + pointer + "; size=" + numElements; + } +} From ee8129c184622fb99740402514c83a82619034de Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 17 Jun 2020 17:21:20 +0200 Subject: [PATCH 092/236] added support for memcpy on multidim arrays --- .../test/DeviceArrayCopyFunctionTest.java | 159 ++++++++++++++++++ .../src/com/nvidia/grcuda/GrCUDALanguage.java | 1 - .../src/com/nvidia/grcuda/MemberSet.java | 50 ++++++ .../src/com/nvidia/grcuda/Namespace.java | 2 +- .../nvidia/grcuda/array/AbstractArray.java | 73 ++++++++ .../com/nvidia/grcuda/array/DeviceArray.java | 102 ----------- .../grcuda/array/MultiDimDeviceArray.java | 31 ---- .../grcuda/array/MultiDimDeviceArrayView.java | 5 +- .../functions/DeviceArrayCopyFunction.java | 16 +- .../grcuda/functions/DeviceArrayFunction.java | 2 +- .../grcuda/functions/map/ArgumentSet.java | 2 +- .../grcuda/functions/map/MapArgObject.java | 2 +- .../grcuda/functions/map/MapFunction.java | 2 +- .../grcuda/functions/map/ShreddedObject.java | 2 +- .../src/com/nvidia/grcuda/gpu/Device.java | 2 +- .../src/com/nvidia/grcuda/gpu/Kernel.java | 2 +- .../ArrayReadWriteFunctionExecution.java | 7 +- 17 files changed, 304 insertions(+), 156 deletions(-) create mode 100644 projects/com.nvidia.grcuda/src/com/nvidia/grcuda/MemberSet.java diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/DeviceArrayCopyFunctionTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/DeviceArrayCopyFunctionTest.java index e7d7abee..f1ef0ffe 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/DeviceArrayCopyFunctionTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/DeviceArrayCopyFunctionTest.java @@ -135,4 +135,163 @@ public void testDeviceArrayCopyToDeviceArray() { } } } + + @Test + public void testMultiDimDeviceArrayCopyFromDeviceArray() { + final int numElements1 = 10; + final int numElements2 = 25; + try (Context ctx = Context.newBuilder().allowAllAccess(true).build()) { + Value createDeviceArray = ctx.eval("grcuda", "DeviceArray"); + // create device array initialize its elements. + Value sourceDeviceArray = createDeviceArray.execute("int", numElements1, numElements2); + + // create destination device array initialize its elements to zero. + Value destinationDeviceArray = createDeviceArray.execute("int", numElements1, numElements2); + + // Set each row to j; + for (int i = 0; i < numElements1; ++i) { + for (int j = 0; j < numElements2; ++j) { + sourceDeviceArray.getArrayElement(i).setArrayElement(j, j); + } + } + destinationDeviceArray.invokeMember("copyFrom", sourceDeviceArray, numElements1 * numElements2); + // Verify content of device array + for (int i = 0; i < numElements1; ++i) { + for (int j = 0; j < numElements2; ++j) { + assertEquals(j, destinationDeviceArray.getArrayElement(i).getArrayElement(j).asInt()); + } + } + } + } + + @Test + public void testMultiDimDeviceArrayCopyToDeviceArray() { + final int numElements1 = 10; + final int numElements2 = 25; + try (Context ctx = Context.newBuilder().allowAllAccess(true).build()) { + Value createDeviceArray = ctx.eval("grcuda", "DeviceArray"); + // create device array initialize its elements. + Value sourceDeviceArray = createDeviceArray.execute("int", numElements1, numElements2); + // Set each row to j; + for (int i = 0; i < numElements1; ++i) { + for (int j = 0; j < numElements2; ++j) { + sourceDeviceArray.getArrayElement(i).setArrayElement(j, j); + } + } + // create destination device array initialize its elements to zero. + Value destinationDeviceArray = createDeviceArray.execute("int", numElements1, numElements2); + + sourceDeviceArray.invokeMember("copyTo", destinationDeviceArray, numElements1 * numElements2); + // Verify content of device array + for (int i = 0; i < numElements1; ++i) { + for (int j = 0; j < numElements2; ++j) { + assertEquals(j, destinationDeviceArray.getArrayElement(i).getArrayElement(j).asInt()); + } + } + } + } + + @Test + public void testMultiDimDeviceArrayCopyToDeviceArrayRow() { + final int numElements1 = 10; + final int numElements2 = 25; + try (Context ctx = Context.newBuilder().allowAllAccess(true).build()) { + Value createDeviceArray = ctx.eval("grcuda", "DeviceArray"); + // create device array initialize its elements. + Value sourceDeviceArray = createDeviceArray.execute("int", numElements1, numElements2); + // Set each rows 3 to j; + for (int j = 0; j < numElements2; ++j) { + sourceDeviceArray.getArrayElement(3).setArrayElement(j, j); + } + + // create destination device array initialize its elements to zero. + Value destinationDeviceArray = createDeviceArray.execute("int", numElements2); + + sourceDeviceArray.getArrayElement(3).invokeMember("copyTo", destinationDeviceArray, sourceDeviceArray.getArrayElement(3).getArraySize()); + // Verify content of device array + for (int j = 0; j < numElements2; ++j) { + assertEquals(j, destinationDeviceArray.getArrayElement(j).asInt()); + } + } + } + + @Test + public void testMultiDimDeviceArrayCopyFromDeviceArrayRow() { + final int numElements1 = 10; + final int numElements2 = 25; + try (Context ctx = Context.newBuilder().allowAllAccess(true).build()) { + Value createDeviceArray = ctx.eval("grcuda", "DeviceArray"); + // create device array initialize its elements. + Value sourceDeviceArray = createDeviceArray.execute("int", numElements1, numElements2); + // create destination device array initialize its elements to zero. + Value destinationDeviceArray = createDeviceArray.execute("int", numElements2); + // Set each value to j; + for (int j = 0; j < numElements2; ++j) { + destinationDeviceArray.setArrayElement(j, j); + } + + sourceDeviceArray.getArrayElement(3).invokeMember("copyFrom", destinationDeviceArray, sourceDeviceArray.getArrayElement(3).getArraySize()); + // Verify content of device array + for (int j = 0; j < numElements2; ++j) { + assertEquals(j, sourceDeviceArray.getArrayElement(3).getArrayElement(j).asInt()); + } + } + } + + // FIXME: memcpy on single dimensions of column-major arrays doesn't work, as memory is not contiguous; + + @Test + public void testMultiDimDeviceArrayCopyFromDeviceArrayF() { + final int numElements1 = 10; + final int numElements2 = 25; + try (Context ctx = Context.newBuilder().allowAllAccess(true).build()) { + Value createDeviceArray = ctx.eval("grcuda", "DeviceArray"); + // create device array initialize its elements. + Value sourceDeviceArray = createDeviceArray.execute("int", numElements1, numElements2, "F"); + + // create destination device array initialize its elements to zero. + Value destinationDeviceArray = createDeviceArray.execute("int", numElements1, numElements2, "F"); + + // Set each row to j; + for (int i = 0; i < numElements1; ++i) { + for (int j = 0; j < numElements2; ++j) { + sourceDeviceArray.getArrayElement(i).setArrayElement(j, j); + } + } + destinationDeviceArray.invokeMember("copyFrom", sourceDeviceArray, numElements1 * numElements2); + // Verify content of device array + for (int i = 0; i < numElements1; ++i) { + for (int j = 0; j < numElements2; ++j) { + assertEquals(j, destinationDeviceArray.getArrayElement(i).getArrayElement(j).asInt()); + } + } + } + } + + @Test + public void testMultiDimDeviceArrayCopyToDeviceArrayF() { + final int numElements1 = 10; + final int numElements2 = 25; + try (Context ctx = Context.newBuilder().allowAllAccess(true).build()) { + Value createDeviceArray = ctx.eval("grcuda", "DeviceArray"); + // create device array initialize its elements. + Value sourceDeviceArray = createDeviceArray.execute("int", numElements1, numElements2, "F"); + // Set each row to j; + for (int i = 0; i < numElements1; ++i) { + for (int j = 0; j < numElements2; ++j) { + sourceDeviceArray.getArrayElement(i).setArrayElement(j, j); + } + } + // create destination device array initialize its elements to zero. + Value destinationDeviceArray = createDeviceArray.execute("int", numElements1, numElements2, "F"); + + sourceDeviceArray.invokeMember("copyTo", destinationDeviceArray, numElements1 * numElements2); + // Verify content of device array + for (int i = 0; i < numElements1; ++i) { + for (int j = 0; j < numElements2; ++j) { + assertEquals(j, destinationDeviceArray.getArrayElement(i).getArrayElement(j).asInt()); + } + } + } + } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java index 36f6ada1..da7689f5 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDALanguage.java @@ -29,7 +29,6 @@ package com.nvidia.grcuda; import com.nvidia.grcuda.array.DeviceArray; -import com.oracle.truffle.api.instrumentation.TruffleInstrument; import org.graalvm.options.OptionDescriptors; import com.nvidia.grcuda.nodes.ExpressionNode; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/MemberSet.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/MemberSet.java new file mode 100644 index 00000000..1c10deb2 --- /dev/null +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/MemberSet.java @@ -0,0 +1,50 @@ +package com.nvidia.grcuda; + +import com.oracle.truffle.api.CompilerDirectives; +import com.oracle.truffle.api.interop.InteropLibrary; +import com.oracle.truffle.api.interop.InvalidArrayIndexException; +import com.oracle.truffle.api.interop.TruffleObject; +import com.oracle.truffle.api.library.ExportLibrary; +import com.oracle.truffle.api.library.ExportMessage; + +import java.util.Arrays; + +@ExportLibrary(InteropLibrary.class) +public final class MemberSet implements TruffleObject { + + @CompilerDirectives.CompilationFinal(dimensions = 1) private final String[] values; + + public MemberSet(String... values) { + this.values = values; + } + + @ExportMessage + @SuppressWarnings("static-method") + public boolean hasArrayElements() { + return true; + } + + @ExportMessage + public long getArraySize() { + return values.length; + } + + @ExportMessage + public boolean isArrayElementReadable(long index) { + return index >= 0 && index < values.length; + } + + @ExportMessage + public Object readArrayElement(long index) throws InvalidArrayIndexException { + if ((index < 0) || (index >= values.length)) { + CompilerDirectives.transferToInterpreter(); + throw InvalidArrayIndexException.create(index); + } + return values[(int) index]; + } + + @CompilerDirectives.TruffleBoundary + public boolean constainsValue(String name) { + return Arrays.asList(values).contains(name); + } +} diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/Namespace.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/Namespace.java index a69882c5..e02abfd3 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/Namespace.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/Namespace.java @@ -31,7 +31,7 @@ import java.util.Optional; import java.util.TreeMap; -import com.nvidia.grcuda.array.DeviceArray.MemberSet; +import com.nvidia.grcuda.MemberSet; import com.nvidia.grcuda.functions.Function; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.ArityException; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java index 4a6cecbb..068ab14e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/AbstractArray.java @@ -1,16 +1,27 @@ package com.nvidia.grcuda.array; import com.nvidia.grcuda.ElementType; +import com.nvidia.grcuda.MemberSet; +import com.nvidia.grcuda.functions.DeviceArrayCopyFunction; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.executioncontext.ExecutionDAG; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.nvidia.grcuda.gpu.stream.DefaultStream; +import com.oracle.truffle.api.CompilerDirectives; +import com.oracle.truffle.api.dsl.Cached; +import com.oracle.truffle.api.interop.ArityException; import com.oracle.truffle.api.interop.InteropLibrary; import com.oracle.truffle.api.interop.InvalidArrayIndexException; import com.oracle.truffle.api.interop.TruffleObject; +import com.oracle.truffle.api.interop.UnknownIdentifierException; import com.oracle.truffle.api.interop.UnsupportedMessageException; +import com.oracle.truffle.api.interop.UnsupportedTypeException; +import com.oracle.truffle.api.library.CachedLibrary; import com.oracle.truffle.api.library.ExportLibrary; import com.oracle.truffle.api.library.ExportMessage; +import com.oracle.truffle.api.profiles.ValueProfile; + +import java.util.Arrays; /** * Simple wrapper around each class that represents device arrays in GrCUDA. @@ -19,6 +30,13 @@ @ExportLibrary(InteropLibrary.class) public abstract class AbstractArray implements TruffleObject { + protected static final String POINTER = "pointer"; + protected static final String COPY_FROM = "copyFrom"; + protected static final String COPY_TO = "copyTo"; + + protected static final MemberSet PUBLIC_MEMBERS = new MemberSet(COPY_FROM, COPY_TO); + protected static final MemberSet MEMBERS = new MemberSet(POINTER, COPY_FROM, COPY_TO); + /** * Reference to the underlying CUDA runtime that manages the array memory. */ @@ -124,6 +142,61 @@ boolean isArrayElementReadable(long index) { return false; } + @ExportMessage + @SuppressWarnings("static-method") + boolean hasMembers() { + return true; + } + + @ExportMessage + @SuppressWarnings("static-method") + Object getMembers(boolean includeInternal) { + return includeInternal ? MEMBERS : PUBLIC_MEMBERS; + } + + @ExportMessage + @SuppressWarnings("static-method") + boolean isMemberReadable(String memberName, + @Cached.Shared("memberName") @Cached("createIdentityProfile()") ValueProfile memberProfile) { + String name = memberProfile.profile(memberName); + return POINTER.equals(name) || COPY_FROM.equals(name) || COPY_TO.equals(name); + } + + @ExportMessage + Object readMember(String memberName, + @Cached.Shared("memberName") @Cached("createIdentityProfile()") ValueProfile memberProfile) throws UnknownIdentifierException { + if (!isMemberReadable(memberName, memberProfile)) { + CompilerDirectives.transferToInterpreter(); + throw UnknownIdentifierException.create(memberName); + } + if (POINTER.equals(memberName)) { + return getPointer(); + } + if (COPY_FROM.equals(memberName)) { + return new DeviceArrayCopyFunction(this, DeviceArrayCopyFunction.CopyDirection.FROM_POINTER); + } + if (COPY_TO.equals(memberName)) { + return new DeviceArrayCopyFunction(this, DeviceArrayCopyFunction.CopyDirection.TO_POINTER); + } + CompilerDirectives.transferToInterpreter(); + throw UnknownIdentifierException.create(memberName); + } + + @ExportMessage + @SuppressWarnings("static-method") + boolean isMemberInvocable(String memberName) { + return COPY_FROM.equals(memberName) || COPY_TO.equals(memberName); + } + + @ExportMessage + Object invokeMember(String memberName, + Object[] arguments, + @CachedLibrary("this") InteropLibrary interopRead, + @CachedLibrary(limit = "1") InteropLibrary interopExecute) + throws UnsupportedTypeException, ArityException, UnsupportedMessageException, UnknownIdentifierException { + return interopExecute.execute(interopRead.readMember(this, memberName), arguments); + } + /** * Retrieve the total number of elements in the array, * or the size of the current dimension for matrices and tensors diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java index 791889ca..2cb3f6dc 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/DeviceArray.java @@ -56,53 +56,6 @@ @ExportLibrary(InteropLibrary.class) public final class DeviceArray extends AbstractArray implements TruffleObject { - private static final String POINTER = "pointer"; - private static final String COPY_FROM = "copyFrom"; - private static final String COPY_TO = "copyTo"; - - private static final MemberSet PUBLIC_MEMBERS = new MemberSet(COPY_FROM, COPY_TO); - private static final MemberSet MEMBERS = new MemberSet(POINTER, COPY_FROM, COPY_TO); - - @ExportLibrary(InteropLibrary.class) - public static final class MemberSet implements TruffleObject { - - @CompilationFinal(dimensions = 1) private final String[] values; - - public MemberSet(String... values) { - this.values = values; - } - - @ExportMessage - @SuppressWarnings("static-method") - public boolean hasArrayElements() { - return true; - } - - @ExportMessage - public long getArraySize() { - return values.length; - } - - @ExportMessage - public boolean isArrayElementReadable(long index) { - return index >= 0 && index < values.length; - } - - @ExportMessage - public Object readArrayElement(long index) throws InvalidArrayIndexException { - if ((index < 0) || (index >= values.length)) { - CompilerDirectives.transferToInterpreter(); - throw InvalidArrayIndexException.create(index); - } - return values[(int) index]; - } - - @TruffleBoundary - public boolean constainsValue(String name) { - return Arrays.asList(values).contains(name); - } - } - /** Total number of elements stored in the array. */ private final long numElements; @@ -255,61 +208,6 @@ public void writeArrayElementImpl(long index, Object value, } } - @ExportMessage - @SuppressWarnings("static-method") - boolean hasMembers() { - return true; - } - - @ExportMessage - @SuppressWarnings("static-method") - Object getMembers(boolean includeInternal) { - return includeInternal ? MEMBERS : PUBLIC_MEMBERS; - } - - @ExportMessage - @SuppressWarnings("static-method") - boolean isMemberReadable(String memberName, - @Shared("memberName") @Cached("createIdentityProfile()") ValueProfile memberProfile) { - String name = memberProfile.profile(memberName); - return POINTER.equals(name) || COPY_FROM.equals(name) || COPY_TO.equals(name); - } - - @ExportMessage - Object readMember(String memberName, - @Shared("memberName") @Cached("createIdentityProfile()") ValueProfile memberProfile) throws UnknownIdentifierException { - if (!isMemberReadable(memberName, memberProfile)) { - CompilerDirectives.transferToInterpreter(); - throw UnknownIdentifierException.create(memberName); - } - if (POINTER.equals(memberName)) { - return getPointer(); - } - if (COPY_FROM.equals(memberName)) { - return new DeviceArrayCopyFunction(this, DeviceArrayCopyFunction.CopyDirection.FROM_POINTER); - } - if (COPY_TO.equals(memberName)) { - return new DeviceArrayCopyFunction(this, DeviceArrayCopyFunction.CopyDirection.TO_POINTER); - } - CompilerDirectives.transferToInterpreter(); - throw UnknownIdentifierException.create(memberName); - } - - @ExportMessage - @SuppressWarnings("static-method") - boolean isMemberInvocable(String memberName) { - return COPY_FROM.equals(memberName) || COPY_TO.equals(memberName); - } - - @ExportMessage - Object invokeMember(String memberName, - Object[] arguments, - @CachedLibrary("this") InteropLibrary interopRead, - @CachedLibrary(limit = "1") InteropLibrary interopExecute) - throws UnsupportedTypeException, ArityException, UnsupportedMessageException, UnknownIdentifierException { - return interopExecute.execute(interopRead.readMember(this, memberName), arguments); - } - @ExportMessage @SuppressWarnings("static-method") boolean isPointer() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java index 9f4575a8..4cee0570 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArray.java @@ -29,7 +29,6 @@ package com.nvidia.grcuda.array; import com.nvidia.grcuda.ElementType; -import com.nvidia.grcuda.array.DeviceArray.MemberSet; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.LittleEndianNativeArrayView; import com.oracle.truffle.api.CompilerDirectives; @@ -48,9 +47,6 @@ @ExportLibrary(InteropLibrary.class) public class MultiDimDeviceArray extends AbstractArray implements TruffleObject { - private static final MemberSet PUBLIC_MEMBERS = new MemberSet(); - private static final MemberSet MEMBERS = new MemberSet("pointer"); - /** Number of elements in each dimension. */ private final long[] elementsPerDimension; @@ -182,7 +178,6 @@ protected void finalize() throws Throwable { // Implementation of InteropLibrary // - @ExportMessage @SuppressWarnings("static-method") @Override @@ -208,32 +203,6 @@ Object readArrayElement(long index) throws InvalidArrayIndexException { return new MultiDimDeviceArrayView(this, 1, offset, stridePerDimension[1]); } - @ExportMessage - boolean hasMembers() { - return true; - } - - @ExportMessage - Object getMembers(boolean includeInternal) { - return includeInternal ? MEMBERS : PUBLIC_MEMBERS; - } - - @ExportMessage - boolean isMemberReadable(String member, - @Shared("member") @Cached("createIdentityProfile()") ValueProfile memberProfile) { - return "pointer".equals(memberProfile.profile(member)); - } - - @ExportMessage - Object readMember(String member, - @Shared("member") @Cached("createIdentityProfile()") ValueProfile memberProfile) throws UnknownIdentifierException { - if (!isMemberReadable(member, memberProfile)) { - CompilerDirectives.transferToInterpreter(); - throw UnknownIdentifierException.create(member); - } - return getPointer(); - } - @ExportMessage @SuppressWarnings("static-method") boolean isPointer() { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java index 637f5648..b1ba347e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/array/MultiDimDeviceArrayView.java @@ -56,7 +56,7 @@ public final class MultiDimDeviceArrayView extends AbstractArray implements Truf super(mdDeviceArray.grCUDAExecutionContext, mdDeviceArray.elementType, mdDeviceArray.isLastComputationArrayAccess()); this.mdDeviceArray = mdDeviceArray; this.thisDimension = dim; - this.offset = offset; + this.offset = offset; // Index at which this array view starts; this.stride = stride; // Register the array in the GrCUDAExecutionContext; this.registerArray(); @@ -74,9 +74,10 @@ public long getStride() { return stride; } + // FIXME: when column-major, low-level memcpy is accessing columns instead of rows! @Override public final long getPointer() { - return mdDeviceArray.getPointer(); + return mdDeviceArray.getPointer() + offset * elementType.getSizeBytes(); } /** diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java index eb3db253..ed23f8e6 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayCopyFunction.java @@ -27,7 +27,7 @@ */ package com.nvidia.grcuda.functions; -import com.nvidia.grcuda.array.DeviceArray; +import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.gpu.computation.ArrayReadWriteFunctionExecution; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.interop.ArityException; @@ -47,11 +47,11 @@ public enum CopyDirection { TO_POINTER } - private final DeviceArray deviceArray; + private final AbstractArray array; private final CopyDirection direction; - public DeviceArrayCopyFunction(DeviceArray deviceArray, CopyDirection direction) { - this.deviceArray = deviceArray; + public DeviceArrayCopyFunction(AbstractArray array, CopyDirection direction) { + this.array = array; this.direction = direction; } @@ -88,7 +88,7 @@ Object execute(Object[] arguments, @CachedLibrary(limit = "3") InteropLibrary numElementsAccess) throws UnsupportedTypeException, ArityException, IndexOutOfBoundsException { long numElements; if (arguments.length == 1) { - numElements = deviceArray.getArraySize(); + numElements = array.getArraySize(); } else if (arguments.length == 2) { numElements = extractNumber(arguments[1], "numElements", numElementsAccess); } else { @@ -96,12 +96,12 @@ Object execute(Object[] arguments, throw ArityException.create(1, arguments.length); } long pointer = extractPointer(arguments[0], "fromPointer", pointerAccess); - new ArrayReadWriteFunctionExecution<>(deviceArray, direction, pointer, numElements).schedule(); - return deviceArray; + new ArrayReadWriteFunctionExecution(array, direction, pointer, numElements).schedule(); + return array; } @Override public String toString() { - return "DeviceArrayCopyFunction(deviceArray=" + deviceArray + ", direction=" + direction.name() + ")"; + return "DeviceArrayCopyFunction(deviceArray=" + array + ", direction=" + direction.name() + ")"; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java index 0f56e892..31611962 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/DeviceArrayFunction.java @@ -32,7 +32,7 @@ import com.nvidia.grcuda.GrCUDAException; import com.nvidia.grcuda.TypeException; import com.nvidia.grcuda.array.DeviceArray; -import com.nvidia.grcuda.array.DeviceArray.MemberSet; +import com.nvidia.grcuda.MemberSet; import com.nvidia.grcuda.array.MultiDimDeviceArray; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.oracle.truffle.api.CompilerDirectives; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ArgumentSet.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ArgumentSet.java index 4be2aaa4..e453ea82 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ArgumentSet.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ArgumentSet.java @@ -29,7 +29,7 @@ import org.graalvm.collections.EconomicMap; -import com.nvidia.grcuda.array.DeviceArray.MemberSet; +import com.nvidia.grcuda.MemberSet; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.InteropLibrary; import com.oracle.truffle.api.interop.TruffleObject; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapArgObject.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapArgObject.java index 1822ff6c..a3605fa4 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapArgObject.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapArgObject.java @@ -29,7 +29,7 @@ import static com.nvidia.grcuda.functions.map.MapFunction.checkArity; -import com.nvidia.grcuda.array.DeviceArray.MemberSet; +import com.nvidia.grcuda.MemberSet; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapFunction.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapFunction.java index e673c373..5bdbcbd2 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapFunction.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/MapFunction.java @@ -29,7 +29,7 @@ import java.util.Arrays; -import com.nvidia.grcuda.array.DeviceArray.MemberSet; +import com.nvidia.grcuda.MemberSet; import com.nvidia.grcuda.GrCUDAInternalException; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ShreddedObject.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ShreddedObject.java index 0db6dcf9..a46a3c10 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ShreddedObject.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/functions/map/ShreddedObject.java @@ -27,7 +27,7 @@ */ package com.nvidia.grcuda.functions.map; -import com.nvidia.grcuda.array.DeviceArray.MemberSet; +import com.nvidia.grcuda.MemberSet; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.interop.InteropLibrary; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Device.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Device.java index 13c5681c..da269a3a 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Device.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Device.java @@ -28,7 +28,7 @@ */ package com.nvidia.grcuda.gpu; -import com.nvidia.grcuda.array.DeviceArray.MemberSet; +import com.nvidia.grcuda.MemberSet; import com.nvidia.grcuda.NoneValue; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java index 802bbe28..5d197725 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/Kernel.java @@ -30,7 +30,7 @@ import com.nvidia.grcuda.GrCUDAInternalException; import com.nvidia.grcuda.array.DeviceArray; -import com.nvidia.grcuda.array.DeviceArray.MemberSet; +import com.nvidia.grcuda.MemberSet; import com.nvidia.grcuda.array.MultiDimDeviceArray; import com.nvidia.grcuda.gpu.computation.ComputationArgument; import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java index 27094c14..6604f7a7 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java @@ -3,7 +3,6 @@ import com.nvidia.grcuda.NoneValue; import com.nvidia.grcuda.array.AbstractArray; import com.nvidia.grcuda.functions.DeviceArrayCopyFunction; -import com.nvidia.grcuda.gpu.executioncontext.AbstractGrCUDAExecutionContext; import com.nvidia.grcuda.gpu.stream.CUDAStream; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.interop.UnsupportedTypeException; @@ -14,12 +13,12 @@ * Computational elements that represents a low-level memory copy from/to a {@link AbstractArray} * @param the type of {@link AbstractArray} used in the copy */ -public class ArrayReadWriteFunctionExecution extends GrCUDAComputationalElement { +public class ArrayReadWriteFunctionExecution extends GrCUDAComputationalElement { /** * The {@link AbstractArray} used in the copy; */ - private final T array; + private final AbstractArray array; /** * Whether this computations copies data from the array or writes to it; */ @@ -35,7 +34,7 @@ public class ArrayReadWriteFunctionExecution extends Gr protected boolean isComputationArrayAccess = true; - public ArrayReadWriteFunctionExecution(T array, DeviceArrayCopyFunction.CopyDirection direction, long pointer, long numElements) { + public ArrayReadWriteFunctionExecution(AbstractArray array, DeviceArrayCopyFunction.CopyDirection direction, long pointer, long numElements) { super(array.getGrCUDAExecutionContext(), new ArrayExecutionInitializer<>(array, direction.equals(DeviceArrayCopyFunction.CopyDirection.TO_POINTER))); this.array = array; this.direction = direction; From 14fd3e267d580a6cc238bc8ae4ef39d61bff50a0 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 19 Jun 2020 14:16:05 +0200 Subject: [PATCH 093/236] added block size as benchmark parameter --- .../python/benchmark/bench/bench_1.py | 14 ++-- .../python/benchmark/bench/bench_2.py | 2 +- .../python/benchmark/bench/bench_3.py | 2 +- .../python/benchmark/bench/bench_4.py | 2 +- .../python/benchmark/bench/bench_5.py | 2 +- .../python/benchmark/bench/bench_6.py | 27 +++---- .../python/benchmark/bench/bench_7.py | 43 +++-------- .../python/benchmark/bench/bench_8.py | 35 ++++----- .../resources/python/benchmark/benchmark.py | 28 +++++-- .../python/benchmark/benchmark_main.py | 73 ++++++++++++++----- .../python/benchmark/benchmark_result.py | 30 +++++--- 11 files changed, 149 insertions(+), 109 deletions(-) diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index 8304033a..ebd58d91 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -4,14 +4,12 @@ import numpy as np from random import random, randint, seed -from benchmark import Benchmark, time_phase +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D from benchmark_result import BenchmarkResult ############################## ############################## -NUM_THREADS_PER_BLOCK = 1024 - SQUARE_KERNEL = """ extern "C" __global__ void square(const float* x, float* y, int n) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { @@ -79,10 +77,12 @@ def __init__(self, benchmark: BenchmarkResult): self.cpu_result = 0 self.num_blocks = 64 + self.block_size = DEFAULT_BLOCK_SIZE_1D @time_phase("allocation") - def alloc(self, size: int): + def alloc(self, size: int, block_size: dict = None) -> None: self.size = size + self.block_size = block_size["block_size_1d"] # Allocate 2 vectors; self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") @@ -118,14 +118,14 @@ def execute(self) -> object: # A, B. Call the kernel. The 2 computations are independent, and can be done in parallel; start = time.time() - self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.x1, self.size) - self.square_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.y1, self.size) + self.square_kernel(self.num_blocks, self.block_size)(self.x, self.x1, self.size) + self.square_kernel(self.num_blocks, self.block_size)(self.y, self.y1, self.size) end = time.time() self.benchmark.add_phase({"name": "square", "time_sec": end - start}) # C. Compute the sum of the result; start = time.time() - self.reduce_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x1, self.y1, self.res, self.size) + self.reduce_kernel(self.num_blocks, self.block_size)(self.x1, self.y1, self.res, self.size) end = time.time() self.benchmark.add_phase({"name": "reduce", "time_sec": end - start}) diff --git a/projects/resources/python/benchmark/bench/bench_2.py b/projects/resources/python/benchmark/bench/bench_2.py index 5c14fbb3..8a6a4554 100644 --- a/projects/resources/python/benchmark/bench/bench_2.py +++ b/projects/resources/python/benchmark/bench/bench_2.py @@ -95,7 +95,7 @@ def __init__(self, benchmark: BenchmarkResult): self.reduce_kernel = None self.cpu_result = 0 - def alloc(self, size: int): + def alloc(self, size: int, block_size: dict = None) -> None: self.size = size self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK diff --git a/projects/resources/python/benchmark/bench/bench_3.py b/projects/resources/python/benchmark/bench/bench_3.py index a3bef0db..660af7b1 100644 --- a/projects/resources/python/benchmark/bench/bench_3.py +++ b/projects/resources/python/benchmark/bench/bench_3.py @@ -72,7 +72,7 @@ def __init__(self, benchmark: BenchmarkResult): self.cpu_result = 0 self.num_iter = NUM_ITER - def alloc(self, size: int): + def alloc(self, size: int, block_size: dict = None) -> None: self.size = size self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK diff --git a/projects/resources/python/benchmark/bench/bench_4.py b/projects/resources/python/benchmark/bench/bench_4.py index 2b23befb..2c43faad 100644 --- a/projects/resources/python/benchmark/bench/bench_4.py +++ b/projects/resources/python/benchmark/bench/bench_4.py @@ -71,7 +71,7 @@ def __init__(self, benchmark: BenchmarkResult): self.cpu_result = 0 @time_phase("allocation") - def alloc(self, size: int): + def alloc(self, size: int, block_size: dict = None) -> None: self.size = size self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK diff --git a/projects/resources/python/benchmark/bench/bench_5.py b/projects/resources/python/benchmark/bench/bench_5.py index 1fd20fbd..bd24fc35 100644 --- a/projects/resources/python/benchmark/bench/bench_5.py +++ b/projects/resources/python/benchmark/bench/bench_5.py @@ -84,7 +84,7 @@ def __init__(self, benchmark: BenchmarkResult): self.cpu_result = None @time_phase("allocation") - def alloc(self, size: int): + def alloc(self, size: int, block_size: dict = None) -> None: self.size = size self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index aca41013..6e992ef4 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -4,7 +4,7 @@ import numpy as np from random import random, randint, seed -from benchmark import Benchmark, time_phase +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D from benchmark_result import BenchmarkResult ############################## @@ -185,6 +185,7 @@ def __init__(self, benchmark: BenchmarkResult): self.num_blocks_size = 64 self.num_blocks_feat = 64 + self.block_size = DEFAULT_BLOCK_SIZE_1D self.x_cpu = None self.nb_feat_log_prob_cpu = None @@ -195,9 +196,9 @@ def __init__(self, benchmark: BenchmarkResult): self.r2_cpu = None @time_phase("allocation") - def alloc(self, size: int): + def alloc(self, size: int, block_size: dict = None) -> None: self.size = size - self.num_blocks_size = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + self.block_size = block_size["block_size_1d"] # Allocate vectors; self.x = polyglot.eval(language="grcuda", string=f"int[{size * self.num_features}]") @@ -269,43 +270,43 @@ def execute(self) -> object: # RR - 1. start = time.time() - self.rr_1(self.num_blocks_feat, NUM_THREADS_PER_BLOCK)(self.x, self.z, self.size, self.num_features) + self.rr_1(self.num_blocks_feat, self.block_size)(self.x, self.z, self.size, self.num_features) end = time.time() self.benchmark.add_phase({"name": "rr_1", "time_sec": end - start}) # NB - 1. start = time.time() - self.nb_1(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.x, self.nb_feat_log_prob, self.r1, self.size, self.num_features, self.num_classes) + self.nb_1(self.num_blocks_size, self.block_size)(self.x, self.nb_feat_log_prob, self.r1, self.size, self.num_features, self.num_classes) end = time.time() self.benchmark.add_phase({"name": "nb_1", "time_sec": end - start}) # RR - 2. start = time.time() - self.rr_2(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.z, self.ridge_coeff, self.r2, self.size, self.num_features, self.num_classes) + self.rr_2(self.num_blocks_size, self.block_size)(self.z, self.ridge_coeff, self.r2, self.size, self.num_features, self.num_classes) end = time.time() self.benchmark.add_phase({"name": "rr_2", "time_sec": end - start}) # NB - 2. start = time.time() - self.nb_2(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_amax, self.size, self.num_classes) + self.nb_2(self.num_blocks_size, self.block_size)(self.r1, self.nb_amax, self.size, self.num_classes) end = time.time() self.benchmark.add_phase({"name": "nb_2", "time_sec": end - start}) # NB - 3. start = time.time() - self.nb_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_amax, self.nb_l, self.size, self.num_classes) + self.nb_3(self.num_blocks_size, self.block_size)(self.r1, self.nb_amax, self.nb_l, self.size, self.num_classes) end = time.time() self.benchmark.add_phase({"name": "nb_3", "time_sec": end - start}) # RR - 3. start = time.time() - self.rr_3(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r2, self.ridge_intercept, self.size, self.num_classes) + self.rr_3(self.num_blocks_size, self.block_size)(self.r2, self.ridge_intercept, self.size, self.num_classes) end = time.time() self.benchmark.add_phase({"name": "rr_3", "time_sec": end - start}) # NB - 4. start = time.time() - self.nb_4(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.nb_l, self.size, self.num_classes) + self.nb_4(self.num_blocks_size, self.block_size)(self.r1, self.nb_l, self.size, self.num_classes) end = time.time() self.benchmark.add_phase({"name": "nb_4", "time_sec": end - start}) @@ -313,14 +314,14 @@ def execute(self) -> object: # Softmax normalization; start = time.time() - self.softmax(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.size, self.num_classes) - self.softmax(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r2, self.size, self.num_classes) + self.softmax(self.num_blocks_size, self.block_size)(self.r1, self.size, self.num_classes) + self.softmax(self.num_blocks_size, self.block_size)(self.r2, self.size, self.num_classes) end = time.time() self.benchmark.add_phase({"name": "softmax", "time_sec": end - start}) # Prediction; start = time.time() - self.argmax(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.r1, self.r2, self.r, self.size, self.num_classes) + self.argmax(self.num_blocks_size, self.block_size)(self.r1, self.r2, self.r, self.size, self.num_classes) end = time.time() self.benchmark.add_phase({"name": "argmax", "time_sec": end - start}) diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index c7d2fd90..2f5ec419 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -4,7 +4,7 @@ import numpy as np from random import random, randint, seed, sample -from benchmark import Benchmark, time_phase +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D from benchmark_result import BenchmarkResult ############################## @@ -100,15 +100,17 @@ def __init__(self, benchmark: BenchmarkResult): self.gpu_result = None self.num_blocks_size = 32 + self.block_size = None self.spmv_kernel = None self.sum_kernel = None self.divide_kernel = None @time_phase("allocation") - def alloc(self, size: int): + def alloc(self, size: int, block_size: dict = None) -> None: self.size = size self.num_nnz = size * self.max_degree + self.block_size = block_size["block_size_1d"] self.gpu_result = np.zeros(self.size) @@ -138,11 +140,7 @@ def alloc(self, size: int): def init(self): def create_csr_from_coo(x_in, y_in, val_in, size, degree=None): - start = time.time() ptr_out = np.zeros(size + 1, dtype=np.int32) - end = time.time() - print("\tinit zeros=", end - start, "sec") - start = time.time() if degree: ptr_out[1:] = degree @@ -151,19 +149,13 @@ def create_csr_from_coo(x_in, y_in, val_in, size, degree=None): for v, c in zip(values, count): ptr_out[v + 1] = c - end = time.time() - print("\tinit ptr=", end - start, "sec") - start = time.time() ptr_out = np.cumsum(ptr_out, dtype=np.int32) - end = time.time() - print("\tinit cumsum=", end - start, "sec") return ptr_out, y_in, val_in self.random_seed = randint(0, 10000000) seed(self.random_seed) # Create a random COO graph; - start = time.time() x = [0] * self.size * self.max_degree y = [0] * self.size * self.max_degree val = [1] * self.size * self.max_degree @@ -173,24 +165,12 @@ def create_csr_from_coo(x_in, y_in, val_in, size, degree=None): for j, e in enumerate(edges): x[i * self.max_degree + j] = i y[i * self.max_degree + j] = e - end = time.time() - print("init coo=", end - start, "sec") # Turn the COO into CSR and CSC representations; - start = time.time() self.ptr_cpu, self.idx_cpu, self.val_cpu = create_csr_from_coo(x, y, val, self.size, degree=self.max_degree) - end = time.time() - print("init csr=", end - start, "sec") - start = time.time() x2, y2 = zip(*sorted(zip(y, x))) - end = time.time() - print("init sort=", end - start, "sec") - start = time.time() self.ptr2_cpu, self.idx2_cpu, self.val2_cpu = create_csr_from_coo(x2, y2, val, self.size) - end = time.time() - print("init csr2=", end - start, "sec") - start = time.time() # Low-level copies from numpy array, they are faster but require slow casting to numpy arrays; # self.ptr.copyFrom(int(np.int64(self.ptr_cpu.ctypes.data)), len(self.ptr)) # self.ptr2.copyFrom(int(np.int64(self.ptr2_cpu.ctypes.data)), len(self.ptr2)) @@ -207,9 +187,6 @@ def create_csr_from_coo(x_in, y_in, val_in, size, degree=None): self.val[i] = int(self.val_cpu[i]) self.val2[i] = int(self.val2_cpu[i]) - end = time.time() - print("init copy=", end - start, "sec") - @time_phase("reset_result") def reset_result(self) -> None: for i in range(self.size): @@ -225,35 +202,35 @@ def execute(self) -> object: for i in range(self.num_iterations): # Authorities; start = time.time() - self.spmv_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.ptr2, self.idx2, self.val2, self.hub1, self.auth2, self.size, self.num_nnz) + self.spmv_kernel(self.num_blocks_size, self.block_size)(self.ptr2, self.idx2, self.val2, self.hub1, self.auth2, self.size, self.num_nnz) end = time.time() self.benchmark.add_phase({"name": f"spmv_a_{i}", "time_sec": end - start}) # Hubs; start = time.time() - self.spmv_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.ptr, self.idx, self.val, self.auth1, self.hub2, self.size, self.num_nnz) + self.spmv_kernel(self.num_blocks_size, self.block_size)(self.ptr, self.idx, self.val, self.auth1, self.hub2, self.size, self.num_nnz) end = time.time() self.benchmark.add_phase({"name": f"spmv_h_{i}", "time_sec": end - start}) # Normalize authorities; start = time.time() - self.sum_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.auth2, self.auth_norm, self.size) + self.sum_kernel(self.num_blocks_size, self.block_size)(self.auth2, self.auth_norm, self.size) end = time.time() self.benchmark.add_phase({"name": f"sum_a_{i}", "time_sec": end - start}) # Normalize hubs; start = time.time() - self.sum_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.hub2, self.hub_norm, self.size) + self.sum_kernel(self.num_blocks_size, self.block_size)(self.hub2, self.hub_norm, self.size) end = time.time() self.benchmark.add_phase({"name": f"sum_h_{i}", "time_sec": end - start}) start = time.time() - self.divide_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.auth2, self.auth1, self.auth_norm, self.size) + self.divide_kernel(self.num_blocks_size, self.block_size)(self.auth2, self.auth1, self.auth_norm, self.size) end = time.time() self.benchmark.add_phase({"name": f"divide_a_{i}", "time_sec": end - start}) start = time.time() - self.divide_kernel(self.num_blocks_size, NUM_THREADS_PER_BLOCK)(self.hub2, self.hub1, self.hub_norm, self.size) + self.divide_kernel(self.num_blocks_size, self.block_size)(self.hub2, self.hub1, self.hub_norm, self.size) end = time.time() self.benchmark.add_phase({"name": f"divide_h_{i}", "time_sec": end - start}) diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index b962e86f..0959f625 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -4,7 +4,7 @@ import numpy as np from random import random, randint, seed, sample -from benchmark import Benchmark, time_phase +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D, DEFAULT_BLOCK_SIZE_2D from benchmark_result import BenchmarkResult ############################## @@ -238,10 +238,11 @@ def __init__(self, benchmark: BenchmarkResult): self.cpu_result = None self.gpu_result = None - self.num_blocks_size = 0 - self.num_blocks_size_2d = 0 self.num_blocks_per_processor = 64 # i.e. 8 * number of SM on the GTX960 + self.block_size_1d = DEFAULT_BLOCK_SIZE_1D + self.block_size_2d = DEFAULT_BLOCK_SIZE_2D + self.gaussian_blur_kernel = None self.sobel_kernel = None self.extend_kernel = None @@ -251,10 +252,10 @@ def __init__(self, benchmark: BenchmarkResult): self.minimum_kernel = None @time_phase("allocation") - def alloc(self, size: int): + def alloc(self, size: int, block_size: dict = None) -> None: self.size = size - self.num_blocks_size_2d = (size + NUM_THREADS_PER_BLOCK_2D - 1) // NUM_THREADS_PER_BLOCK_2D - self.num_blocks_size = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + self.block_size_1d = block_size["block_size_1d"] + self.block_size_2d = block_size["block_size_2d"] self.gpu_result = np.zeros(self.size) @@ -337,58 +338,58 @@ def execute(self) -> object: # Blur - Small; start = time.time() a = 32 - self.gaussian_blur_kernel((a, a), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_small_diameter**2)\ + self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_small_diameter**2)\ (self.image, self.blurred_small, self.size, self.size, self.kernel_small, self.kernel_small_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_small", "time_sec": end - start}) # Blur - Large; start = time.time() - self.gaussian_blur_kernel((a, a), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_large_diameter**2)\ + self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_large_diameter**2)\ (self.image, self.blurred_large, self.size, self.size, self.kernel_large, self.kernel_large_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_large", "time_sec": end - start}) # Blur - Unsharpen; start = time.time() - self.gaussian_blur_kernel((a, a), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D), 4 * self.kernel_unsharpen_diameter**2)\ + self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_unsharpen_diameter**2)\ (self.image, self.blurred_unsharpen, self.size, self.size, self.kernel_unsharpen, self.kernel_unsharpen_diameter) end = time.time() self.benchmark.add_phase({"name": "blur_unsharpen", "time_sec": end - start}) # Sobel filter (edge detection); start = time.time() - self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ + self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (self.block_size_2d, self.block_size_2d))\ (self.blurred_small, self.mask_small, self.size, self.size) end = time.time() self.benchmark.add_phase({"name": "sobel_small", "time_sec": end - start}) start = time.time() - self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (NUM_THREADS_PER_BLOCK_2D, NUM_THREADS_PER_BLOCK_2D))\ + self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (self.block_size_2d, self.block_size_2d))\ (self.blurred_large, self.mask_large, self.size, self.size) end = time.time() self.benchmark.add_phase({"name": "sobel_large", "time_sec": end - start}) # Extend large edge detection mask; start = time.time() - self.maximum_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)(self.mask_large, self.maximum, self.size**2) - self.minimum_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)(self.mask_large, self.minimum, self.size**2) - self.extend_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)(self.mask_large, self.minimum, self.maximum, self.size**2) + self.maximum_kernel(self.num_blocks_per_processor, self.block_size_1d)(self.mask_large, self.maximum, self.size**2) + self.minimum_kernel(self.num_blocks_per_processor, self.block_size_1d)(self.mask_large, self.minimum, self.size**2) + self.extend_kernel(self.num_blocks_per_processor, self.block_size_1d)(self.mask_large, self.minimum, self.maximum, self.size**2) end = time.time() self.benchmark.add_phase({"name": "extend", "time_sec": end - start}) # Unsharpen; start = time.time() - self.unsharpen_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)\ + self.unsharpen_kernel(self.num_blocks_per_processor, self.block_size_1d)\ (self.image, self.blurred_unsharpen, self.image_unsharpen, self.unsharpen_amount, self.size * self.size) end = time.time() self.benchmark.add_phase({"name": "unsharpen", "time_sec": end - start}) # Combine results; start = time.time() - self.combine_mask_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)\ + self.combine_mask_kernel(self.num_blocks_per_processor, self.block_size_1d)\ (self.image_unsharpen, self.blurred_large, self.mask_large, self.image2, self.size * self.size) - self.combine_mask_kernel(self.num_blocks_per_processor, NUM_THREADS_PER_BLOCK)\ + self.combine_mask_kernel(self.num_blocks_per_processor, self.block_size_1d)\ (self.image2, self.blurred_small, self.mask_small, self.image3, self.size * self.size) end = time.time() self.benchmark.add_phase({"name": "combine", "time_sec": end - start}) diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py index 24daefbb..38fc380c 100644 --- a/projects/resources/python/benchmark/benchmark.py +++ b/projects/resources/python/benchmark/benchmark.py @@ -3,6 +3,8 @@ import time from typing import Callable +DEFAULT_BLOCK_SIZE_1D = 32 +DEFAULT_BLOCK_SIZE_2D = 8 def time_phase(phase_name: str) -> Callable: """ @@ -29,14 +31,17 @@ class Benchmark(ABC): def __init__(self, name: str, benchmark: BenchmarkResult): self.name = name self.benchmark = benchmark - self.current_iter = 0 + self.tot_iter = 0 self.random_seed = 42 # Default random seed, it will be overwritten with a random one; + self.block_size_1d = DEFAULT_BLOCK_SIZE_1D + self.block_size_2d = DEFAULT_BLOCK_SIZE_2D @abstractmethod - def alloc(self, size: int) -> None: + def alloc(self, size: int, block_size: dict = None) -> None: """ Allocate new memory on GPU used for the benchmark; :param size: base factor used in the memory allocation, e.g. size of each array + :param block_size: optional dictionary containing block size for 1D and 2D kernels """ pass @@ -72,14 +77,21 @@ def execute(self) -> object: """ pass - def run(self, policy: str, size: int, realloc: bool, reinit: bool) -> None: + def run(self, num_iter: int, policy: str, size: int, realloc: bool, reinit: bool, block_size: dict = None) -> None: + + # Fix missing block size; + if "block_size_1d" not in block_size: + block_size["block_size_1d"] = DEFAULT_BLOCK_SIZE_1D + if "block_size_2d" not in block_size: + block_size["block_size_2d"] = DEFAULT_BLOCK_SIZE_2D self.benchmark.start_new_benchmark(name=self.name, policy=policy, size=size, realloc=realloc, reinit=reinit, - iteration=self.current_iter) + block_size=block_size, + iteration=num_iter) # TODO: set the execution policy; @@ -87,10 +99,10 @@ def run(self, policy: str, size: int, realloc: bool, reinit: bool) -> None: start = time.time() # Allocate memory for the benchmark; - if self.current_iter == 0 or realloc: - self.alloc(size) + if num_iter == 0 or realloc: + self.alloc(size, block_size) # Initialize memory for the benchmark; - if self.current_iter == 0 or reinit or reinit: + if num_iter == 0 or reinit or reinit: self.init() # Reset the result; @@ -110,4 +122,4 @@ def run(self, policy: str, size: int, realloc: bool, reinit: bool) -> None: # Write to file the current result; self.benchmark.save_to_file() # Book-keeping; - self.current_iter += 1 + self.tot_iter += 1 diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index f03063fe..387adc7f 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -51,6 +51,30 @@ ############################## ############################## + +def create_block_size_list(args) -> list: + block_size = None + block_size_1d = args.block_size_1d + block_size_2d = args.block_size_2d + if (not block_size_1d) and block_size_2d: # Only 2D block size; + block_size = [{"block_size_2d": b} for b in block_size_2d] + elif (not block_size_2d) and block_size_1d: # Only 1D block size; + block_size = [{"block_size_1d": b} for b in block_size_1d] + elif block_size_1d and block_size_2d: # Both 1D and 2D size; + # Ensure they have the same size; + if len(block_size_2d) > len(block_size_1d): + block_size_1d = block_size_1d + [block_size_1d[-1]] * (len(block_size_2d) - len(block_size_1d)) + elif len(block_size_1d) > len(block_size_2d): + block_size_2d = block_size_2d + [block_size_2d[-1]] * (len(block_size_1d) - len(block_size_2d)) + block_size = [{"block_size_1d": x[0], "block_size_2d": x[1]} for x in zip(block_size_1d, block_size_2d)] + else: + block_size = [{}] + return block_size + +############################## +############################## + + if __name__ == "__main__": parser = argparse.ArgumentParser(description="measure GrCUDA execution time") @@ -69,12 +93,16 @@ help="Validate the result of each benchmark using the CPU") parser.add_argument("--no_cpu_validation", action="store_false", dest="cpu_validation", help="Validate the result of each benchmark using the CPU") - parser.add_argument("-b", "--benchmark", + parser.add_argument("-b", "--benchmark", nargs="*", help="If present, run the benchmark only for the specified kernel") parser.add_argument("--policy", help="If present, run the benchmark only with the selected policy") - parser.add_argument("-n", "--size", metavar="N", type=int, + parser.add_argument("-n", "--size", metavar="N", type=int, nargs="*", help="Override the input data size used for the benchmarks") + parser.add_argument("--block_size_1d", metavar="N", type=int, nargs="*", + help="Number of threads per block when using 1D kernels") + parser.add_argument("--block_size_2d", metavar="N", type=int, nargs="*", + help="Number of threads per block when using 2D kernels") parser.add_argument("-r", "--random", action="store_true", help="Initialize benchmarks randomly whenever possible") parser.set_defaults(cpu_validation=BenchmarkResult.DEFAULT_CPU_VALIDATION) @@ -93,20 +121,28 @@ # Create a new benchmark result instance; benchmark_res = BenchmarkResult(debug=debug, num_iterations=num_iter, output_path=output_path, cpu_validation=cpu_validation, random_init=random_init) + if benchmark_res.debug: + BenchmarkResult.log_message(f"using CPU validation: {cpu_validation}") - BenchmarkResult.log_message(f"using CPU validation: {cpu_validation}") + if args.benchmark: + if benchmark_res.debug: + BenchmarkResult.log_message(f"using only benchmark: {args.benchmark}") + benchmarks = {b: benchmarks[b] for b in args.benchmark} - if args.benchmark and benchmark_res.debug: - BenchmarkResult.log_message(f"using only benchmark: {args.benchmark}") - benchmarks = {args.benchmark: benchmarks[args.benchmark]} - - if args.policy and benchmark_res.debug: - BenchmarkResult.log_message(f"using only type: {args.policy}") + if args.policy: + if benchmark_res.debug: + BenchmarkResult.log_message(f"using only type: {args.policy}") policies = {n: [args.policy] for n in policies.keys()} - if args.size and benchmark_res.debug: - BenchmarkResult.log_message(f"using only size: {args.size}") - num_elem = {n: [args.size] for n in num_elem.keys()} + if args.size: + if benchmark_res.debug: + BenchmarkResult.log_message(f"using only size: {args.size}") + num_elem = {n: args.size for n in num_elem.keys()} + + # Setup the block size for each benchmark; + block_sizes = create_block_size_list(args) + if (args.block_size_1d or args.block_size_2d) and benchmark_res.debug: + BenchmarkResult.log_message(f"using block sizes: {block_sizes}") # Execute each test; for b_name, b in benchmarks.items(): @@ -115,9 +151,10 @@ for n in num_elem[b_name]: for re in realloc: for ri in reinit: - for i in range(num_iter): - benchmark.run(policy=p, size=n, realloc=re, reinit=ri) - # Print the summary of this block; - if benchmark_res.debug: - benchmark_res.print_current_summary(name=b_name, policy=p, size=n, - realloc=re, reinit=ri, skip=3) + for block_size in block_sizes: + for i in range(num_iter): + benchmark.run(num_iter=i, policy=p, size=n, realloc=re, reinit=ri, block_size=block_size) + # Print the summary of this block; + if benchmark_res.debug: + benchmark_res.print_current_summary(name=b_name, policy=p, size=n, + realloc=re, reinit=ri, block_size=block_size, skip=3) diff --git a/projects/resources/python/benchmark/benchmark_result.py b/projects/resources/python/benchmark/benchmark_result.py index e2952e94..ba57d4de 100644 --- a/projects/resources/python/benchmark/benchmark_result.py +++ b/projects/resources/python/benchmark/benchmark_result.py @@ -41,13 +41,17 @@ def __init__(self, if self.debug: BenchmarkResult.log_message(f"storing results in {self._output_path}") + @staticmethod + def create_block_size_key(block_size: dict) -> str: + return f"{block_size['block_size_1d']},{block_size['block_size_2d']}" + def default_output_file_name(self) -> str: output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") file_name = f"{output_date}_{self.num_iterations}.json" return os.path.join(self.DEFAULT_RES_FOLDER, file_name) def start_new_benchmark(self, name: str, policy: str, size: int, - realloc: bool, reinit: bool, iteration: int) -> None: + realloc: bool, reinit: bool, block_size: dict, iteration: int) -> None: """ Benchmark results are stored in a nested dictionary with the following structure. self.results["benchmarks"]->{benchmark_name}->{policy}->{size}->{realloc}->{reinit}->{actual result} @@ -57,6 +61,7 @@ def start_new_benchmark(self, name: str, policy: str, size: int, :param size: size of the input data :param realloc: if reallocation is performed :param reinit: if re-initialization is performed + :param block_size: dictionary that specifies the number of threads per block :param iteration: current iteration """ @@ -85,16 +90,22 @@ def start_new_benchmark(self, name: str, policy: str, size: int, dict_reinit = {} dict_realloc[realloc] = dict_reinit # 5. Reinit options; - self._dict_current = {"phases": [], "iteration": iteration} if reinit in dict_reinit: - dict_reinit[reinit] += [self._dict_current] + dict_block = dict_reinit[reinit] + else: + dict_block = {} + dict_reinit[reinit] = dict_block + # 6. Block size options; + self._dict_current = {"phases": [], "iteration": iteration} + if tuple(block_size.values()) in dict_block: + dict_block[BenchmarkResult.create_block_size_key(block_size)] += [self._dict_current] else: - dict_reinit[reinit] = [self._dict_current] + dict_block[BenchmarkResult.create_block_size_key(block_size)] = [self._dict_current] if self.debug: BenchmarkResult.log_message( f"starting benchmark={name}, iter={iteration + 1}/{self.num_iterations}, " - f"policy={policy}, size={size}, realloc={realloc}, reinit={reinit}") + f"policy={policy}, size={size}, realloc={realloc}, reinit={reinit}, block_size={BenchmarkResult.create_block_size_key(block_size)}") def add_to_benchmark(self, key: str, message: object) -> None: """ @@ -134,7 +145,7 @@ def add_phase(self, phase: dict) -> None: if self.debug and "name" in phase and "time_sec" in phase: BenchmarkResult.log_message(f"\t\t{phase['name']}: {phase['time_sec']:.4f} sec") - def print_current_summary(self, name: str, policy: str, size: int, realloc: bool, reinit, skip: int = 0) -> None: + def print_current_summary(self, name: str, policy: str, size: int, realloc: bool, reinit, block_size: dict, skip: int = 0) -> None: """ Print a summary of the benchmark with the provided settings; @@ -143,14 +154,15 @@ def print_current_summary(self, name: str, policy: str, size: int, realloc: bool :param size: size of the input data :param realloc: if reallocation is performed :param reinit: if re-initialization is performed + :param block_size: dictionary that specifies the number of threads per block :param skip: skip the first N iterations when computing the summary statistics """ try: - results_filtered = self._results["benchmarks"][name][policy][size][realloc][reinit] + results_filtered = self._results["benchmarks"][name][policy][size][realloc][reinit][BenchmarkResult.create_block_size_key(block_size)] except KeyError as e: results_filtered = [] BenchmarkResult.log_message(f"WARNING: benchmark with signature" - f" [{name}][{policy}][{size}][{realloc}][{reinit}] not found, exception {e}") + f" [{name}][{policy}][{size}][{realloc}][{reinit}][{BenchmarkResult.create_block_size_key(block_size)}] not found, exception {e}") # Retrieve execution times; exec_times = [x["total_time_sec"] for x in results_filtered][skip:] mean_time = np.mean(exec_times) if exec_times else np.nan @@ -161,7 +173,7 @@ def print_current_summary(self, name: str, policy: str, size: int, realloc: bool comp_std_time = np.std(comp_exec_times) if comp_exec_times else np.nan BenchmarkResult.log_message(f"summary of benchmark={name}, policy={policy}, size={size}," + - f" realloc={realloc}, reinit={reinit};" + + f" realloc={realloc}, reinit={reinit}, block_size=({BenchmarkResult.create_block_size_key(block_size)});" + f" mean total time={mean_time:.4f}±{std_time:.4f} sec;" + f" mean computation time={comp_mean_time:.4f}±{comp_std_time:.4f} sec") From 7ce4cf1b15ad7666d1c1f1885506440562ba0097 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 19 Jun 2020 15:53:52 +0200 Subject: [PATCH 094/236] added bench wrapper --- README.md | 4 +- .../python/benchmark/benchmark_main.py | 6 +- .../python/benchmark/benchmark_wrapper.py | 120 ++++++++++++++++++ 3 files changed, 125 insertions(+), 5 deletions(-) create mode 100644 projects/resources/python/benchmark/benchmark_wrapper.py diff --git a/README.md b/README.md index 4a4e8712..49fc7728 100644 --- a/README.md +++ b/README.md @@ -267,7 +267,9 @@ graalpython -m ginstall install numpy; 9. **Run tests with** `mx unittest com.nvidia` * Run a specific test using, for example, `mx unittest com.nvidia.grcuda.test.gpu.ExecutionDAGTest#executionDAGConstructorTest` -10. **Execute performance tests using Graalpython** +10. **Add your GrCUDA directory to the environment with** `export GRCUDA_HOME=/path/to/grcuda` + +11. **Execute performance tests using Graalpython** ``` cd projects/resources/python/benchmark diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index 387adc7f..565dc0cc 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -52,10 +52,8 @@ ############################## -def create_block_size_list(args) -> list: +def create_block_size_list(block_size_1d, block_size_2d) -> list: block_size = None - block_size_1d = args.block_size_1d - block_size_2d = args.block_size_2d if (not block_size_1d) and block_size_2d: # Only 2D block size; block_size = [{"block_size_2d": b} for b in block_size_2d] elif (not block_size_2d) and block_size_1d: # Only 1D block size; @@ -140,7 +138,7 @@ def create_block_size_list(args) -> list: num_elem = {n: args.size for n in num_elem.keys()} # Setup the block size for each benchmark; - block_sizes = create_block_size_list(args) + block_sizes = create_block_size_list(args.block_size_1d, args.block_size_2d) if (args.block_size_1d or args.block_size_2d) and benchmark_res.debug: BenchmarkResult.log_message(f"using block sizes: {block_sizes}") diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py new file mode 100644 index 00000000..b433a132 --- /dev/null +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -0,0 +1,120 @@ +import argparse +import subprocess +import time +import os +from benchmark_result import BenchmarkResult +from benchmark_main import create_block_size_list + +############################## +############################## + +# Benchmark settings; +benchmarks = [ + "b1", + "b6", + "b7", + "b8", +] + +num_elem = { + "b1": [100], + "b6": [100], + "b7": [100], + "b8": [100], +} + +exec_policies = ["default", "sync"] + +new_stream_policies = ["fifo"] + +parent_stream_policies = ["disjoint"] + +dependency_policies = ["with_const"] + +block_sizes_1d = [32, 1024] +block_sizes_2d = [8, 32] + +############################## +############################## + +GRAALPYTHON_CMD = "graalpython --vm.XX:MaxHeapSize=24G --jvm --polyglot --WithThread " \ + "--grcuda.RetrieveNewStreamPolicy={} --grcuda.ExecutionPolicy={} --grcuda.DependencyPolicy={} " \ + "--grcuda.RetrieveParentStreamPolicy={} benchmark_main.py -i {} -n {} " \ + "--reinit false --realloc false -b {} --block_size_1d {} --block_size_2d {} --no_cpu_validation {}" + + +def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_policy, + parent_stream_policy, dependency_policy, num_iter, debug): + if debug: + BenchmarkResult.log_message("") + BenchmarkResult.log_message("") + BenchmarkResult.log_message("#" * 30) + BenchmarkResult.log_message(f"Benchmark {i + 1}/{tot_benchmarks}") + BenchmarkResult.log_message(f"benchmark={b}, size={n}," + f" block size={block_size}," + f" exec policy={exec_policy}," + f" new stream policy={new_stream_policy}," + f" parent stream policy={parent_stream_policy}," + f" dependency policy={dependency_policy}") + BenchmarkResult.log_message("#" * 30) + BenchmarkResult.log_message("") + BenchmarkResult.log_message("") + benchmark_cmd = GRAALPYTHON_CMD.format(new_stream_policy, exec_policy, dependency_policy, parent_stream_policy, + num_iter, size, benchmark, block_size["block_size_1d"], block_size["block_size_2d"], + "-d" if debug else "") + start = time.time() + result = subprocess.run(benchmark_cmd, + shell=True, + stdout=subprocess.STDOUT, + cwd=f"{os.getenv('GRCUDA_HOME')}/projects/resources/python/benchmark") + result.check_returncode() + end = time.time() + if debug: + BenchmarkResult.log_message(f"Benchmark total execution time: {end - start:.2f} seconds") + +############################## +############################## + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description="Wrap the GrCUDA benchmark to specify additional settings") + + parser.add_argument("-d", "--debug", action="store_true", + help="If present, print debug messages") + parser.add_argument("-i", "--num_iter", metavar="N", type=int, default=BenchmarkResult.DEFAULT_NUM_ITER, + help="Number of times each benchmark is executed") + parser.add_argument("-o", "--output_path", metavar="path/to/output.json", + help="Path to the file where results will be stored") + + # Parse the input arguments; + args = parser.parse_args() + + debug = args.debug if args.debug else BenchmarkResult.DEFAULT_DEBUG + num_iter = args.num_iter if args.num_iter else BenchmarkResult.DEFAULT_NUM_ITER + output_path = args.output_path if args.output_path else "" + + # Setup the block size for each benchmark; + block_sizes = create_block_size_list(block_sizes_1d, block_sizes_2d) + if debug: + BenchmarkResult.log_message(f"using block sizes: {block_sizes}") + + def tot_benchmark_count(): + tot = 0 + for b in benchmarks: + tot += len(num_elem[b]) * len(block_sizes) * len(exec_policies) * len(new_stream_policies) * len(parent_stream_policies) * len(dependency_policies) + return tot + + # Execute each test; + i = 0 + tot_benchmarks = tot_benchmark_count() + for b in benchmarks: + for n in num_elem[b]: + for block_size in block_sizes: + for exec_policy in exec_policies: + for new_stream_policy in new_stream_policies: + for parent_stream_policy in parent_stream_policies: + for dependency_policy in dependency_policies: + execute_benchmark(b, n, block_size, exec_policy, new_stream_policy, + parent_stream_policy, dependency_policy, num_iter, debug) + i += 1 From c38004631f09c7a7d3d9e88044d2075f3045c3d1 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 19 Jun 2020 18:30:52 +0200 Subject: [PATCH 095/236] added output file name to benchmark wrapper; changed grcuda options to use - --- .../src/com/nvidia/grcuda/GrCUDAContext.java | 4 ++-- .../python/benchmark/benchmark_main.py | 1 - .../python/benchmark/benchmark_wrapper.py | 23 +++++++++++-------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index b7b7bcf2..6daf74ec 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -212,7 +212,7 @@ private static ExecutionPolicyEnum parseExecutionPolicy(String policyString) { @TruffleBoundary private static DependencyPolicyEnum parseDependencyPolicy(String policyString) { switch(policyString) { - case "with_const": + case "with-const": return DependencyPolicyEnum.WITH_CONST; case "default": return DependencyPolicyEnum.DEFAULT; @@ -226,7 +226,7 @@ private static RetrieveNewStreamPolicyEnum parseRetrieveStreamPolicy(String poli switch(policyString) { case "fifo": return RetrieveNewStreamPolicyEnum.FIFO; - case "always_new": + case "always-new": return RetrieveNewStreamPolicyEnum.ALWAYS_NEW; default: return GrCUDAContext.DEFAULT_RETRIEVE_STREAM_POLICY; diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index 565dc0cc..c50d7354 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -53,7 +53,6 @@ def create_block_size_list(block_size_1d, block_size_2d) -> list: - block_size = None if (not block_size_1d) and block_size_2d: # Only 2D block size; block_size = [{"block_size_2d": b} for b in block_size_2d] elif (not block_size_2d) and block_size_1d: # Only 1D block size; diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index b433a132..a558b58c 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -2,6 +2,7 @@ import subprocess import time import os +from datetime import datetime from benchmark_result import BenchmarkResult from benchmark_main import create_block_size_list @@ -29,7 +30,7 @@ parent_stream_policies = ["disjoint"] -dependency_policies = ["with_const"] +dependency_policies = ["with-const"] block_sizes_1d = [32, 1024] block_sizes_2d = [8, 32] @@ -40,7 +41,7 @@ GRAALPYTHON_CMD = "graalpython --vm.XX:MaxHeapSize=24G --jvm --polyglot --WithThread " \ "--grcuda.RetrieveNewStreamPolicy={} --grcuda.ExecutionPolicy={} --grcuda.DependencyPolicy={} " \ "--grcuda.RetrieveParentStreamPolicy={} benchmark_main.py -i {} -n {} " \ - "--reinit false --realloc false -b {} --block_size_1d {} --block_size_2d {} --no_cpu_validation {}" + "--reinit false --realloc false -b {} --block_size_1d {} --block_size_2d {} --no_cpu_validation {} -o {}" def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_policy, @@ -51,17 +52,22 @@ def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_polic BenchmarkResult.log_message("#" * 30) BenchmarkResult.log_message(f"Benchmark {i + 1}/{tot_benchmarks}") BenchmarkResult.log_message(f"benchmark={b}, size={n}," - f" block size={block_size}," - f" exec policy={exec_policy}," - f" new stream policy={new_stream_policy}," - f" parent stream policy={parent_stream_policy}," + f" block size={block_size}, " + f" exec policy={exec_policy}, " + f" new stream policy={new_stream_policy}, " + f" parent stream policy={parent_stream_policy}, " f" dependency policy={dependency_policy}") BenchmarkResult.log_message("#" * 30) BenchmarkResult.log_message("") BenchmarkResult.log_message("") + + output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + file_name = f"{output_date}_{benchmark}_{exec_policy}_{new_stream_policy}_{parent_stream_policy}_{dependency_policy}_{num_iter}.json" + output_path = os.path.join(BenchmarkResult.DEFAULT_RES_FOLDER, file_name) + benchmark_cmd = GRAALPYTHON_CMD.format(new_stream_policy, exec_policy, dependency_policy, parent_stream_policy, num_iter, size, benchmark, block_size["block_size_1d"], block_size["block_size_2d"], - "-d" if debug else "") + "-d" if debug else "", output_path) start = time.time() result = subprocess.run(benchmark_cmd, shell=True, @@ -84,15 +90,12 @@ def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_polic help="If present, print debug messages") parser.add_argument("-i", "--num_iter", metavar="N", type=int, default=BenchmarkResult.DEFAULT_NUM_ITER, help="Number of times each benchmark is executed") - parser.add_argument("-o", "--output_path", metavar="path/to/output.json", - help="Path to the file where results will be stored") # Parse the input arguments; args = parser.parse_args() debug = args.debug if args.debug else BenchmarkResult.DEFAULT_DEBUG num_iter = args.num_iter if args.num_iter else BenchmarkResult.DEFAULT_NUM_ITER - output_path = args.output_path if args.output_path else "" # Setup the block size for each benchmark; block_sizes = create_block_size_list(block_sizes_1d, block_sizes_2d) From aaf65c57081eb0ba0e1d2042d76cb16d4ae5a957 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 20 Jun 2020 09:42:58 +0200 Subject: [PATCH 096/236] benchmark wrapper results are stored in a unique folder for each run --- .../python/benchmark/benchmark_wrapper.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index a558b58c..f437bd81 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -45,7 +45,7 @@ def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_policy, - parent_stream_policy, dependency_policy, num_iter, debug): + parent_stream_policy, dependency_policy, num_iter, debug, output_date=None): if debug: BenchmarkResult.log_message("") BenchmarkResult.log_message("") @@ -61,9 +61,16 @@ def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_polic BenchmarkResult.log_message("") BenchmarkResult.log_message("") - output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + if not output_date: + output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") file_name = f"{output_date}_{benchmark}_{exec_policy}_{new_stream_policy}_{parent_stream_policy}_{dependency_policy}_{num_iter}.json" - output_path = os.path.join(BenchmarkResult.DEFAULT_RES_FOLDER, file_name) + # Create a folder if it doesn't exist; + output_folder_path = os.path.join(BenchmarkResult.DEFAULT_RES_FOLDER, output_date) + if not os.path.exists(output_folder_path): + if debug: + BenchmarkResult.log_message(f"creating result folder: {output_folder_path}") + os.mkdir(output_folder_path) + output_path = os.path.join(output_folder_path, file_name) benchmark_cmd = GRAALPYTHON_CMD.format(new_stream_policy, exec_policy, dependency_policy, parent_stream_policy, num_iter, size, benchmark, block_size["block_size_1d"], block_size["block_size_2d"], @@ -108,6 +115,8 @@ def tot_benchmark_count(): tot += len(num_elem[b]) * len(block_sizes) * len(exec_policies) * len(new_stream_policies) * len(parent_stream_policies) * len(dependency_policies) return tot + output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + # Execute each test; i = 0 tot_benchmarks = tot_benchmark_count() @@ -119,5 +128,5 @@ def tot_benchmark_count(): for parent_stream_policy in parent_stream_policies: for dependency_policy in dependency_policies: execute_benchmark(b, n, block_size, exec_policy, new_stream_policy, - parent_stream_policy, dependency_policy, num_iter, debug) + parent_stream_policy, dependency_policy, num_iter, debug, output_date=output_date) i += 1 From 28ee6a278f15dd2f97090d254c35e3b8e175d610 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 20 Jun 2020 11:14:40 +0200 Subject: [PATCH 097/236] fixed wrapper overriding names and multiple iterations not being stored; added script to load benchmark results --- .../python/benchmark/benchmark_result.py | 2 +- .../python/benchmark/benchmark_wrapper.py | 3 +- .../resources/python/plotting/load_data.py | 70 +++++++++++++++++++ 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100755 projects/resources/python/plotting/load_data.py diff --git a/projects/resources/python/benchmark/benchmark_result.py b/projects/resources/python/benchmark/benchmark_result.py index ba57d4de..c15901ba 100644 --- a/projects/resources/python/benchmark/benchmark_result.py +++ b/projects/resources/python/benchmark/benchmark_result.py @@ -97,7 +97,7 @@ def start_new_benchmark(self, name: str, policy: str, size: int, dict_reinit[reinit] = dict_block # 6. Block size options; self._dict_current = {"phases": [], "iteration": iteration} - if tuple(block_size.values()) in dict_block: + if BenchmarkResult.create_block_size_key(block_size) in dict_block: dict_block[BenchmarkResult.create_block_size_key(block_size)] += [self._dict_current] else: dict_block[BenchmarkResult.create_block_size_key(block_size)] = [self._dict_current] diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index f437bd81..7ce098bf 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -63,7 +63,8 @@ def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_polic if not output_date: output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") - file_name = f"{output_date}_{benchmark}_{exec_policy}_{new_stream_policy}_{parent_stream_policy}_{dependency_policy}_{num_iter}.json" + file_name = f"{output_date}_{benchmark}_{exec_policy}_{new_stream_policy}_{parent_stream_policy}_" \ + f"{dependency_policy}_{block_size['block_size_1d']}_{block_size['block_size_2d']}_{num_iter}.json" # Create a folder if it doesn't exist; output_folder_path = os.path.join(BenchmarkResult.DEFAULT_RES_FOLDER, output_date) if not os.path.exists(output_folder_path): diff --git a/projects/resources/python/plotting/load_data.py b/projects/resources/python/plotting/load_data.py new file mode 100755 index 00000000..c5ec5544 --- /dev/null +++ b/projects/resources/python/plotting/load_data.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sat Jun 20 09:43:46 2020 + +@author: alberto.parravicini +""" + +import pandas as pd +import json +import os + +DEFAULT_RES_DIR = "../../../../data/results" + + +def load_data(input_date: str) -> pd.DataFrame: + """ + Load the benchmark results located in the input sub-folder + :param input_date: name of the folder where results are located, as a subfolder of DEFAULT_RES_DIR + :return: a DataFrame containing the results + """ + input_path = os.path.join(DEFAULT_RES_DIR, input_date) + + # Load results as JSON; + data_dict = {} + for res in os.listdir(input_path): + with open(os.path.join(input_path, res)) as f: + data_dict[res] = json.load(f) + + # Turn results into a pd.DataFrame; + rows = [] + for k, v in data_dict.items(): + row = [] + # Parse filename; + benchmark, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, block_size_1d, block_size_2d = k.split("_")[6:-1] + row += [benchmark, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, int(block_size_1d), int(block_size_2d)] + + # Retrieve other information; + total_iterations = v["num_iterations"] + cpu_validation = v["cpu_validation"] + random_init = v["random_init"] + size_dict = v["benchmarks"][benchmark]["default"] + row += [int(total_iterations), bool(cpu_validation), bool(random_init)] + + # Parse data for each input data size, and other settings;; + for size, val_size in size_dict.items(): + for realloc, val_realloc in val_size.items(): + for reinit, val_reinit in val_realloc.items(): + for block_size, val_block_size in val_reinit.items(): + # Process each iteration; + for curr_iteration in val_block_size: + num_iter = curr_iteration["iteration"] + gpu_result = curr_iteration["gpu_result"] + total_time_sec = curr_iteration["total_time_sec"] + overhead_sec = curr_iteration["overhead_sec"] + computation_sec = curr_iteration["computation_sec"] + # Add a new row; + rows += [row + [num_iter, gpu_result, total_time_sec, overhead_sec, computation_sec]] + + columns = ["benchmark", "exec_policy", "new_stream_policy", "parent_stream_policy", + "dependency_policy", "block_size_1d", "block_size_2d", + "total_iterations", "cpu_validation", "random_init", + "num_iter", "gpu_result", "total_time_sec", "overhead_sec", "computation_sec"] + data = pd.DataFrame(rows, columns=columns).sort_values(by=columns[:10], ignore_index=True) + return data + + +if __name__ == "__main__": + input_date = "2020_06_20_10_53_22" + data = load_data(input_date) From fd30f2052b608076f50bd5f36178d5ed4f94b901 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 20 Jun 2020 20:20:15 +0200 Subject: [PATCH 098/236] added plot with scalability --- .../python/benchmark/benchmark_wrapper.py | 10 +- .../resources/python/plotting/load_data.py | 45 ++++- .../python/plotting/plot_speedup_baseline.py | 128 ++++++++++++ .../resources/python/plotting/plot_utils.py | 184 ++++++++++++++++++ 4 files changed, 353 insertions(+), 14 deletions(-) create mode 100755 projects/resources/python/plotting/plot_speedup_baseline.py create mode 100755 projects/resources/python/plotting/plot_utils.py diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 7ce098bf..875ce53e 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -18,10 +18,10 @@ ] num_elem = { - "b1": [100], - "b6": [100], - "b7": [100], - "b8": [100], + "b1": [10000, 100000, 1000000], + "b6": [1000, 10000, 100000], + "b7": [1000, 10000, 100000], + "b8": [400, 800, 1200], } exec_policies = ["default", "sync"] @@ -64,7 +64,7 @@ def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_polic if not output_date: output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") file_name = f"{output_date}_{benchmark}_{exec_policy}_{new_stream_policy}_{parent_stream_policy}_" \ - f"{dependency_policy}_{block_size['block_size_1d']}_{block_size['block_size_2d']}_{num_iter}.json" + f"{dependency_policy}_{size}_{block_size['block_size_1d']}_{block_size['block_size_2d']}_{num_iter}.json" # Create a folder if it doesn't exist; output_folder_path = os.path.join(BenchmarkResult.DEFAULT_RES_FOLDER, output_date) if not os.path.exists(output_folder_path): diff --git a/projects/resources/python/plotting/load_data.py b/projects/resources/python/plotting/load_data.py index c5ec5544..65ab2953 100755 --- a/projects/resources/python/plotting/load_data.py +++ b/projects/resources/python/plotting/load_data.py @@ -9,14 +9,16 @@ import pandas as pd import json import os +import numpy as np DEFAULT_RES_DIR = "../../../../data/results" -def load_data(input_date: str) -> pd.DataFrame: +def load_data(input_date: str, skip_iter=0, remove_inf=True) -> pd.DataFrame: """ Load the benchmark results located in the input sub-folder :param input_date: name of the folder where results are located, as a subfolder of DEFAULT_RES_DIR + :param skip_iter: skip the first iterations for each benchmark, as they are considered warmup :return: a DataFrame containing the results """ input_path = os.path.join(DEFAULT_RES_DIR, input_date) @@ -32,8 +34,8 @@ def load_data(input_date: str) -> pd.DataFrame: for k, v in data_dict.items(): row = [] # Parse filename; - benchmark, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, block_size_1d, block_size_2d = k.split("_")[6:-1] - row += [benchmark, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, int(block_size_1d), int(block_size_2d)] + benchmark, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, _, block_size_1d, block_size_2d = k.split("_")[6:-1] + row += [benchmark, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, int(block_size_1d), int(block_size_2d), block_size_1d + "," + block_size_2d] # Retrieve other information; total_iterations = v["num_iterations"] @@ -55,16 +57,41 @@ def load_data(input_date: str) -> pd.DataFrame: overhead_sec = curr_iteration["overhead_sec"] computation_sec = curr_iteration["computation_sec"] # Add a new row; - rows += [row + [num_iter, gpu_result, total_time_sec, overhead_sec, computation_sec]] + if (num_iter >= skip_iter): + rows += [row + [int(size), bool(realloc), bool(reinit), num_iter - skip_iter, gpu_result, total_time_sec, overhead_sec, computation_sec]] columns = ["benchmark", "exec_policy", "new_stream_policy", "parent_stream_policy", - "dependency_policy", "block_size_1d", "block_size_2d", - "total_iterations", "cpu_validation", "random_init", + "dependency_policy", "block_size_1d", "block_size_2d", "block_size_str", + "total_iterations", "cpu_validation", "random_init", "size", "realloc", "reinit", "num_iter", "gpu_result", "total_time_sec", "overhead_sec", "computation_sec"] - data = pd.DataFrame(rows, columns=columns).sort_values(by=columns[:10], ignore_index=True) + data = pd.DataFrame(rows, columns=columns).sort_values(by=columns[:14], ignore_index=True) + + # Compute speedups; + compute_speedup(data, ["benchmark", "new_stream_policy", "parent_stream_policy", + "dependency_policy", "block_size_1d", "block_size_2d", + "total_iterations", "cpu_validation", "random_init", "size", "realloc", "reinit"]) + # Clean columns with infinite speedup; + if remove_inf: + data = data[data["computation_speedup"] != np.inf] + return data +def compute_speedup(data, key, speedup_col_name="computation_speedup", time_column="computation_sec", baseline_filter_col="exec_policy", baseline_filter_val="sync", baseline_col_name="baseline_time_sec"): + + # Initialize speedup values; + data[speedup_col_name] = 1 + data[baseline_col_name] = 0 + + grouped_data = data.groupby(key, as_index=False) + for group_key, group in grouped_data: + # Compute the median baseline computation time; + median_baseline = np.median(group.loc[group[baseline_filter_col] == baseline_filter_val, time_column]) + # Compute the speedup for this group; + data.loc[group.index, speedup_col_name] = median_baseline / group[time_column] + data.loc[group.index, baseline_col_name] = median_baseline + + if __name__ == "__main__": - input_date = "2020_06_20_10_53_22" - data = load_data(input_date) + input_date = "2020_06_20_11_56_48" + data = load_data(input_date, skip_iter=3) diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py new file mode 100755 index 00000000..92da0568 --- /dev/null +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sat Jun 20 14:14:30 2020 + +@author: alberto.parravicini +""" + +import numpy as np +import pandas as pd +import seaborn as sns +import matplotlib.pyplot as plt +import matplotlib.gridspec as gridspec +from scipy.stats.mstats import gmean +from matplotlib.patches import Patch, Rectangle +from matplotlib.collections import PatchCollection, LineCollection +import matplotlib.lines as lines + +import os +from load_data import load_data +from plot_utils import COLORS, get_exp_label, get_ci_size + + +INPUT_DATE = "2020_06_20_16_34_27" +OUTPUT_DATE = "2020_06_20" +PLOT_DIR = "../../../../data/plots" + +BENCHMARK_NAMES = {"b1": "Vector Squares", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} + +def build_exec_time_plot(data, gridspec, x, y): + + data["size_str"] = data["size"].astype(str) + + # Add a lineplot with the exec times; + ax = fig.add_subplot(gridspec[x, y]) + ax = sns.lineplot(x="size_str", y="computation_speedup", data=data, color=COLORS["bb1"], ax=ax, estimator=gmean, + err_style="bars", linewidth=3, legend=False, sort=False, ci=None, zorder=2) + + labels = sorted(data["size"].unique()) + labels_str = [str(x) for x in labels] + + # Add rectangles to represent variance + rectangles = [] + for s_i, s in enumerate(labels): + curr_data = data[data["size"] == s] + upper_ci_size, lower_ci_size, center = get_ci_size(curr_data["computation_speedup"], estimator=gmean, ci=0.90) + bottom = center - lower_ci_size + width = 0.1 + lower_left = [s_i - width / 2, bottom] + # Add an offset to the x position, to avoid overlapping; + rectangles += [Rectangle(lower_left, width, upper_ci_size + lower_ci_size)] + + pc = PatchCollection(rectangles, facecolor="white", edgecolor="#2f2f2f", linewidth=0.5, zorder=3, clip_on=True, alpha=0.7) + ax.add_collection(pc) + + + # Add a horizontal line to denote speedup = 1x; + ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=4, linewidth=1, alpha=0.5) + + # Set the x ticks; + ax.set_xticks(labels_str) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=15) + ax.tick_params(labelcolor="black") + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(5)) + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=15) + + ax.set_ylabel(None) + ax.set_xlabel(None) + + # Add benchmark name and baseline execution time annotations; + ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.1), fontsize=14, ha="center", xycoords="axes fraction") + ax.annotate(f"Baseline exec. time:", xy=(0, -0.35), fontsize=12, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + + for i, l in enumerate(labels): + baseline_median = np.median(data[data["size"] == int(l)]["baseline_time_sec"]) + ax.annotate(f"{1000 * baseline_median:.1f} ms", xy=(i, -0.47), fontsize=12, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + + # Add block size annotation; + if y == 0: + ax.annotate(f"Block size:\n1D={data['block_size_1d'].iloc[0]}, 2D={data['block_size_2d'].iloc[0]}x{data['block_size_2d'].iloc[0]}", xy=(-0.65, 1.25), fontsize=14, ha="left", xycoords="axes fraction") + + # Turn off tick lines; + ax.xaxis.grid(False) + + return ax + + +if __name__ == "__main__": + data = load_data(INPUT_DATE, skip_iter=3) + + # Ignore synchronous execution; + data = data[data["exec_policy"] != "sync"] + + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams['axes.titlepad'] = 20 + plt.rcParams['axes.labelpad'] = 10 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + + # Lists of benchmarks and block sizes; + benchmark_list = sorted(data["benchmark"].unique()) + block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) + num_col = len(benchmark_list) + num_row = len(block_size_list) + fig = plt.figure(figsize=(4 * num_col, 4 * num_row)) + gs = gridspec.GridSpec(num_row, num_col) + plt.subplots_adjust(top=0.8, + bottom=0.2, + left=0.13, + right=0.90, + hspace=1.1, + wspace=0.8) + + exec_time_axes = [] + for b_i, b in enumerate(benchmark_list): + for block_size_i, block_size in enumerate(block_size_list): + curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) + exec_time_axes += [build_exec_time_plot(curr_res, gs, block_size_i, b_i)] + + plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") + plt.annotate("Speedup over serial execution", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Execution Time Speedup\nw.r.t Serial Baseline", fontsize=25, x=.05, y=0.99, ha="left") + + plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_{OUTPUT_DATE}.pdf"), dpi=300) + + \ No newline at end of file diff --git a/projects/resources/python/plotting/plot_utils.py b/projects/resources/python/plotting/plot_utils.py new file mode 100755 index 00000000..683dafda --- /dev/null +++ b/projects/resources/python/plotting/plot_utils.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Fri Feb 21 16:06:01 2020 +@author: aparravi +""" + +import scipy.stats as st +import pandas as pd +import matplotlib.pyplot as plt +import numpy as np + +############################## +# Colors ##################### +############################## + +# Define some colors for later use. +# Tool to create paletters: https://color.adobe.com/create +# Guide to make nice palettes: https://earthobservatory.nasa.gov/blogs/elegantfigures/2013/08/05/subtleties-of-color-part-1-of-6/ +COLORS = dict( + + c1 = "#b1494a", + c2 = "#256482", + c3 = "#2f9c5a", + c4 = "#28464f", + + r1 = "#FA4D4A", + r2 = "#FA3A51", + r3 = "#F41922", + r4 = "#CE1922", + r5 = "#F07B71", + r6 = "#F0A694", + + b1 = "#97E6DB", + b2 = "#C6E6DB", + b3 = "#CEF0E4", + b4 = "#9CCFC4", + b5 = "#AEDBF2", + b6 = "#B0E6DB", + b7 = "#B6FCDA", + b8 = "#7bd490", + + # Another blue-green palette; + bb0 = "#FFA685", + bb1 = "#75B0A2", + bb2 = "#CEF0E4", # Same as b3; + bb3 = "#B6FCDA", # Same as b7; + bb4 = "#7ED7B8", + bb5 = "#7BD490", + + y1 = "#FFA728", + y2 = "#FF9642", + y3 = "#FFAB69", + + bt1 = "#55819E", + bt2 = "#538F6F", + blue_klein = "#002fa7", + ) + +############################## +# Functions ################## +############################## + +def get_exp_label(val) -> str: + """ + :param val: numeric label to format + :return: label formatted in scientific notation + + Format a label in scientific notation, using Latex math font. + For example, 10000 -> 10^4; + """ + # Get the power of 10 + exp_val = 0 + remaining_val = int(val) + while (remaining_val % 10 == 0 and remaining_val > 0): + exp_val += 1 + remaining_val = remaining_val // 10 + if remaining_val > 1: + return r"$\mathdefault{" + str(remaining_val) + r"·{10}^" + str(exp_val) + r"}$" + else: + return r"$\mathdefault{" + r"{10}^" + str(exp_val) + r"}$" + + +def fix_label_length(labels: list, max_length: int=20) -> list: + """ + :param labels: a list of textual labels + :return: a list of updated labels + + Ensure that all labels are shorter than a given length; + """ + fixed_labels = [] + for l in labels: + if len(l) <= max_length: + fixed_labels += [l] + else: + fixed_labels += [l[:max_length-3] + "..."] + return fixed_labels + + +def remove_outliers(data, sigmas: int=3): + """ + :param data: a sequence of numerical data, iterable + :param sigmas: number of standard deviations outside which a value is consider to be an outlier + :return: data without outliers + + Filter a sequence of data by keeping only values within "sigma" standard deviations from the mean. + This is a simple way to filter outliers, it is more useful for visualizations than for sound statistical analyses; + """ + return data[st.zscore(data) < sigmas] + + +def compute_speedup(X: pd.DataFrame, col_slow: str, col_fast: str, col_speedup: str) -> None: + """ + Add a column to a dataframe that represents a speedup, + and "col_slow", "col_fast" are execution times (e.g. CPU and GPU execution time); + """ + X[col_speedup] = X[col_slow] / X[col_fast] + + +def get_ci_size(x, ci=0.95, estimator=np.mean): + """ + :param x: a sequence of numerical data, iterable + :param ci: confidence interval to consider + :return: size of upper confidence interval, size of lower confidence interval, mean + + Compute the size of the upper confidence interval, + i.e. the size between the top of the bar and the top of the error bar as it is generated by seaborn. + Useful for adding labels above error bars, or to create by hand the error bars; + """ + center = estimator(x) + ci_lower, ci_upper = st.t.interval(ci, len(x) - 1, loc=center, scale=st.sem(x)) + return ci_upper - center, center - ci_lower, center + + +def get_upper_ci_size(x, ci=0.95, estimator=np.mean): + return get_ci_size(x, ci, estimator=estimator)[0] + + +def add_labels(ax: plt.Axes, labels: list=None, vertical_offsets: list=None, patch_num: list=None, fontsize: int=14, rotation: int=0, + skip_zero: bool=False, format_str: str="{:.2f}x", label_color: str="#2f2f2f"): + """ + :param ax: current axis, it is assumed that each ax.Patch is a bar over which we want to add a label + :param labels: optional labels to add. If not present, add the bar height + :param vertical_offsets: additional vertical offset for each label. + Useful when displaying error bars (see @get_upper_ci_size), and for fine tuning + :param patch_num: indices of patches to which we add labels, if some of them should be skipped + :param fontsize: size of each label + :param rotation: rotation of the labels (e.g. 90°) + :param skip_zero: if True, don't put a label over the first bar + :param format_str: format of each label, by default use speedup (e.g. 2.10x) + :param label_color: hexadecimal color used for labels + + Used to add labels above barplots; + """ + if not vertical_offsets: + # 5% above each bar, by default; + vertical_offsets = [ax.get_ylim()[1] * 0.05] * len(ax.patches) + if not labels: + labels = [p.get_height() for p in ax.patches] + patches = [] + if not patch_num: + patches = ax.patches + else: + patches = [p for i, p in enumerate(ax.patches) if i in patch_num] + + # Iterate through the list of axes' patches + for i, p in enumerate(patches): + if labels[i] and (i > 0 or not skip_zero): + ax.text(p.get_x() + p.get_width()/2., vertical_offsets[i] + p.get_height(), format_str.format(labels[i]), + fontsize=fontsize, color=label_color, ha='center', va='bottom', rotation=rotation) + + +def update_width(ax: plt.Axes, width: float=1): + """ + Given an axis with a barplot, scale the width of each bar to the provided percentage, + and align them to their center; + """ + for i, patch in enumerate(ax.patches): + current_width = patch.get_width() + diff = current_width - width + # Change the bar width + patch.set_width(width) + # Recenter the bar + patch.set_x(patch.get_x() + 0.5 * diff) \ No newline at end of file From a10916b37a1d14d1f4f9a59e24cfabddbc9f3a68 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 21 Jun 2020 11:00:36 +0200 Subject: [PATCH 099/236] added new scalability plot --- .../python/benchmark/bench/bench_7.py | 2 +- .../python/benchmark/benchmark_wrapper.py | 12 +- .../python/plotting/plot_speedup_baseline.py | 135 ++++++++++++++++-- .../resources/python/plotting/plot_utils.py | 4 +- 4 files changed, 132 insertions(+), 21 deletions(-) diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index 2f5ec419..ad8f3cf4 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -74,7 +74,7 @@ def __init__(self, benchmark: BenchmarkResult): super().__init__("b7", benchmark) self.size = 0 self.num_nnz = 0 - self.max_degree = 100 # Each vertex has 10 edges; + self.max_degree = 50 # Each vertex has 10 edges; self.num_iterations = 10 self.ptr = None self.idx = None diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 875ce53e..01979bcb 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -18,10 +18,10 @@ ] num_elem = { - "b1": [10000, 100000, 1000000], - "b6": [1000, 10000, 100000], - "b7": [1000, 10000, 100000], - "b8": [400, 800, 1200], + "b1": [40000000], #[2000000, 5000000, 10000000, 20000000], + "b6": [800000], #[20000, 50000, 200000, 500000], + "b7": [250000], #[50000, 100000, 150000, 200000], + "b8": [4800], #[800, 1600, 2400, 4000], } exec_policies = ["default", "sync"] @@ -32,8 +32,8 @@ dependency_policies = ["with-const"] -block_sizes_1d = [32, 1024] -block_sizes_2d = [8, 32] +block_sizes_1d = [32, 256, 1024] +block_sizes_2d = [8, 16, 32] ############################## ############################## diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 92da0568..4433befc 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,7 +21,7 @@ from plot_utils import COLORS, get_exp_label, get_ci_size -INPUT_DATE = "2020_06_20_16_34_27" +INPUT_DATE = "2020_06_20_20_26_03" OUTPUT_DATE = "2020_06_20" PLOT_DIR = "../../../../data/plots" @@ -34,7 +34,7 @@ def build_exec_time_plot(data, gridspec, x, y): # Add a lineplot with the exec times; ax = fig.add_subplot(gridspec[x, y]) ax = sns.lineplot(x="size_str", y="computation_speedup", data=data, color=COLORS["bb1"], ax=ax, estimator=gmean, - err_style="bars", linewidth=3, legend=False, sort=False, ci=None, zorder=2) + err_style="bars", linewidth=2, legend=False, sort=False, ci=None, zorder=2) labels = sorted(data["size"].unique()) labels_str = [str(x) for x in labels] @@ -53,28 +53,37 @@ def build_exec_time_plot(data, gridspec, x, y): pc = PatchCollection(rectangles, facecolor="white", edgecolor="#2f2f2f", linewidth=0.5, zorder=3, clip_on=True, alpha=0.7) ax.add_collection(pc) + # Set the same y limits in each plot; + ax.set_ylim((0, 4)) # Add a horizontal line to denote speedup = 1x; - ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=4, linewidth=1, alpha=0.5) + ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) # Set the x ticks; ax.set_xticks(labels_str) - ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=15) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=45, ha="right", fontsize=9, rotation_mode="anchor") ax.tick_params(labelcolor="black") # Set the y ticks; ax.yaxis.set_major_locator(plt.LinearLocator(5)) - ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=15) + if y == 0: + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) + else: + ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # Hide tick markers; + for tic in ax.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) ax.set_ylabel(None) ax.set_xlabel(None) # Add benchmark name and baseline execution time annotations; ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.1), fontsize=14, ha="center", xycoords="axes fraction") - ax.annotate(f"Baseline exec. time:", xy=(0, -0.35), fontsize=12, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + ax.annotate(f"Baseline exec. time (ms):", xy=(0, -0.37), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["r4"]) for i, l in enumerate(labels): baseline_median = np.median(data[data["size"] == int(l)]["baseline_time_sec"]) - ax.annotate(f"{1000 * baseline_median:.1f} ms", xy=(i, -0.47), fontsize=12, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.47), fontsize=9, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) # Add block size annotation; if y == 0: @@ -84,6 +93,70 @@ def build_exec_time_plot(data, gridspec, x, y): ax.xaxis.grid(False) return ax + + +def build_exec_time_plot_1_row(data, gridspec, y): + + data["size_str"] = data["size"].astype(str) + + palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"]] + markers = ["o", "X", "D"] + + # Add a lineplot with the exec times; + ax = fig.add_subplot(gridspec[0, y]) + ax = sns.lineplot(x="size_str", y="computation_speedup", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, + err_style="bars", linewidth=2, legend=None, sort=False, ci=None, zorder=2) + data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["computation_speedup"].apply(gmean).reset_index() + order = data["block_size_str"].unique() + ax = sns.scatterplot(x="size_str", y="computation_speedup", hue="block_size_str", data=data_averaged, palette=palette, ax=ax, edgecolor="#0f0f0f", + size_norm=30, legend=False, zorder=3, ci=None, markers=markers, style="block_size_str", hue_order=order, style_order=order, linewidth=0.05) + + labels = sorted(data["size"].unique()) + labels_str = [str(x) for x in labels] + + # Set the same y limits in each plot; + ax.set_ylim((0, 4)) + + # Add a horizontal line to denote speedup = 1x; + ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + + # Set the x ticks; + ax.set_xticks(labels_str) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) + ax.tick_params(labelcolor="black") + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(5)) + if y == 0: + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) + else: + ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # Hide tick markers; + for tic in ax.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + ax.set_ylabel(None) + ax.set_xlabel(None) + + # Add benchmark name and baseline execution time annotations; + ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.1), fontsize=14, ha="center", xycoords="axes fraction") + + # Turn off tick lines; + ax.xaxis.grid(False) + + # Legend; + if y == 0: + legend_labels = [f"1D={x.split(',')[0]}, 2D={x.split(',')[1]}" for x in data["block_size_str"].unique()] + custom_lines = [ + lines.Line2D([], [], color="white", marker=markers[i], markersize=10, label=legend_labels[i], markerfacecolor=palette[i], markeredgecolor="#2f2f2f") + for i in range(len(legend_labels))] + + leg = fig.legend(custom_lines, legend_labels, + bbox_to_anchor=(0.95, 1), fontsize=12, ncol=len(legend_labels), handletextpad=0.1) + leg.set_title("Block size:") + leg._legend_box.align = "left" + + return ax if __name__ == "__main__": @@ -104,14 +177,14 @@ def build_exec_time_plot(data, gridspec, x, y): block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) num_col = len(benchmark_list) num_row = len(block_size_list) - fig = plt.figure(figsize=(4 * num_col, 4 * num_row)) + fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) gs = gridspec.GridSpec(num_row, num_col) plt.subplots_adjust(top=0.8, - bottom=0.2, - left=0.13, + bottom=0.15, + left=0.2, right=0.90, hspace=1.1, - wspace=0.8) + wspace=0.15) exec_time_axes = [] for b_i, b in enumerate(benchmark_list): @@ -120,9 +193,45 @@ def build_exec_time_plot(data, gridspec, x, y): exec_time_axes += [build_exec_time_plot(curr_res, gs, block_size_i, b_i)] plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") - plt.annotate("Speedup over serial execution", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Execution Time Speedup\nw.r.t Serial Baseline", fontsize=25, x=.05, y=0.99, ha="left") + plt.annotate("Speedup over serial scheduling", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Execution time speedup\nover serial kernel scheduling", fontsize=25, x=.05, y=0.99, ha="left") plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_{OUTPUT_DATE}.pdf"), dpi=300) + #%% Similar plot, but all block sizes are on 1 row; + + + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams['axes.titlepad'] = 20 + plt.rcParams['axes.labelpad'] = 10 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + + # Lists of benchmarks and block sizes; + benchmark_list = sorted(data["benchmark"].unique()) + num_col = len(benchmark_list) + num_row = 1 + fig = plt.figure(figsize=(2.7 * num_col, 4 * num_row)) + gs = gridspec.GridSpec(num_row, num_col) + plt.subplots_adjust(top=0.67, + bottom=0.18, + left=0.12, + right=0.95, + hspace=1.1, + wspace=0.15) + + exec_time_axes = [] + for b_i, b in enumerate(benchmark_list): + curr_res = data[data["benchmark"] == b].reset_index(drop=True) + exec_time_axes += [build_exec_time_plot_1_row(curr_res, gs, b_i)] + + plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") + plt.annotate("Speedup over\nserial scheduling", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Execution time speedup\nover serial kernel scheduling", fontsize=20, x=.05, y=0.99, ha="left") + + plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_1_row_{OUTPUT_DATE}.pdf"), dpi=300) + + + \ No newline at end of file diff --git a/projects/resources/python/plotting/plot_utils.py b/projects/resources/python/plotting/plot_utils.py index 683dafda..b0ce785a 100755 --- a/projects/resources/python/plotting/plot_utils.py +++ b/projects/resources/python/plotting/plot_utils.py @@ -52,6 +52,8 @@ y2 = "#FF9642", y3 = "#FFAB69", + peach1 = "#FF9868", + bt1 = "#55819E", bt2 = "#538F6F", blue_klein = "#002fa7", @@ -76,7 +78,7 @@ def get_exp_label(val) -> str: exp_val += 1 remaining_val = remaining_val // 10 if remaining_val > 1: - return r"$\mathdefault{" + str(remaining_val) + r"·{10}^" + str(exp_val) + r"}$" + return r"$\mathdefault{" + str(remaining_val) + r"\!·\!{10}^" + str(exp_val) + r"}$" else: return r"$\mathdefault{" + r"{10}^" + str(exp_val) + r"}$" From 14c7b29cad7cba7540f2c108fbd544a38377523c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 21 Jun 2020 18:32:30 +0200 Subject: [PATCH 100/236] adding baseline cuda benchmarks and plots --- .gitignore | 2 + projects/resources/cuda/b1_default.cu | 143 ++++++++++ projects/resources/cuda/b1_sync.cu | 132 +++++++++ projects/resources/cuda/b6_default.cu | 269 +++++++++++++++++ projects/resources/cuda/b6_sync.cu | 266 +++++++++++++++++ projects/resources/cuda/b7_default.cu | 215 ++++++++++++++ projects/resources/cuda/b7_sync.cu | 206 +++++++++++++ projects/resources/cuda/options.hpp | 63 ++++ projects/resources/cuda/utils.hpp | 117 ++++++++ .../python/benchmark/bench/bench_6.py | 2 - .../python/benchmark/benchmark_wrapper.py | 86 +++++- .../resources/python/plotting/load_data.py | 68 ++++- .../plotting/plot_speedup_grcuda_cuda.py | 270 ++++++++++++++++++ 13 files changed, 1821 insertions(+), 18 deletions(-) create mode 100644 projects/resources/cuda/b1_default.cu create mode 100644 projects/resources/cuda/b1_sync.cu create mode 100644 projects/resources/cuda/b6_default.cu create mode 100644 projects/resources/cuda/b6_sync.cu create mode 100644 projects/resources/cuda/b7_default.cu create mode 100644 projects/resources/cuda/b7_sync.cu create mode 100644 projects/resources/cuda/options.hpp create mode 100644 projects/resources/cuda/utils.hpp create mode 100755 projects/resources/python/plotting/plot_speedup_grcuda_cuda.py diff --git a/.gitignore b/.gitignore index f6cb476f..78e39a7d 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,5 @@ mx.grcuda/eclipse-launches **.log /scratch **.nvvp +projects/resources/cuda/bin +data/results/* diff --git a/projects/resources/cuda/b1_default.cu b/projects/resources/cuda/b1_default.cu new file mode 100644 index 00000000..235b6262 --- /dev/null +++ b/projects/resources/cuda/b1_default.cu @@ -0,0 +1,143 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void square(const float* x, float* y, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = x[i] * x[i]; + } +} + +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +__global__ void reduce(const float *x, const float *y, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] - y[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +///////////////////////////// +///////////////////////////// + +void init(float *x, float *y, int N) { + for (int i = 0; i < N; i++) { + x[i] = 1.0 / (i + 1); + y[i] = 2.0 / (i + 1); + } +} + +void reset(float *res) { + res[0] = 0.0; +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = 64; + int err = 0; + + if (debug) { + std::cout << "running b1 dag" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + } + + auto start = clock_type::now(); + float *x, *y, *x1, *y1, *res; + err = cudaMallocManaged(&x, sizeof(float) * N); + err = cudaMallocManaged(&y, sizeof(float) * N); + err = cudaMallocManaged(&x1, sizeof(float) * N); + err = cudaMallocManaged(&y1, sizeof(float) * N); + err = cudaMallocManaged(&res, sizeof(float)); + if (debug && err) std::cout << err << std::endl; + + // Create streams; + cudaStream_t s1, s2; + err = cudaStreamCreate(&s1); + err = cudaStreamCreate(&s2); + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + init(x, y, N); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(res); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + square<<>>(x, x1, N); + square<<>>(y, y1, N); + + // Stream 1 waits stream 2; + cudaEvent_t e1; + cudaEventCreate(&e1); + cudaEventRecord(e1, s2); + cudaStreamWaitEvent(s1, e1, 0); + + reduce<<>>(x1, y1, res, N); + cudaStreamSynchronize(s1); + if (debug && err) std::cout << err << std::endl; + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=" << res[0] << "; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << res[0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b1_sync.cu b/projects/resources/cuda/b1_sync.cu new file mode 100644 index 00000000..e30e3adf --- /dev/null +++ b/projects/resources/cuda/b1_sync.cu @@ -0,0 +1,132 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void square(const float* x, float* y, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = x[i] * x[i]; + } +} + +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +__global__ void reduce(const float *x, const float *y, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] - y[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +///////////////////////////// +///////////////////////////// + +void init(float *x, float *y, int N) { + for (int i = 0; i < N; i++) { + x[i] = 1.0 / (i + 1); + y[i] = 2.0 / (i + 1); + } +} + +void reset(float *res) { + res[0] = 0.0; +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = 64; + int err = 0; + + if (debug) { + std::cout << "running b1 sync" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + } + + auto start = clock_type::now(); + float *x, *y, *x1, *y1, *res; + err = cudaMallocManaged(&x, sizeof(float) * N); + err = cudaMallocManaged(&y, sizeof(float) * N); + err = cudaMallocManaged(&x1, sizeof(float) * N); + err = cudaMallocManaged(&y1, sizeof(float) * N); + err = cudaMallocManaged(&res, sizeof(float)); + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + init(x, y, N); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(res); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + square<<>>(x, x1, N); + err = cudaDeviceSynchronize(); + square<<>>(y, y1, N); + err = cudaDeviceSynchronize(); + reduce<<>>(x1, y1, res, N); + err = cudaDeviceSynchronize(); + if (debug && err) std::cout << err << std::endl; + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=" << res[0] << "; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << res[0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b6_default.cu b/projects/resources/cuda/b6_default.cu new file mode 100644 index 00000000..41923637 --- /dev/null +++ b/projects/resources/cuda/b6_default.cu @@ -0,0 +1,269 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void nb_1(const int* x, const float* y, float* z, int size, int n_feat, int n_classes) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) { + for (int j = 0; j < n_classes; j++) { + for (int q = 0; q < n_feat; q++) { + z[i * n_classes + j] += x[i * n_feat + q] * y[j * n_feat + q]; + } + } + } +} + +extern "C" __global__ void nb_2(const float* x, float* y, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + float curr_max = x[i * n_col_x]; + for (int j = 0; j < n_col_x; j++) { + curr_max = fmaxf(curr_max, x[i * n_col_x + j]); + } + y[i] = curr_max; + } +} + +extern "C" __global__ void nb_3(const float* x, const float* y, float* z, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + float sum = 0; + for (int j = 0; j < n_col_x; j++) { + sum += expf(x[i * n_col_x + j] - y[i]); + } + z[i] = logf(sum) + y[i]; + } +} + +extern "C" __global__ void nb_4(float* x, float* y, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + for (int j = 0; j < n_col_x; j++) { + x[i * n_col_x + j] = expf(x[i * n_col_x + j] - y[i]); + } + } +} + +extern "C" __global__ void rr_1(const int* x, float *y, int n_row_x, int n_col_x) { + for(int j = blockIdx.x * blockDim.x + threadIdx.x; j < n_col_x; j += blockDim.x * gridDim.x) { + float feature_mean = 0; + float sum_sq = 0; + // Compute mean and variance; + for (int i = 0; i < n_row_x; i++) { + feature_mean += x[j * n_row_x + i]; + sum_sq += x[j * n_row_x + i] * x[j * n_row_x + i]; + } + feature_mean /= n_row_x; + float std = sqrtf(sum_sq / n_row_x - feature_mean * feature_mean); + + // Update values; + for (int i = 0; i < n_row_x; i++) { + y[j * n_row_x + i] = ((float) x[j * n_row_x + i] - feature_mean) / std; + } + } +} + +extern "C" __global__ void rr_2(const float* x, const float* y, float* z, int size, int n_feat, int n_classes) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) { + for (int j = 0; j < n_classes; j++) { + for (int q = 0; q < n_feat; q++) { + z[i * n_classes + j] += x[i * n_feat + q] * y[j * n_feat + q]; + } + } + } +} + +extern "C" __global__ void rr_3(float* x, const float *y, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + for (int j = 0; j < n_col_x; j++) { + x[i * n_col_x + j] += y[j]; + } + } +} + +extern "C" __global__ void softmax(float *x, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + float row_exp_sum = 0; + for (int j = 0; j < n_col_x; j++) { + row_exp_sum += expf( x[i * n_col_x + j]); + } + for (int j = 0; j < n_col_x; j++) { + x[i * n_col_x + j] = expf(x[i * n_col_x + j]) / row_exp_sum; + } + } +} + +extern "C" __global__ void argmax(const float *x, const float *y, int *z, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + int curr_best_index = 0; + float curr_best = x[i * n_col_x] + y[i * n_col_x]; + for (int j = 0; j < n_col_x; j++) { + float curr = x[i * n_col_x + j] + y[i * n_col_x + j]; + if (curr > curr_best) { + curr_best = curr; + curr_best_index = j; + } + } + z[i] = curr_best_index; + } +} + +///////////////////////////// +///////////////////////////// + +void reset(float *r1, float *r2, const float *nb_class_log_prior, int N, int num_classes) { + for (int i = 0; i < N; i++) { + for (int j = 0; j < num_classes; j++) { + r1[i * num_classes + j] = nb_class_log_prior[j]; + r2[i * num_classes + j] = 0; + } + } +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = 64; + int err = 0; + + int num_features = 200; + int num_classes = 5; + + if (debug) { + std::cout << "running b6 dag" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + } + + auto start = clock_type::now(); + int *x; + float *z; + err = cudaMallocManaged(&x, sizeof(int) * N * num_features); + if (err) std::cout << err << std::endl; + err = cudaMallocManaged(&z, sizeof(float) * N * num_features); + if (err) std::cout << err << std::endl; + + float *nb_feat_log_prob, *nb_class_log_prior, *ridge_coeff, *ridge_intercept, *nb_amax, *nb_l, *r1, *r2; + int *r; + err = cudaMallocManaged(&nb_feat_log_prob, sizeof(float) * num_classes * num_features); + err = cudaMallocManaged(&nb_class_log_prior, sizeof(float) * num_classes); + err = cudaMallocManaged(&ridge_coeff, sizeof(float) * num_classes * num_features); + err = cudaMallocManaged(&ridge_intercept, sizeof(float) * num_classes); + err = cudaMallocManaged(&nb_amax, sizeof(float) * N); + err = cudaMallocManaged(&nb_l, sizeof(float) * N); + err = cudaMallocManaged(&r1, sizeof(float) * N * num_classes); + err = cudaMallocManaged(&r2, sizeof(float) * N * num_classes); + err = cudaMallocManaged(&r, sizeof(int) * N); + if (err) std::cout << err << std::endl; + + // Initialze arrays; + for (int i = 0; i < num_classes; i++) { + for (int j = 0; j < num_features; j++) { + nb_feat_log_prob[i * num_features + j] = (float)(rand()) / (float)(RAND_MAX); + ridge_coeff[i * num_features + j] = (float)(rand()) / (float)(RAND_MAX); + } + nb_class_log_prior[i] = (float)(rand()) / (float)(RAND_MAX); + ridge_intercept[i] = (float)(rand()) / (float)(RAND_MAX); + } + int max_occurrence_of_ngram = 10; + for (int i = 0; i < N; i++) { + for (int j = 0; j < num_features; j++) { + x[i * num_features + j] = rand() % max_occurrence_of_ngram; + } + for (int j = 0; j < num_classes; j++) { + r1[i * num_classes + j] = nb_class_log_prior[j]; + r2[i * num_classes + j] = 0; + } + } + + // Create streams; + cudaStream_t s1, s2; + err = cudaStreamCreate(&s1); + err = cudaStreamCreate(&s2); + if (debug && err) std::cout << err << std::endl; + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(r1, r2, nb_class_log_prior, N, num_classes); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + rr_1<<>>(x, z, N, num_features); + + nb_1<<>>(x, nb_feat_log_prob, r1, N, num_features, num_classes); + + rr_2<<>>(z, ridge_coeff, r2, N, num_features, num_classes); + + nb_2<<>>(r1, nb_amax, N, num_classes); + + nb_3<<>>(r1, nb_amax, nb_l, N, num_classes); + + rr_3<<>>(r2, ridge_intercept, N, num_classes); + + nb_4<<>>(r1, nb_l, N, num_classes); + + softmax<<>>(r1, N, num_classes); + + softmax<<>>(r2, N, num_classes); + + // Stream 1 waits stream 2; + cudaEvent_t e1; + cudaEventCreate(&e1); + cudaEventRecord(e1, s2); + cudaStreamWaitEvent(s1, e1, 0); + + argmax<<>>(r1, r2, r, N, num_classes); + cudaDeviceSynchronize(); + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < 10; j++) { + std::cout << r[j] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << 0.0 << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b6_sync.cu b/projects/resources/cuda/b6_sync.cu new file mode 100644 index 00000000..f3724718 --- /dev/null +++ b/projects/resources/cuda/b6_sync.cu @@ -0,0 +1,266 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void nb_1(const int* x, const float* y, float* z, int size, int n_feat, int n_classes) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) { + for (int j = 0; j < n_classes; j++) { + for (int q = 0; q < n_feat; q++) { + z[i * n_classes + j] += x[i * n_feat + q] * y[j * n_feat + q]; + } + } + } +} + +extern "C" __global__ void nb_2(const float* x, float* y, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + float curr_max = x[i * n_col_x]; + for (int j = 0; j < n_col_x; j++) { + curr_max = fmaxf(curr_max, x[i * n_col_x + j]); + } + y[i] = curr_max; + } +} + +extern "C" __global__ void nb_3(const float* x, const float* y, float* z, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + float sum = 0; + for (int j = 0; j < n_col_x; j++) { + sum += expf(x[i * n_col_x + j] - y[i]); + } + z[i] = logf(sum) + y[i]; + } +} + +extern "C" __global__ void nb_4(float* x, float* y, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + for (int j = 0; j < n_col_x; j++) { + x[i * n_col_x + j] = expf(x[i * n_col_x + j] - y[i]); + } + } +} + +extern "C" __global__ void rr_1(const int* x, float *y, int n_row_x, int n_col_x) { + for(int j = blockIdx.x * blockDim.x + threadIdx.x; j < n_col_x; j += blockDim.x * gridDim.x) { + float feature_mean = 0; + float sum_sq = 0; + // Compute mean and variance; + for (int i = 0; i < n_row_x; i++) { + feature_mean += x[j * n_row_x + i]; + sum_sq += x[j * n_row_x + i] * x[j * n_row_x + i]; + } + feature_mean /= n_row_x; + float std = sqrtf(sum_sq / n_row_x - feature_mean * feature_mean); + + // Update values; + for (int i = 0; i < n_row_x; i++) { + y[j * n_row_x + i] = ((float) x[j * n_row_x + i] - feature_mean) / std; + } + } +} + +extern "C" __global__ void rr_2(const float* x, const float* y, float* z, int size, int n_feat, int n_classes) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) { + for (int j = 0; j < n_classes; j++) { + for (int q = 0; q < n_feat; q++) { + z[i * n_classes + j] += x[i * n_feat + q] * y[j * n_feat + q]; + } + } + } +} + +extern "C" __global__ void rr_3(float* x, const float *y, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + for (int j = 0; j < n_col_x; j++) { + x[i * n_col_x + j] += y[j]; + } + } +} + +extern "C" __global__ void softmax(float *x, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + float row_exp_sum = 0; + for (int j = 0; j < n_col_x; j++) { + row_exp_sum += expf( x[i * n_col_x + j]); + } + for (int j = 0; j < n_col_x; j++) { + x[i * n_col_x + j] = expf(x[i * n_col_x + j]) / row_exp_sum; + } + } +} + +extern "C" __global__ void argmax(const float *x, const float *y, int *z, int n_row_x, int n_col_x) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { + int curr_best_index = 0; + float curr_best = x[i * n_col_x] + y[i * n_col_x]; + for (int j = 0; j < n_col_x; j++) { + float curr = x[i * n_col_x + j] + y[i * n_col_x + j]; + if (curr > curr_best) { + curr_best = curr; + curr_best_index = j; + } + } + z[i] = curr_best_index; + } +} + +///////////////////////////// +///////////////////////////// + +void reset(float *r1, float *r2, const float *nb_class_log_prior, int N, int num_classes) { + for (int i = 0; i < N; i++) { + for (int j = 0; j < num_classes; j++) { + r1[i * num_classes + j] = nb_class_log_prior[j]; + r2[i * num_classes + j] = 0; + } + } +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = 64; + int err = 0; + + int num_features = 200; + int num_classes = 5; + + if (debug) { + std::cout << "running b6 sync" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + } + + auto start = clock_type::now(); + int *x; + float *z; + err = cudaMallocManaged(&x, sizeof(int) * N * num_features); + if (err) std::cout << err << std::endl; + err = cudaMallocManaged(&z, sizeof(float) * N * num_features); + if (err) std::cout << err << std::endl; + + float *nb_feat_log_prob, *nb_class_log_prior, *ridge_coeff, *ridge_intercept, *nb_amax, *nb_l, *r1, *r2; + int *r; + err = cudaMallocManaged(&nb_feat_log_prob, sizeof(float) * num_classes * num_features); + err = cudaMallocManaged(&nb_class_log_prior, sizeof(float) * num_classes); + err = cudaMallocManaged(&ridge_coeff, sizeof(float) * num_classes * num_features); + err = cudaMallocManaged(&ridge_intercept, sizeof(float) * num_classes); + err = cudaMallocManaged(&nb_amax, sizeof(float) * N); + err = cudaMallocManaged(&nb_l, sizeof(float) * N); + err = cudaMallocManaged(&r1, sizeof(float) * N * num_classes); + err = cudaMallocManaged(&r2, sizeof(float) * N * num_classes); + err = cudaMallocManaged(&r, sizeof(int) * N); + if (err) std::cout << err << std::endl; + + // Initialze arrays; + for (int i = 0; i < num_classes; i++) { + for (int j = 0; j < num_features; j++) { + nb_feat_log_prob[i * num_features + j] = (float)(rand()) / (float)(RAND_MAX); + ridge_coeff[i * num_features + j] = (float)(rand()) / (float)(RAND_MAX); + } + nb_class_log_prior[i] = (float)(rand()) / (float)(RAND_MAX); + ridge_intercept[i] = (float)(rand()) / (float)(RAND_MAX); + } + int max_occurrence_of_ngram = 10; + for (int i = 0; i < N; i++) { + for (int j = 0; j < num_features; j++) { + x[i * num_features + j] = rand() % max_occurrence_of_ngram; + } + for (int j = 0; j < num_classes; j++) { + r1[i * num_classes + j] = nb_class_log_prior[j]; + r2[i * num_classes + j] = 0; + } + } + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(r1, r2, nb_class_log_prior, N, num_classes); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + rr_1<<>>(x, z, N, num_features); + cudaDeviceSynchronize(); + + nb_1<<>>(x, nb_feat_log_prob, r1, N, num_features, num_classes); + cudaDeviceSynchronize(); + + rr_2<<>>(z, ridge_coeff, r2, N, num_features, num_classes); + cudaDeviceSynchronize(); + + nb_2<<>>(r1, nb_amax, N, num_classes); + cudaDeviceSynchronize(); + + nb_3<<>>(r1, nb_amax, nb_l, N, num_classes); + cudaDeviceSynchronize(); + + rr_3<<>>(r2, ridge_intercept, N, num_classes); + cudaDeviceSynchronize(); + + nb_4<<>>(r1, nb_l, N, num_classes); + cudaDeviceSynchronize(); + + softmax<<>>(r1, N, num_classes); + cudaDeviceSynchronize(); + + softmax<<>>(r2, N, num_classes); + cudaDeviceSynchronize(); + + argmax<<>>(r1, r2, r, N, num_classes); + cudaDeviceSynchronize(); + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < 10; j++) { + std::cout << r[j] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << 0.0 << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b7_default.cu b/projects/resources/cuda/b7_default.cu new file mode 100644 index 00000000..9d6d7e67 --- /dev/null +++ b/projects/resources/cuda/b7_default.cu @@ -0,0 +1,215 @@ +#include +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { + + for(int n = blockIdx.x * blockDim.x + threadIdx.x; n < num_rows; n += blockDim.x * gridDim.x) { + float sum = 0; + for (int i = ptr[n]; i < ptr[n + 1]; i++) { + sum += val[i] * vec[idx[i]]; + } + res[n] = sum; + } +} + +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +extern "C" __global__ void sum(const float *x, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +extern "C" __global__ void divide(const float* x, float *y, float *val, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = x[i] / val[0]; + } +} + +///////////////////////////// +///////////////////////////// + +void random_coo(int* x, int *y, int *val, int N, int degree) { + for (int i = 0; i < N; i++) { + std::set edges; + while (edges.size() < degree) { + edges.insert(rand() % N); + } + int j = 0; + for (auto iter = edges.begin(); iter != edges.end(); iter++, j++) { + x[i * degree + j] = i; + y[i * degree + j] = *iter; + val[i * degree + j] = 1; + } + } +} + +void reset(float *auth1, float *auth2, float *hub1, float* hub2, float *auth_norm, float *hub_norm, int N) { + for (int i = 0; i < N; i++) { + auth1[i] = 1; + auth2[i] = 1; + hub1[i] = 1; + hub2[i] = 1; + } + auth_norm[0] = 0; + hub_norm[0] = 0; +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int degree = 50; + int iterations = 10; + + int block_size = options.block_size_1d; + int num_blocks = 32; + int err = 0; + + int nnz = degree * N; + + if (debug) { + std::cout << "running b7 sync" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + } + + auto start = clock_type::now(); + int *ptr, *idx, *val, *ptr2, *idx2, *val2; + float *auth1, *auth2, *hub1, *hub2, *auth_norm, *hub_norm; + + err = cudaMallocManaged(&ptr, sizeof(int) * (N + 1)); + err = cudaMallocManaged(&ptr2, sizeof(int) * (N + 1)); + err = cudaMallocManaged(&idx, sizeof(int) * nnz); + err = cudaMallocManaged(&idx2, sizeof(int) * nnz); + err = cudaMallocManaged(&val, sizeof(int) * nnz); + err = cudaMallocManaged(&val2, sizeof(int) * nnz); + + err = cudaMallocManaged(&auth1, sizeof(float) * N); + err = cudaMallocManaged(&auth2, sizeof(float) * N); + err = cudaMallocManaged(&hub1, sizeof(float) * N); + err = cudaMallocManaged(&hub2, sizeof(float) * N); + err = cudaMallocManaged(&auth_norm, sizeof(float)); + err = cudaMallocManaged(&hub_norm, sizeof(float)); + + if (debug && err) std::cout << err << std::endl; + + // Create streams; + cudaStream_t s1, s2; + err = cudaStreamCreate(&s1); + err = cudaStreamCreate(&s2); + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + + // Create a random COO; + int *x = (int*) malloc(nnz * sizeof(int)); + int *y = (int*) malloc(nnz * sizeof(int)); + int *v = (int*) malloc(nnz * sizeof(int)); + random_coo(x, y, v, N, degree); + + // Create a CSR; + coo2csr(ptr, idx, val, x, y, v, N, N, nnz); + coo2csr(ptr2, idx2, val2, y, x, v, N, N, nnz); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(auth1, auth2, hub1, hub2, auth_norm, hub_norm, N); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + for (int iter = 0; iter < iterations; iter++) { + cudaEvent_t e1, e2; + cudaEventCreate(&e1); + cudaEventCreate(&e2); + + spmv<<>>(ptr2, idx2, val2, hub1, auth2, N, nnz); + err = cudaEventRecord(e1, s1); + spmv<<>>(ptr, idx, val, auth1, hub2, N, nnz); + err = cudaEventRecord(e2, s2); + sum<<>>(auth2, auth_norm, N); + + sum<<>>(hub2, hub_norm, N); + + // Stream 1 waits stream 2; + err = cudaStreamWaitEvent(s1, e2, 0); + divide<<>>(auth2, auth1, auth_norm, N); + // Stream 2 waits stream 1; + err = cudaStreamWaitEvent(s2, e1, 0); + divide<<>>(hub2, hub1, hub_norm, N); + + err = cudaStreamSynchronize(s1); + err = cudaStreamSynchronize(s2); + auth_norm[0] = 0; + + hub_norm[0] = 0; + + if (debug && err) std::cout << err << std::endl; + } + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < 10; j++) { + std::cout << auth1[j] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << 0.0 << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b7_sync.cu b/projects/resources/cuda/b7_sync.cu new file mode 100644 index 00000000..38f66b1d --- /dev/null +++ b/projects/resources/cuda/b7_sync.cu @@ -0,0 +1,206 @@ +#include +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { + + for(int n = blockIdx.x * blockDim.x + threadIdx.x; n < num_rows; n += blockDim.x * gridDim.x) { + float sum = 0; + for (int i = ptr[n]; i < ptr[n + 1]; i++) { + sum += val[i] * vec[idx[i]]; + } + res[n] = sum; + } +} + +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +extern "C" __global__ void sum(const float *x, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +extern "C" __global__ void divide(const float* x, float *y, float *val, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = x[i] / val[0]; + } +} + +///////////////////////////// +///////////////////////////// + +void random_coo(int* x, int *y, int *val, int N, int degree) { + for (int i = 0; i < N; i++) { + std::set edges; + while (edges.size() < degree) { + edges.insert(rand() % N); + } + int j = 0; + for (auto iter = edges.begin(); iter != edges.end(); iter++, j++) { + x[i * degree + j] = i; + y[i * degree + j] = *iter; + val[i * degree + j] = 1; + } + } +} + +void reset(float *auth1, float *auth2, float *hub1, float* hub2, float *auth_norm, float *hub_norm, int N) { + for (int i = 0; i < N; i++) { + auth1[i] = 1; + auth2[i] = 1; + hub1[i] = 1; + hub2[i] = 1; + } + auth_norm[0] = 0; + hub_norm[0] = 0; +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int degree = 50; + int iterations = 10; + + int block_size = options.block_size_1d; + int num_blocks = 32; + int err = 0; + + int nnz = degree * N; + + if (debug) { + std::cout << "running b7 sync" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + } + + auto start = clock_type::now(); + int *ptr, *idx, *val, *ptr2, *idx2, *val2; + float *auth1, *auth2, *hub1, *hub2, *auth_norm, *hub_norm; + + err = cudaMallocManaged(&ptr, sizeof(int) * (N + 1)); + err = cudaMallocManaged(&ptr2, sizeof(int) * (N + 1)); + err = cudaMallocManaged(&idx, sizeof(int) * nnz); + err = cudaMallocManaged(&idx2, sizeof(int) * nnz); + err = cudaMallocManaged(&val, sizeof(int) * nnz); + err = cudaMallocManaged(&val2, sizeof(int) * nnz); + + err = cudaMallocManaged(&auth1, sizeof(float) * N); + err = cudaMallocManaged(&auth2, sizeof(float) * N); + err = cudaMallocManaged(&hub1, sizeof(float) * N); + err = cudaMallocManaged(&hub2, sizeof(float) * N); + err = cudaMallocManaged(&auth_norm, sizeof(float)); + err = cudaMallocManaged(&hub_norm, sizeof(float)); + + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + + // Create a random COO; + int *x = (int*) malloc(nnz * sizeof(int)); + int *y = (int*) malloc(nnz * sizeof(int)); + int *v = (int*) malloc(nnz * sizeof(int)); + random_coo(x, y, v, N, degree); + + // Create a CSR; + coo2csr(ptr, idx, val, x, y, v, N, N, nnz); + coo2csr(ptr2, idx2, val2, y, x, v, N, N, nnz); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(auth1, auth2, hub1, hub2, auth_norm, hub_norm, N); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + for (int iter = 0; iter < iterations; iter++) { + + spmv<<>>(ptr2, idx2, val2, hub1, auth2, N, nnz); + err = cudaDeviceSynchronize(); + + spmv<<>>(ptr, idx, val, auth1, hub2, N, nnz); + err = cudaDeviceSynchronize(); + + sum<<>>(auth2, auth_norm, N); + err = cudaDeviceSynchronize(); + + sum<<>>(hub2, hub_norm, N); + err = cudaDeviceSynchronize(); + + divide<<>>(auth2, auth1, auth_norm, N); + err = cudaDeviceSynchronize(); + + divide<<>>(hub2, hub1, hub_norm, N); + err = cudaDeviceSynchronize(); + + auth_norm[0] = 0; + hub_norm[0] = 0; + + if (debug && err) std::cout << err << std::endl; + } + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < 10; j++) { + std::cout << auth1[j] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << 0.0 << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/options.hpp b/projects/resources/cuda/options.hpp new file mode 100644 index 00000000..1f00cc86 --- /dev/null +++ b/projects/resources/cuda/options.hpp @@ -0,0 +1,63 @@ +#pragma once + +#include +#include +#include + +////////////////////////////// +////////////////////////////// + +#define DEBUG false +#define NUM_ITER 30 +#define DEFAULT_BLOCK_SIZE_1D 32 +#define DEFAULT_BLOCK_SIZE_2D 8 + +////////////////////////////// +////////////////////////////// + +struct Options { + + // Testing options; + uint num_iter = NUM_ITER; + int debug = DEBUG; + int block_size_1d = DEFAULT_BLOCK_SIZE_1D; + int block_size_2d = DEFAULT_BLOCK_SIZE_2D; + int N = 0; + + ////////////////////////////// + ////////////////////////////// + + Options(int argc, char *argv[]) { + int opt; + static struct option long_options[] = {{"debug", no_argument, 0, 'd'}, + {"num_iter", required_argument, 0, 't'}, + {"N", required_argument, 0, 'n'}, + {"block_size_1d", required_argument, 0, 'b'}, + {"block_size_2d", required_argument, 0, 'c'}, + {0, 0, 0, 0}}; + // getopt_long stores the option index here; + int option_index = 0; + + while ((opt = getopt_long(argc, argv, "dt:n:b:c:", long_options, &option_index)) != EOF) { + switch (opt) { + case 'd': + debug = true; + break; + case 't': + num_iter = atoi(optarg); + break; + case 'n': + N = atoi(optarg); + break; + case 'b': + block_size_1d = atoi(optarg); + break; + case 'c': + block_size_2d = atoi(optarg); + break; + default: + break; + } + } + } +}; diff --git a/projects/resources/cuda/utils.hpp b/projects/resources/cuda/utils.hpp new file mode 100644 index 00000000..88ff0189 --- /dev/null +++ b/projects/resources/cuda/utils.hpp @@ -0,0 +1,117 @@ +#pragma once + +#include +#include +#include + +template +inline bool compare(const std::tuple &lhs, const std::tuple &rhs) { + I a = std::get < 0 > (lhs); + I b = std::get < 0 > (rhs); + I c = std::get < 1 > (lhs); + I d = std::get < 1 > (rhs); + if (a == b) + return c < d; + else + return a < b; +} + +template +inline bool compare(const std::tuple &lhs, const std::tuple &rhs) { + I a = std::get < 0 > (lhs); + I b = std::get < 0 > (rhs); + I c = std::get < 1 > (lhs); + I d = std::get < 1 > (rhs); + if (a == b) + return c < d; + else + return a < b; +} + + +template +inline void customSort(I *row_indices, I *col_indices, T *values, I nnz) { + I nvals = nnz; + std::vector> my_tuple; + + for (I i = 0; i < nvals; ++i) + my_tuple.push_back(std::make_tuple(row_indices[i], col_indices[i], values[i], i)); + + std::sort(my_tuple.begin(), my_tuple.end(), compare); + + for (I i = 0; i < nvals; ++i) { + row_indices[i] = std::get<0>(my_tuple[i]); + col_indices[i] = std::get<1>(my_tuple[i]); + values[i] = std::get<2>(my_tuple[i]); + } +} + +template +inline void coo2csr(I *csrRowPtr, I *csrColInd, T *csrVal, I *row_indices, + I* col_indices, I* values, I nrows, I ncols, I nnz) { + + I temp, row, col, dest, cumsum = 0; + + std::vector row_indices_t(row_indices, row_indices + nnz); + std::vector col_indices_t (col_indices, col_indices + nnz); + std::vector values_t(values, values + nnz); + + customSort(row_indices_t.data(), col_indices_t.data(), values_t.data(), nnz); + + // Set all rowPtr to 0 + for (I i = 0; i <= nrows; i++) + csrRowPtr[i] = 0; + + // Go through all elements to see how many fall in each row + for (I i = 0; i < nnz; i++) { + row = row_indices_t[i]; + if (row >= nrows) + std::cout << "Error: Index out of bounds!\n"; + csrRowPtr[row]++; + } + + // Cumulative sum to obtain rowPtr + for (I i = 0; i < nrows; i++) { + temp = csrRowPtr[i]; + csrRowPtr[i] = cumsum; + cumsum += temp; + } + csrRowPtr[nrows] = nnz; + + // Store colInd and val + for (I i = 0; i < nnz; i++) { + row = row_indices_t[i]; + dest = csrRowPtr[row]; + col = col_indices_t[i]; + if (col >= ncols) + std::cout << "Error: Index out of bounds!\n"; + csrColInd[dest] = col; + csrVal[dest] = values_t[i]; + csrRowPtr[row]++; + } + cumsum = 0; + + // Undo damage done to rowPtr + for (I i = 0; i < nrows; i++) { + temp = csrRowPtr[i]; + csrRowPtr[i] = cumsum; + cumsum = temp; + } + temp = csrRowPtr[nrows]; + csrRowPtr[nrows] = cumsum; + cumsum = temp; +} + +template +inline void print_graph(T *ptr, T* idx, int N, int max_N = 20, int max_E = 20) { + std::cout << "-) degree: " << ptr[0] << std::endl; + for (int v = 1; v < std::min((int) N + 1, max_N); v++) { + std::cout << v - 1 << ") degree: " << ptr[v] - ptr[v - 1] << ", edges: "; + for (int e = 0; e < ptr[v] - ptr[v - 1]; e++) { + if (e < max_E) { + std::cout << idx[ptr[v - 1] + e] << ", "; + } + } + std::cout << std::endl; + } +} diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index 6e992ef4..0de86a3f 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -10,8 +10,6 @@ ############################## ############################## -NUM_THREADS_PER_BLOCK = 1024 - NB_KERNEL = """ extern "C" __global__ void nb_1(const int* x, const float* y, float* z, int size, int n_feat, int n_classes) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) { diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 01979bcb..e538dd46 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -18,10 +18,10 @@ ] num_elem = { - "b1": [40000000], #[2000000, 5000000, 10000000, 20000000], - "b6": [800000], #[20000, 50000, 200000, 500000], - "b7": [250000], #[50000, 100000, 150000, 200000], - "b8": [4800], #[800, 1600, 2400, 4000], + "b1": [2000000, 5000000, 10000000, 20000000, 40000000], + "b6": [20000, 50000, 200000, 500000, 800000], + "b7": [50000, 100000, 150000, 200000, 250000], + "b8": [800, 1600, 2400, 4000, 4800], } exec_policies = ["default", "sync"] @@ -35,6 +35,49 @@ block_sizes_1d = [32, 256, 1024] block_sizes_2d = [8, 16, 32] +############################## +############################## + +CUDA_CMD = "./{}_{} -n {} -b {} -c {} -t {} | tee {}" + + +def execute_cuda_benchmark(benchmark, size, block_size, exec_policy, num_iter, debug, output_date=None): + if debug: + BenchmarkResult.log_message("") + BenchmarkResult.log_message("") + BenchmarkResult.log_message("#" * 30) + BenchmarkResult.log_message(f"Benchmark {i + 1}/{tot_benchmarks}") + BenchmarkResult.log_message(f"benchmark={b}, size={n}," + f" block size={block_size}, " + f" exec policy={exec_policy}") + BenchmarkResult.log_message("#" * 30) + BenchmarkResult.log_message("") + BenchmarkResult.log_message("") + + if not output_date: + output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + file_name = f"cuda_{output_date}_{benchmark}_{exec_policy}_{size}_{block_size['block_size_1d']}_{block_size['block_size_2d']}_{num_iter}.csv" + # Create a folder if it doesn't exist; + output_folder_path = os.path.join(BenchmarkResult.DEFAULT_RES_FOLDER, output_date + "_cuda") + if not os.path.exists(output_folder_path): + if debug: + BenchmarkResult.log_message(f"creating result folder: {output_folder_path}") + os.mkdir(output_folder_path) + output_path = os.path.join(output_folder_path, file_name) + + benchmark_cmd = CUDA_CMD.format(benchmark, exec_policy, size, block_size["block_size_1d"], + block_size["block_size_2d"], num_iter, output_path) + start = time.time() + result = subprocess.run(benchmark_cmd, + shell=True, + stdout=subprocess.STDOUT, + cwd=f"{os.getenv('GRCUDA_HOME')}/projects/resources/cuda/bin") + result.check_returncode() + end = time.time() + if debug: + BenchmarkResult.log_message(f"Benchmark total execution time: {end - start:.2f} seconds") + + ############################## ############################## @@ -44,7 +87,7 @@ "--reinit false --realloc false -b {} --block_size_1d {} --block_size_2d {} --no_cpu_validation {} -o {}" -def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_policy, +def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, num_iter, debug, output_date=None): if debug: BenchmarkResult.log_message("") @@ -66,7 +109,7 @@ def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_polic file_name = f"{output_date}_{benchmark}_{exec_policy}_{new_stream_policy}_{parent_stream_policy}_" \ f"{dependency_policy}_{size}_{block_size['block_size_1d']}_{block_size['block_size_2d']}_{num_iter}.json" # Create a folder if it doesn't exist; - output_folder_path = os.path.join(BenchmarkResult.DEFAULT_RES_FOLDER, output_date) + output_folder_path = os.path.join(BenchmarkResult.DEFAULT_RES_FOLDER, output_date + "_grcuda") if not os.path.exists(output_folder_path): if debug: BenchmarkResult.log_message(f"creating result folder: {output_folder_path}") @@ -96,6 +139,8 @@ def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_polic parser.add_argument("-d", "--debug", action="store_true", help="If present, print debug messages") + parser.add_argument("-c", "--cuda_test", action="store_true", + help="If present, run performance tests using CUDA") parser.add_argument("-i", "--num_iter", metavar="N", type=int, default=BenchmarkResult.DEFAULT_NUM_ITER, help="Number of times each benchmark is executed") @@ -104,16 +149,21 @@ def execute_benchmark(benchmark, size, block_size, exec_policy, new_stream_polic debug = args.debug if args.debug else BenchmarkResult.DEFAULT_DEBUG num_iter = args.num_iter if args.num_iter else BenchmarkResult.DEFAULT_NUM_ITER + use_cuda = args.cuda_test # Setup the block size for each benchmark; block_sizes = create_block_size_list(block_sizes_1d, block_sizes_2d) if debug: - BenchmarkResult.log_message(f"using block sizes: {block_sizes}") + BenchmarkResult.log_message(f"using block sizes: {block_sizes}; using low-level CUDA benchmarks: {use_cuda}") def tot_benchmark_count(): tot = 0 - for b in benchmarks: - tot += len(num_elem[b]) * len(block_sizes) * len(exec_policies) * len(new_stream_policies) * len(parent_stream_policies) * len(dependency_policies) + if use_cuda: + for b in benchmarks: + tot += len(num_elem[b]) * len(block_sizes) * len(exec_policies) * len(new_stream_policies) * len(parent_stream_policies) * len(dependency_policies) + else: + for b in benchmarks: + tot += len(num_elem[b]) * len(block_sizes) * len(exec_policies) return tot output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") @@ -125,9 +175,15 @@ def tot_benchmark_count(): for n in num_elem[b]: for block_size in block_sizes: for exec_policy in exec_policies: - for new_stream_policy in new_stream_policies: - for parent_stream_policy in parent_stream_policies: - for dependency_policy in dependency_policies: - execute_benchmark(b, n, block_size, exec_policy, new_stream_policy, - parent_stream_policy, dependency_policy, num_iter, debug, output_date=output_date) - i += 1 + # CUDA Benchmarks; + if use_cuda: + execute_cuda_benchmark(b, n, block_size, exec_policy, num_iter, debug, output_date=output_date) + i += 1 + # GrCUDA Benchmarks; + else: + for new_stream_policy in new_stream_policies: + for parent_stream_policy in parent_stream_policies: + for dependency_policy in dependency_policies: + execute_grcuda_benchmark(b, n, block_size, exec_policy, new_stream_policy, + parent_stream_policy, dependency_policy, num_iter, debug, output_date=output_date) + i += 1 diff --git a/projects/resources/python/plotting/load_data.py b/projects/resources/python/plotting/load_data.py index 65ab2953..7209c17c 100755 --- a/projects/resources/python/plotting/load_data.py +++ b/projects/resources/python/plotting/load_data.py @@ -77,6 +77,52 @@ def load_data(input_date: str, skip_iter=0, remove_inf=True) -> pd.DataFrame: return data +def load_data_cuda(input_date: str, skip_iter=0, remove_inf=True) -> pd.DataFrame: + """ + Load the benchmark results located in the input sub-folder + :param input_date: name of the folder where results are located, as a subfolder of DEFAULT_RES_DIR + :param skip_iter: skip the first iterations for each benchmark, as they are considered warmup + :return: a DataFrame containing the results + """ + input_path = os.path.join(DEFAULT_RES_DIR, input_date) + + # Load results as pd.DataFrames; + data_tmp = [] + for f in os.listdir(input_path): + # Parse filename; + benchmark, exec_policy, size, block_size_1d, block_size_2d, total_iterations = os.path.splitext(f)[0].split("_")[7:] + tmp_data = pd.read_csv(os.path.join(input_path, f)) + + # Skip first lines; + tmp_data = tmp_data.iloc[skip_iter:, :] + + # Add other information; + tmp_data["benchmark"] = benchmark + tmp_data["exec_policy"] = exec_policy + tmp_data["size"] = int(size) + tmp_data["block_size_1d"] = int(block_size_1d) + tmp_data["block_size_2d"] = int(block_size_2d) + tmp_data["block_size_str"] = block_size_1d + "," + block_size_2d + tmp_data["total_iterations"] = int(total_iterations) + data_tmp += [tmp_data] + + data = pd.concat(data_tmp).reset_index(drop=True) + data["num_iter"] -= skip_iter + + # Reorder columns; + columns = ["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", + "total_iterations", "size", "num_iter", "gpu_result", "total_time_sec", "overhead_sec", "computation_sec"] + data = data[columns] + + # Compute speedups; + compute_speedup(data, ["benchmark", "block_size_1d", "block_size_2d", "total_iterations", "size"]) + # Clean columns with infinite speedup; + if remove_inf: + data = data[data["computation_speedup"] != np.inf] + + return data + + def compute_speedup(data, key, speedup_col_name="computation_speedup", time_column="computation_sec", baseline_filter_col="exec_policy", baseline_filter_val="sync", baseline_col_name="baseline_time_sec"): # Initialize speedup values; @@ -90,8 +136,28 @@ def compute_speedup(data, key, speedup_col_name="computation_speedup", time_colu # Compute the speedup for this group; data.loc[group.index, speedup_col_name] = median_baseline / group[time_column] data.loc[group.index, baseline_col_name] = median_baseline + + +def join_tables(t1, t2, key=["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", + "total_iterations", "size", "num_iter"], keep_common_columns=True): + t1_tmp = t1.copy() + t2_tmp = t2.copy() + t1_tmp = t1_tmp.set_index(key) + t2_tmp = t2_tmp.set_index(key) + if keep_common_columns: + common_columns = [x for x in t1_tmp.columns if x in t2_tmp.columns] + t1_tmp = t1_tmp[common_columns] + t2_tmp = t2_tmp[common_columns] + merged = t1_tmp.merge(t2_tmp, suffixes=("_grcuda", "_cuda"), left_index=True, right_index=True, sort=True).reset_index() + merged["grcuda_cuda_speedup"] = merged["computation_sec_cuda"] / merged["computation_sec_grcuda"] + return merged if __name__ == "__main__": - input_date = "2020_06_20_11_56_48" + input_date = "2020_06_20_20_26_03" data = load_data(input_date, skip_iter=3) + + input_date2 = "2020_06_21_14_05_38_cuda" + data2 = load_data_cuda(input_date2, skip_iter=3) + + data3 = join_tables(data[data["benchmark"] == "b1"], data2) \ No newline at end of file diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py new file mode 100755 index 00000000..64d35999 --- /dev/null +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -0,0 +1,270 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sun Jun 21 15:26:36 2020 + +@author: alberto.parravicini +""" + +import numpy as np +import pandas as pd +import seaborn as sns +import matplotlib.pyplot as plt +import matplotlib.gridspec as gridspec +from scipy.stats.mstats import gmean +from matplotlib.patches import Patch, Rectangle +from matplotlib.collections import PatchCollection, LineCollection +import matplotlib.lines as lines + +import os +from load_data import load_data, load_data_cuda, join_tables +from plot_utils import COLORS, get_exp_label, get_ci_size + +############################## +############################## + + +INPUT_DATE_GRCUDA = "2020_06_20_20_26_03" +INPUT_DATE_CUDA = "2020_06_21_17_02_20_cuda" +OUTPUT_DATE = "2020_06_20" +PLOT_DIR = "../../../../data/plots" + +BENCHMARK_NAMES = {"b1": "Vector Squares", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} + +############################## +############################## + +def build_exec_time_plot_grcuda_cuda(data, gridspec, x, y): + + palette = [COLORS["peach1"], COLORS["bb1"]] + markers = ["o"] * len(palette) + + data["size_str"] = data["size"].astype(str) + + # Add a lineplot with the exec times; + ax = fig.add_subplot(gridspec[x, y]) + ax = sns.lineplot(x="size_str", y="grcuda_cuda_speedup", hue="exec_policy", data=data, palette=palette, ax=ax, estimator=gmean, + err_style="bars", linewidth=2, legend=None, ci=None, sort=False, zorder=2) + + labels = sorted(data["size"].unique()) + labels_str = [str(x) for x in labels] + + # Add rectangles to represent variance; + for p_i, p in enumerate(sorted(data["exec_policy"].unique())): + rectangles = [] + for s_i, s in enumerate(labels): + curr_data = data[(data["size"] == s) & (data["exec_policy"] == p)] + upper_ci_size, lower_ci_size, center = get_ci_size(curr_data["grcuda_cuda_speedup"], estimator=gmean, ci=0.90) + bottom = center - lower_ci_size + width = 0.1 + lower_left = [s_i - width / 2, bottom] + # Add an offset to the x position, to avoid overlapping; + lower_left[0] += (2 * p_i - 1) * (width / 3.5) + rectangles += [Rectangle(lower_left, width, upper_ci_size + lower_ci_size)] + + pc = PatchCollection(rectangles, facecolor=palette[p_i], edgecolor="#2f2f2f", linewidth=0.5, zorder=3, clip_on=True, alpha=0.7) + ax.add_collection(pc) + + # Set the same y limits in each plot; + ax.set_ylim((0, 3)) + + # Add a horizontal line to denote speedup = 1x; + ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + + # Set the x ticks; + ax.set_xticks(labels_str) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=45, ha="right", fontsize=9, rotation_mode="anchor") + ax.tick_params(labelcolor="black") + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(4)) + if y == 0: + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) + else: + ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # Hide tick markers; + for tic in ax.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + ax.set_ylabel(None) + ax.set_xlabel(None) + + # Add benchmark name and baseline execution time annotations; + ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.1), fontsize=14, ha="center", xycoords="axes fraction") + ax.annotate(f"GrCUDA serial time (ms):", xy=(0, -0.37), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + + for i, l in enumerate(labels): + baseline_median = np.median(data[data["size"] == int(l)]["baseline_time_sec_grcuda"]) + ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.47), fontsize=9, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + + # Add block size annotation; + if y == 0: + ax.annotate(f"Block size:\n1D={data['block_size_1d'].iloc[0]}, 2D={data['block_size_2d'].iloc[0]}x{data['block_size_2d'].iloc[0]}", xy=(-0.65, 1.25), fontsize=14, ha="left", xycoords="axes fraction") + + # Turn off tick lines; + ax.xaxis.grid(False) + + # Legend; + if y == 0 and x == 0: + legend_labels = ["DAG Scheduling", "Serial Scheduling"] + custom_lines = [ + lines.Line2D([], [], color="white", marker=markers[i], markersize=10, label=legend_labels[i], markerfacecolor=palette[i], markeredgecolor="#2f2f2f") + for i in range(len(legend_labels))] + + leg = fig.legend(custom_lines, legend_labels, + bbox_to_anchor=(0.91, 0.98), fontsize=12, ncol=1, handletextpad=0.1) + leg.set_title(None) + leg._legend_box.align = "left" + + + return ax + + +def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): + + data["size_str"] = data["size"].astype(str) + + legend_labels = ["DAG Scheduling", "Serial Scheduling"] + + palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"]] + markers = ["o", "X", "D"] + + # Add a lineplot with the exec times; + ax = fig.add_subplot(gridspec[x, y]) + ax = sns.lineplot(x="size_str", y="grcuda_cuda_speedup", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, + err_style="bars", linewidth=2, legend=None, sort=False, ci=None, zorder=2) + data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["grcuda_cuda_speedup"].apply(gmean).reset_index() + order = data["block_size_str"].unique() + ax = sns.scatterplot(x="size_str", y="grcuda_cuda_speedup", hue="block_size_str", data=data_averaged, palette=palette, ax=ax, edgecolor="#0f0f0f", + size_norm=30, legend=False, zorder=3, ci=None, markers=markers, style="block_size_str", hue_order=order, style_order=order, linewidth=0.05) + + labels = sorted(data["size"].unique()) + labels_str = [str(x) for x in labels] + + # Set the same y limits in each plot; + ax.set_ylim((0, 3)) + + # Add a horizontal line to denote speedup = 1x; + ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + + # Set the x ticks; + ax.set_xticks(labels_str) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) + ax.tick_params(labelcolor="black") + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(4)) + if y == 0: + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) + else: + ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # Hide tick markers; + for tic in ax.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + # Add policy annotation; + if y == 0: + ax.annotate(f"{legend_labels[x]}", xy=(-0.15, 1.25), fontsize=14, ha="left", xycoords="axes fraction") + + ax.set_ylabel(None) + ax.set_xlabel(None) + + # Add benchmark name and baseline execution time annotations; + ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.1), fontsize=14, ha="center", xycoords="axes fraction") + + # Turn off tick lines; + ax.xaxis.grid(False) + + # Legend; + if x == 0 and y == 0: + legend_labels = [f"1D={x.split(',')[0]}, 2D={x.split(',')[1]}" for x in data["block_size_str"].unique()] + custom_lines = [ + lines.Line2D([], [], color="white", marker=markers[i], markersize=10, label=legend_labels[i], markerfacecolor=palette[i], markeredgecolor="#2f2f2f") + for i in range(len(legend_labels))] + + leg = fig.legend(custom_lines, legend_labels, + bbox_to_anchor=(0.95, 1), fontsize=12, ncol=len(legend_labels), handletextpad=0.1) + leg.set_title("Block size:") + leg._legend_box.align = "left" + + return ax + + +############################## +############################## + +if __name__ == "__main__": + data_grcuda = load_data(INPUT_DATE_GRCUDA, skip_iter=3) + data_cuda = load_data_cuda(INPUT_DATE_CUDA, skip_iter=3) + data = join_tables(data_grcuda, data_cuda) + data = data[data["benchmark"].isin(["b1", "b6"])] + + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams['axes.titlepad'] = 20 + plt.rcParams['axes.labelpad'] = 10 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + + # Lists of benchmarks and block sizes; + benchmark_list = sorted(data["benchmark"].unique()) * 2 + block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) + num_col = len(benchmark_list) + num_row = len(block_size_list) + fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) + gs = gridspec.GridSpec(num_row, num_col) + plt.subplots_adjust(top=0.8, + bottom=0.15, + left=0.2, + right=0.90, + hspace=1.1, + wspace=0.15) + + exec_time_axes = [] + for b_i, b in enumerate(benchmark_list): + for block_size_i, block_size in enumerate(block_size_list): + curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) + exec_time_axes += [build_exec_time_plot_grcuda_cuda(curr_res, gs, block_size_i, b_i)] + + plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") + plt.annotate("Relative execution time", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Relative execution time \nof GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + + plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_grcuda_cuda_{OUTPUT_DATE}.pdf"), dpi=300) + + #%% Similar plot, but all block sizes are on 1 row; + + + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams['axes.titlepad'] = 20 + plt.rcParams['axes.labelpad'] = 10 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + + # Lists of benchmarks and block sizes; + benchmark_list = sorted(data["benchmark"].unique()) * 2 + policy_list = sorted(data["exec_policy"].unique()) + num_col = len(benchmark_list) + num_row = len(policy_list) + fig = plt.figure(figsize=(2.7 * num_col, 3.8 * num_row)) + gs = gridspec.GridSpec(num_row, num_col) + plt.subplots_adjust(top=0.8, + bottom=0.1, + left=0.12, + right=0.95, + hspace=0.7, + wspace=0.15) + + exec_time_axes = [] + for b_i, b in enumerate(benchmark_list): + for p_i, p in enumerate(policy_list): + curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) + exec_time_axes += [build_exec_time_plot_grcuda_cuda_compact(curr_res, gs, p_i, b_i)] + + plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") + plt.annotate("Relative execution time", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Relative execution time \nof GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + + plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_grcuda_cuda_compact_{OUTPUT_DATE}.pdf"), dpi=300) + \ No newline at end of file From a749db3e799b7dd2a83320d22b4fcd08abf05f9f Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 21 Jun 2020 19:28:31 +0200 Subject: [PATCH 101/236] added image cuda benchmarks --- projects/resources/cuda/b7_default.cu | 2 +- projects/resources/cuda/b8_default.cu | 357 ++++++++++++++++++++++++++ projects/resources/cuda/b8_sync.cu | 341 ++++++++++++++++++++++++ 3 files changed, 699 insertions(+), 1 deletion(-) create mode 100644 projects/resources/cuda/b8_default.cu create mode 100644 projects/resources/cuda/b8_sync.cu diff --git a/projects/resources/cuda/b7_default.cu b/projects/resources/cuda/b7_default.cu index 9d6d7e67..7d410393 100644 --- a/projects/resources/cuda/b7_default.cu +++ b/projects/resources/cuda/b7_default.cu @@ -103,7 +103,7 @@ int main(int argc, char *argv[]) { int nnz = degree * N; if (debug) { - std::cout << "running b7 sync" << std::endl; + std::cout << "running b7 default" << std::endl; std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; diff --git a/projects/resources/cuda/b8_default.cu b/projects/resources/cuda/b8_default.cu new file mode 100644 index 00000000..42148ee5 --- /dev/null +++ b/projects/resources/cuda/b8_default.cu @@ -0,0 +1,357 @@ +#include +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void gaussian_blur(const float *image, float *result, int rows, int cols, const float* kernel, int diameter) { + extern __shared__ float kernel_local[]; + for(int i = threadIdx.x; i < diameter; i += blockDim.x) { + for(int j = threadIdx.y; j < diameter; j += blockDim.y) { + kernel_local[i * diameter + j] = kernel[i * diameter + j]; + } + } + __syncthreads(); + + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < rows; i += blockDim.x * gridDim.x) { + for(int j = blockIdx.y * blockDim.y + threadIdx.y; j < cols; j += blockDim.y * gridDim.y) { + float sum = 0; + int radius = diameter / 2; + for (int x = -radius; x <= radius; ++x) { + for (int y = -radius; y <= radius; ++y) { + int nx = x + i; + int ny = y + j; + if (nx >= 0 && ny >= 0 && nx < rows && ny < cols) { + sum += kernel_local[(x + radius) * diameter + (y + radius)] * image[nx * cols + ny]; + } + } + } + result[i * cols + j] = sum; + } + } +} + +extern "C" __global__ void sobel(const float *image, float *result, int rows, int cols) { + // int SOBEL_X[3][3] = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}}; + // int SOBEL_Y[3][3] = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}}; + __shared__ int SOBEL_X[9]; + __shared__ int SOBEL_Y[9]; + if (threadIdx.x == 0 && threadIdx.y == 0) { + SOBEL_X[0] = -1; + SOBEL_X[1] = -2; + SOBEL_X[2] = -1; + SOBEL_X[3] = 0; + SOBEL_X[4] = 0; + SOBEL_X[5] = 0; + SOBEL_X[6] = 1; + SOBEL_X[7] = 2; + SOBEL_X[8] = 1; + + SOBEL_Y[0] = -1; + SOBEL_Y[1] = 0; + SOBEL_Y[2] = 1; + SOBEL_Y[3] = -2; + SOBEL_Y[4] = 0; + SOBEL_Y[5] = 2; + SOBEL_Y[6] = -1; + SOBEL_Y[7] = 0; + SOBEL_Y[8] = 1; + } + __syncthreads(); + + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < rows; i += blockDim.x * gridDim.x) { + for(int j = blockIdx.y * blockDim.y + threadIdx.y; j < cols; j += blockDim.y * gridDim.y) { + float sum_gradient_x = 0.0, sum_gradient_y = 0.0; + int radius = 1; + for (int x = -radius; x <= radius; ++x) { + for (int y = -radius; y <= radius; ++y) { + int nx = x + i; + int ny = y + j; + if (nx >= 0 && ny >= 0 && nx < rows && ny < cols) { + float neighbour = image[nx * cols + ny]; + int s = (x + radius) * 3 + y + radius; + sum_gradient_x += SOBEL_X[s] * neighbour; + sum_gradient_y += SOBEL_Y[s] * neighbour; + } + } + } + result[i * cols + j] = sqrt(sum_gradient_x * sum_gradient_x + sum_gradient_y * sum_gradient_y); + } + } +} + +__device__ float atomicMinf(float* address, float val) +{ + int *address_as_int =(int*)address; + int old = *address_as_int, assumed; + while (val < __int_as_float(old)) { + assumed = old; + old = atomicCAS(address_as_int, assumed, + __float_as_int(val)); + } + return __int_as_float(old); +} + +__device__ float atomicMaxf(float* address, float val) +{ + int *address_as_int = (int*) address; + int old = *address_as_int, assumed; + // If val is smaller than current, don't do anything, else update the current value atomically; + while (val > __int_as_float(old)) { + assumed = old; + old = atomicCAS(address_as_int, assumed, __float_as_int(val)); + } + return __int_as_float(old); +} + +__inline__ __device__ float warp_reduce_max(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val = max(val, __shfl_down_sync(0xFFFFFFFF, val, offset)); + return val; +} + +__inline__ __device__ float warp_reduce_min(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val = min(val, __shfl_down_sync(0xFFFFFFFF, val, offset)); + return val; +} + +extern "C" __global__ void maximum_kernel(const float *in, float* out, int N) { + int warp_size = 32; + float maximum = -1000; + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + maximum = max(maximum, in[i]); + } + maximum = warp_reduce_max(maximum); // Obtain the max of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicMaxf(out, maximum); // The first thread in the warp updates the output; +} + +extern "C" __global__ void minimum_kernel(const float *in, float* out, int N) { + int warp_size = 32; + float minimum = 1000; + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + minimum = min(minimum, in[i]); + } + minimum = warp_reduce_min(minimum); // Obtain the min of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicMinf(out, minimum); // The first thread in the warp updates the output; +} + +extern "C" __global__ void extend(float *x, const float *minimum, const float *maximum, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + float res_tmp = 5 * (x[i] - *minimum) / (*maximum - *minimum); + x[i] = res_tmp > 1 ? 1 : res_tmp; + } +} + +extern "C" __global__ void unsharpen(const float *x, const float *y, float *res, float amount, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + float res_tmp = x[i] * (1 + amount) - y[i] * amount; + res_tmp = res_tmp > 1 ? 1 : res_tmp; + res[i] = res_tmp < 0 ? 0 : res_tmp; + } +} + +extern "C" __global__ void combine(const float *x, const float *y, const float *mask, float *res, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + res[i] = x[i] * mask[i] + y[i] * (1 - mask[i]); + } +} + +///////////////////////////// +///////////////////////////// + +void reset(float *image, float *maximum, float *minimum, int N) { + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + image[i * N + j] = 0; + } + } + *maximum = 0; + *minimum = 0; +} + +void gaussian_kernel(float* kernel, int diameter, float sigma) { + int mean = diameter / 2; + float sum_tmp = 0; + for (int i = 0; i < diameter; i++) { + for (int j = 0; j < diameter; j++) { + kernel[i * diameter + j] = exp(-0.5 * ((i - mean) * (i - mean) + (j - mean) * (j - mean)) / (sigma * sigma)); + sum_tmp += kernel[i * diameter + j]; + } + } + for (int i = 0; i < diameter; i++) { + for (int j = 0; j < diameter; j++) { + kernel[i * diameter + j] /= sum_tmp; + } + } +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int kernel_small_diameter = 3; + int kernel_large_diameter = 5; + int kernel_unsharpen_diameter = 5; + + int block_size_1d = options.block_size_1d; + int block_size_2d = options.block_size_2d; + int num_blocks = 64; + int err = 0; + + if (debug) { + std::cout << "running b8 default" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size_1d << std::endl; + std::cout << "block size 2d=" << block_size_2d << std::endl; + } + + auto start = clock_type::now(); + float *image, *image2, *image3, *image_unsharpen, *mask_small, *mask_large, *mask_unsharpen, *blurred_small, *blurred_large, *blurred_unsharpen; + float *kernel_small, *kernel_large, *kernel_unsharpen, *maximum, *minimum; + err = cudaMallocManaged(&image, sizeof(float) * N * N); + err = cudaMallocManaged(&image2, sizeof(float) * N * N); + err = cudaMallocManaged(&image3, sizeof(float) * N * N); + err = cudaMallocManaged(&image_unsharpen, sizeof(float) * N * N); + err = cudaMallocManaged(&mask_small, sizeof(float) * N * N); + err = cudaMallocManaged(&mask_large, sizeof(float) * N * N); + err = cudaMallocManaged(&mask_unsharpen, sizeof(float) * N * N); + err = cudaMallocManaged(&blurred_small, sizeof(float) * N * N); + err = cudaMallocManaged(&blurred_large, sizeof(float) * N * N); + err = cudaMallocManaged(&blurred_unsharpen, sizeof(float) * N * N); + + err = cudaMallocManaged(&kernel_small, sizeof(float) * N * N); + err = cudaMallocManaged(&kernel_large, sizeof(float) * N * N); + err = cudaMallocManaged(&kernel_unsharpen, sizeof(float) * N * N); + err = cudaMallocManaged(&maximum, sizeof(float)); + err = cudaMallocManaged(&minimum, sizeof(float)); + + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + start = clock_type::now(); + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + image[i * N + j] = (float)(rand()) / (float)(RAND_MAX); + } + } + gaussian_kernel(kernel_small, kernel_small_diameter, 1); + gaussian_kernel(kernel_large, kernel_large_diameter, 10); + gaussian_kernel(kernel_unsharpen, kernel_unsharpen_diameter, 5); + + // Create streams; + cudaStream_t s1, s2, s3, s4, s5; + err = cudaStreamCreate(&s1); + err = cudaStreamCreate(&s2); + err = cudaStreamCreate(&s3); + err = cudaStreamCreate(&s4); + err = cudaStreamCreate(&s5); + if (err) std::cout << err << std::endl; + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(image3, maximum, minimum, N); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + dim3 block_size_2d_dim(block_size_2d, block_size_2d); + dim3 grid_size(num_blocks, num_blocks); + dim3 grid_size_2(num_blocks / 2, num_blocks / 2); + + gaussian_blur<<>>(image, blurred_small, N, N, kernel_small, kernel_small_diameter); + + gaussian_blur<<>>(image, blurred_large, N, N, kernel_large, kernel_large_diameter); + + gaussian_blur<<>>(image, blurred_unsharpen, N, N, kernel_unsharpen, kernel_unsharpen_diameter); + + sobel<<>>(blurred_small, mask_small, N, N); + + sobel<<>>(blurred_large, mask_large, N, N); + + cudaEvent_t e1, e2, e3, e4, e5; + cudaEventCreate(&e1); + cudaEventCreate(&e2); + cudaEventCreate(&e3); + cudaEventCreate(&e4); + cudaEventCreate(&e5); + + cudaEventRecord(e1, s2); + cudaStreamWaitEvent(s5, e1, 0); + maximum_kernel<<>>(mask_large, maximum, N * N); + + cudaStreamWaitEvent(s4, e1, 0); + minimum_kernel<<>>(mask_large, minimum, N * N); + + cudaEventRecord(e2, s4); + cudaEventRecord(e5, s5); + + cudaStreamWaitEvent(s2, e2, 0); + cudaStreamWaitEvent(s2, e5, 0); + + extend<<>>(mask_large, minimum, maximum, N * N); + + unsharpen<<>>(image, blurred_unsharpen, image_unsharpen, 0.5, N * N); + cudaEventRecord(e3, s3); + cudaStreamWaitEvent(s2, e3, 0); + combine<<>>(image_unsharpen, blurred_large, mask_large, image2, N * N); + cudaEventRecord(e4, s2); + cudaStreamWaitEvent(s1, e4, 0); + combine<<>>(image2, blurred_small, mask_small, image3, N * N); + cudaStreamSynchronize(s1); + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < 10; j++) { + std::cout << image3[j] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << 0.0 << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b8_sync.cu b/projects/resources/cuda/b8_sync.cu new file mode 100644 index 00000000..d08900f6 --- /dev/null +++ b/projects/resources/cuda/b8_sync.cu @@ -0,0 +1,341 @@ +#include +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void gaussian_blur(const float *image, float *result, int rows, int cols, const float* kernel, int diameter) { + extern __shared__ float kernel_local[]; + for(int i = threadIdx.x; i < diameter; i += blockDim.x) { + for(int j = threadIdx.y; j < diameter; j += blockDim.y) { + kernel_local[i * diameter + j] = kernel[i * diameter + j]; + } + } + __syncthreads(); + + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < rows; i += blockDim.x * gridDim.x) { + for(int j = blockIdx.y * blockDim.y + threadIdx.y; j < cols; j += blockDim.y * gridDim.y) { + float sum = 0; + int radius = diameter / 2; + for (int x = -radius; x <= radius; ++x) { + for (int y = -radius; y <= radius; ++y) { + int nx = x + i; + int ny = y + j; + if (nx >= 0 && ny >= 0 && nx < rows && ny < cols) { + sum += kernel_local[(x + radius) * diameter + (y + radius)] * image[nx * cols + ny]; + } + } + } + result[i * cols + j] = sum; + } + } +} + +extern "C" __global__ void sobel(const float *image, float *result, int rows, int cols) { + // int SOBEL_X[3][3] = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}}; + // int SOBEL_Y[3][3] = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}}; + __shared__ int SOBEL_X[9]; + __shared__ int SOBEL_Y[9]; + if (threadIdx.x == 0 && threadIdx.y == 0) { + SOBEL_X[0] = -1; + SOBEL_X[1] = -2; + SOBEL_X[2] = -1; + SOBEL_X[3] = 0; + SOBEL_X[4] = 0; + SOBEL_X[5] = 0; + SOBEL_X[6] = 1; + SOBEL_X[7] = 2; + SOBEL_X[8] = 1; + + SOBEL_Y[0] = -1; + SOBEL_Y[1] = 0; + SOBEL_Y[2] = 1; + SOBEL_Y[3] = -2; + SOBEL_Y[4] = 0; + SOBEL_Y[5] = 2; + SOBEL_Y[6] = -1; + SOBEL_Y[7] = 0; + SOBEL_Y[8] = 1; + } + __syncthreads(); + + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < rows; i += blockDim.x * gridDim.x) { + for(int j = blockIdx.y * blockDim.y + threadIdx.y; j < cols; j += blockDim.y * gridDim.y) { + float sum_gradient_x = 0.0, sum_gradient_y = 0.0; + int radius = 1; + for (int x = -radius; x <= radius; ++x) { + for (int y = -radius; y <= radius; ++y) { + int nx = x + i; + int ny = y + j; + if (nx >= 0 && ny >= 0 && nx < rows && ny < cols) { + float neighbour = image[nx * cols + ny]; + int s = (x + radius) * 3 + y + radius; + sum_gradient_x += SOBEL_X[s] * neighbour; + sum_gradient_y += SOBEL_Y[s] * neighbour; + } + } + } + result[i * cols + j] = sqrt(sum_gradient_x * sum_gradient_x + sum_gradient_y * sum_gradient_y); + } + } +} + +__device__ float atomicMinf(float* address, float val) +{ + int *address_as_int =(int*)address; + int old = *address_as_int, assumed; + while (val < __int_as_float(old)) { + assumed = old; + old = atomicCAS(address_as_int, assumed, + __float_as_int(val)); + } + return __int_as_float(old); +} + +__device__ float atomicMaxf(float* address, float val) +{ + int *address_as_int = (int*) address; + int old = *address_as_int, assumed; + // If val is smaller than current, don't do anything, else update the current value atomically; + while (val > __int_as_float(old)) { + assumed = old; + old = atomicCAS(address_as_int, assumed, __float_as_int(val)); + } + return __int_as_float(old); +} + +__inline__ __device__ float warp_reduce_max(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val = max(val, __shfl_down_sync(0xFFFFFFFF, val, offset)); + return val; +} + +__inline__ __device__ float warp_reduce_min(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val = min(val, __shfl_down_sync(0xFFFFFFFF, val, offset)); + return val; +} + +extern "C" __global__ void maximum_kernel(const float *in, float* out, int N) { + int warp_size = 32; + float maximum = -1000; + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + maximum = max(maximum, in[i]); + } + maximum = warp_reduce_max(maximum); // Obtain the max of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicMaxf(out, maximum); // The first thread in the warp updates the output; +} + +extern "C" __global__ void minimum_kernel(const float *in, float* out, int N) { + int warp_size = 32; + float minimum = 1000; + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + minimum = min(minimum, in[i]); + } + minimum = warp_reduce_min(minimum); // Obtain the min of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicMinf(out, minimum); // The first thread in the warp updates the output; +} + +extern "C" __global__ void extend(float *x, const float *minimum, const float *maximum, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + float res_tmp = 5 * (x[i] - *minimum) / (*maximum - *minimum); + x[i] = res_tmp > 1 ? 1 : res_tmp; + } +} + +extern "C" __global__ void unsharpen(const float *x, const float *y, float *res, float amount, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + float res_tmp = x[i] * (1 + amount) - y[i] * amount; + res_tmp = res_tmp > 1 ? 1 : res_tmp; + res[i] = res_tmp < 0 ? 0 : res_tmp; + } +} + +extern "C" __global__ void combine(const float *x, const float *y, const float *mask, float *res, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + res[i] = x[i] * mask[i] + y[i] * (1 - mask[i]); + } +} + +///////////////////////////// +///////////////////////////// + +void reset(float *image, float *maximum, float *minimum, int N) { + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + image[i * N + j] = 0; + } + } + *maximum = 0; + *minimum = 0; +} + +void gaussian_kernel(float* kernel, int diameter, float sigma) { + int mean = diameter / 2; + float sum_tmp = 0; + for (int i = 0; i < diameter; i++) { + for (int j = 0; j < diameter; j++) { + kernel[i * diameter + j] = exp(-0.5 * ((i - mean) * (i - mean) + (j - mean) * (j - mean)) / (sigma * sigma)); + sum_tmp += kernel[i * diameter + j]; + } + } + for (int i = 0; i < diameter; i++) { + for (int j = 0; j < diameter; j++) { + kernel[i * diameter + j] /= sum_tmp; + } + } +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int kernel_small_diameter = 3; + int kernel_large_diameter = 5; + int kernel_unsharpen_diameter = 5; + + int block_size_1d = options.block_size_1d; + int block_size_2d = options.block_size_2d; + int num_blocks = 64; + int err = 0; + + if (debug) { + std::cout << "running b8 sync" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size_1d << std::endl; + std::cout << "block size 2d=" << block_size_2d << std::endl; + } + + auto start = clock_type::now(); + float *image, *image2, *image3, *image_unsharpen, *mask_small, *mask_large, *mask_unsharpen, *blurred_small, *blurred_large, *blurred_unsharpen; + float *kernel_small, *kernel_large, *kernel_unsharpen, *maximum, *minimum; + err = cudaMallocManaged(&image, sizeof(float) * N * N); + err = cudaMallocManaged(&image2, sizeof(float) * N * N); + err = cudaMallocManaged(&image3, sizeof(float) * N * N); + err = cudaMallocManaged(&image_unsharpen, sizeof(float) * N * N); + err = cudaMallocManaged(&mask_small, sizeof(float) * N * N); + err = cudaMallocManaged(&mask_large, sizeof(float) * N * N); + err = cudaMallocManaged(&mask_unsharpen, sizeof(float) * N * N); + err = cudaMallocManaged(&blurred_small, sizeof(float) * N * N); + err = cudaMallocManaged(&blurred_large, sizeof(float) * N * N); + err = cudaMallocManaged(&blurred_unsharpen, sizeof(float) * N * N); + + err = cudaMallocManaged(&kernel_small, sizeof(float) * N * N); + err = cudaMallocManaged(&kernel_large, sizeof(float) * N * N); + err = cudaMallocManaged(&kernel_unsharpen, sizeof(float) * N * N); + err = cudaMallocManaged(&maximum, sizeof(float)); + err = cudaMallocManaged(&minimum, sizeof(float)); + + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + start = clock_type::now(); + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + image[i * N + j] = (float)(rand()) / (float)(RAND_MAX); + } + } + gaussian_kernel(kernel_small, kernel_small_diameter, 1); + gaussian_kernel(kernel_large, kernel_large_diameter, 10); + gaussian_kernel(kernel_unsharpen, kernel_unsharpen_diameter, 5); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(image3, maximum, minimum, N); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + dim3 block_size_2d_dim(block_size_2d, block_size_2d); + dim3 grid_size(num_blocks, num_blocks); + dim3 grid_size_2(num_blocks / 2, num_blocks / 2); + + gaussian_blur<<>>(image, blurred_small, N, N, kernel_small, kernel_small_diameter); + cudaDeviceSynchronize(); + + gaussian_blur<<>>(image, blurred_large, N, N, kernel_large, kernel_large_diameter); + cudaDeviceSynchronize(); + + gaussian_blur<<>>(image, blurred_unsharpen, N, N, kernel_unsharpen, kernel_unsharpen_diameter); + cudaDeviceSynchronize(); + + sobel<<>>(blurred_small, mask_small, N, N); + cudaDeviceSynchronize(); + + sobel<<>>(blurred_large, mask_large, N, N); + cudaDeviceSynchronize(); + + maximum_kernel<<>>(mask_large, maximum, N * N); + cudaDeviceSynchronize(); + + minimum_kernel<<>>(mask_large, minimum, N * N); + cudaDeviceSynchronize(); + + extend<<>>(mask_large, minimum, maximum, N * N); + cudaDeviceSynchronize(); + + unsharpen<<>>(image, blurred_unsharpen, image_unsharpen, 0.5, N * N); + cudaDeviceSynchronize(); + + combine<<>>(image_unsharpen, blurred_large, mask_large, image2, N * N); + cudaDeviceSynchronize(); + + combine<<>>(image2, blurred_small, mask_small, image3, N * N); + cudaDeviceSynchronize(); + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < 10; j++) { + std::cout << image3[j] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << 0.0 << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} From e15a60c466f73842bb958b1872c2bca2fda2ef54 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 21 Jun 2020 20:12:48 +0200 Subject: [PATCH 102/236] added new plots --- .../python/plotting/plot_speedup_grcuda_cuda.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 64d35999..5c8a0a79 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -25,7 +25,7 @@ INPUT_DATE_GRCUDA = "2020_06_20_20_26_03" -INPUT_DATE_CUDA = "2020_06_21_17_02_20_cuda" +INPUT_DATE_CUDA = "2020_06_21_19_28_58_cuda" OUTPUT_DATE = "2020_06_20" PLOT_DIR = "../../../../data/plots" @@ -66,7 +66,7 @@ def build_exec_time_plot_grcuda_cuda(data, gridspec, x, y): ax.add_collection(pc) # Set the same y limits in each plot; - ax.set_ylim((0, 3)) + ax.set_ylim((0, 4)) # Add a horizontal line to denote speedup = 1x; ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) @@ -76,7 +76,7 @@ def build_exec_time_plot_grcuda_cuda(data, gridspec, x, y): ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=45, ha="right", fontsize=9, rotation_mode="anchor") ax.tick_params(labelcolor="black") # Set the y ticks; - ax.yaxis.set_major_locator(plt.LinearLocator(4)) + ax.yaxis.set_major_locator(plt.LinearLocator(5)) if y == 0: ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) else: @@ -142,7 +142,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): labels_str = [str(x) for x in labels] # Set the same y limits in each plot; - ax.set_ylim((0, 3)) + ax.set_ylim((0, 4)) # Add a horizontal line to denote speedup = 1x; ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) @@ -152,7 +152,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) ax.tick_params(labelcolor="black") # Set the y ticks; - ax.yaxis.set_major_locator(plt.LinearLocator(4)) + ax.yaxis.set_major_locator(plt.LinearLocator(5)) if y == 0: ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) else: @@ -197,7 +197,6 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): data_grcuda = load_data(INPUT_DATE_GRCUDA, skip_iter=3) data_cuda = load_data_cuda(INPUT_DATE_CUDA, skip_iter=3) data = join_tables(data_grcuda, data_cuda) - data = data[data["benchmark"].isin(["b1", "b6"])] sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) plt.rcParams["font.family"] = ["Latin Modern Roman"] @@ -207,7 +206,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): plt.rcParams['axes.labelsize'] = 14 # Lists of benchmarks and block sizes; - benchmark_list = sorted(data["benchmark"].unique()) * 2 + benchmark_list = sorted(data["benchmark"].unique()) block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) num_col = len(benchmark_list) num_row = len(block_size_list) @@ -243,7 +242,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): plt.rcParams['axes.labelsize'] = 14 # Lists of benchmarks and block sizes; - benchmark_list = sorted(data["benchmark"].unique()) * 2 + benchmark_list = sorted(data["benchmark"].unique()) policy_list = sorted(data["exec_policy"].unique()) num_col = len(benchmark_list) num_row = len(policy_list) From 48afa1be6e544ae26acf7bdbedaf2470dc36261c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 22 Jun 2020 18:05:05 +0200 Subject: [PATCH 103/236] added new benchmark results --- projects/resources/cuda/b7_default.cu | 1 + projects/resources/cuda/b8_default.cu | 4 +- .../python/benchmark/benchmark_wrapper.py | 4 +- .../resources/python/plotting/load_data.py | 3 +- .../python/plotting/plot_speedup_baseline.py | 16 +++---- .../plotting/plot_speedup_grcuda_cuda.py | 48 +++++++++++++++---- .../resources/python/plotting/plot_utils.py | 19 ++++++++ 7 files changed, 74 insertions(+), 21 deletions(-) diff --git a/projects/resources/cuda/b7_default.cu b/projects/resources/cuda/b7_default.cu index 7d410393..034f6ae8 100644 --- a/projects/resources/cuda/b7_default.cu +++ b/projects/resources/cuda/b7_default.cu @@ -173,6 +173,7 @@ int main(int argc, char *argv[]) { err = cudaEventRecord(e1, s1); spmv<<>>(ptr, idx, val, auth1, hub2, N, nnz); err = cudaEventRecord(e2, s2); + sum<<>>(auth2, auth_norm, N); sum<<>>(hub2, hub_norm, N); diff --git a/projects/resources/cuda/b8_default.cu b/projects/resources/cuda/b8_default.cu index 42148ee5..f4a0775f 100644 --- a/projects/resources/cuda/b8_default.cu +++ b/projects/resources/cuda/b8_default.cu @@ -289,12 +289,12 @@ int main(int argc, char *argv[]) { auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; - start = clock_type::now(); - dim3 block_size_2d_dim(block_size_2d, block_size_2d); dim3 grid_size(num_blocks, num_blocks); dim3 grid_size_2(num_blocks / 2, num_blocks / 2); + start = clock_type::now(); + gaussian_blur<<>>(image, blurred_small, N, N, kernel_small, kernel_small_diameter); gaussian_blur<<>>(image, blurred_large, N, N, kernel_large, kernel_large_diameter); diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index e538dd46..7698a091 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -32,8 +32,8 @@ dependency_policies = ["with-const"] -block_sizes_1d = [32, 256, 1024] -block_sizes_2d = [8, 16, 32] +block_sizes_1d = [32, 128, 256, 1024] +block_sizes_2d = [8, 8, 16, 32] ############################## ############################## diff --git a/projects/resources/python/plotting/load_data.py b/projects/resources/python/plotting/load_data.py index 7209c17c..e57d24c9 100755 --- a/projects/resources/python/plotting/load_data.py +++ b/projects/resources/python/plotting/load_data.py @@ -139,7 +139,7 @@ def compute_speedup(data, key, speedup_col_name="computation_speedup", time_colu def join_tables(t1, t2, key=["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", - "total_iterations", "size", "num_iter"], keep_common_columns=True): + "size", "num_iter"], keep_common_columns=True): t1_tmp = t1.copy() t2_tmp = t2.copy() t1_tmp = t1_tmp.set_index(key) @@ -148,6 +148,7 @@ def join_tables(t1, t2, key=["benchmark", "exec_policy", "block_size_1d", "block common_columns = [x for x in t1_tmp.columns if x in t2_tmp.columns] t1_tmp = t1_tmp[common_columns] t2_tmp = t2_tmp[common_columns] + merged = t1_tmp.merge(t2_tmp, suffixes=("_grcuda", "_cuda"), left_index=True, right_index=True, sort=True).reset_index() merged["grcuda_cuda_speedup"] = merged["computation_sec_cuda"] / merged["computation_sec_grcuda"] return merged diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 4433befc..d3eafcd7 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,8 +21,8 @@ from plot_utils import COLORS, get_exp_label, get_ci_size -INPUT_DATE = "2020_06_20_20_26_03" -OUTPUT_DATE = "2020_06_20" +INPUT_DATE = "2020_06_22_10_13_05_grcuda" +OUTPUT_DATE = "2020_06_22" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} @@ -99,8 +99,8 @@ def build_exec_time_plot_1_row(data, gridspec, y): data["size_str"] = data["size"].astype(str) - palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"]] - markers = ["o", "X", "D"] + palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"], COLORS["b4"]] + markers = ["o", "X", "D", "P"] # Add a lineplot with the exec times; ax = fig.add_subplot(gridspec[0, y]) @@ -152,7 +152,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): for i in range(len(legend_labels))] leg = fig.legend(custom_lines, legend_labels, - bbox_to_anchor=(0.95, 1), fontsize=12, ncol=len(legend_labels), handletextpad=0.1) + bbox_to_anchor=(0.95, 1), fontsize=12, ncol=len(legend_labels) // 2, handletextpad=0.1) leg.set_title("Block size:") leg._legend_box.align = "left" @@ -212,9 +212,9 @@ def build_exec_time_plot_1_row(data, gridspec, y): benchmark_list = sorted(data["benchmark"].unique()) num_col = len(benchmark_list) num_row = 1 - fig = plt.figure(figsize=(2.7 * num_col, 4 * num_row)) + fig = plt.figure(figsize=(2.7 * num_col, 4.2 * num_row)) gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.67, + plt.subplots_adjust(top=0.65, bottom=0.18, left=0.12, right=0.95, @@ -228,7 +228,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") plt.annotate("Speedup over\nserial scheduling", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Execution time speedup\nover serial kernel scheduling", fontsize=20, x=.05, y=0.99, ha="left") + plt.suptitle("Execution time speedup\nover serial kernel scheduling", fontsize=20, x=.05, y=0.98, ha="left") plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_1_row_{OUTPUT_DATE}.pdf"), dpi=300) diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 5c8a0a79..51b1c36f 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -24,9 +24,9 @@ ############################## -INPUT_DATE_GRCUDA = "2020_06_20_20_26_03" -INPUT_DATE_CUDA = "2020_06_21_19_28_58_cuda" -OUTPUT_DATE = "2020_06_20" +INPUT_DATE_GRCUDA = "2020_06_22_10_13_05_grcuda" +INPUT_DATE_CUDA = "2020_06_22_14_37_09_cuda" +OUTPUT_DATE = "2020_06_22" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} @@ -126,8 +126,8 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): legend_labels = ["DAG Scheduling", "Serial Scheduling"] - palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"]] - markers = ["o", "X", "D"] + palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"], COLORS["b4"]][:len(data["block_size_str"].unique())] + markers = ["o", "X", "D", "P"][:len(data["block_size_str"].unique())] # Add a lineplot with the exec times; ax = fig.add_subplot(gridspec[x, y]) @@ -183,7 +183,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): for i in range(len(legend_labels))] leg = fig.legend(custom_lines, legend_labels, - bbox_to_anchor=(0.95, 1), fontsize=12, ncol=len(legend_labels), handletextpad=0.1) + bbox_to_anchor=(0.95, 1), fontsize=12, ncol=len(legend_labels) // 2, handletextpad=0.1) leg.set_title("Block size:") leg._legend_box.align = "left" @@ -246,9 +246,9 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): policy_list = sorted(data["exec_policy"].unique()) num_col = len(benchmark_list) num_row = len(policy_list) - fig = plt.figure(figsize=(2.7 * num_col, 3.8 * num_row)) + fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.8, + plt.subplots_adjust(top=0.75, bottom=0.1, left=0.12, right=0.95, @@ -266,4 +266,36 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): plt.suptitle("Relative execution time \nof GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_grcuda_cuda_compact_{OUTPUT_DATE}.pdf"), dpi=300) + + #%% + # from plot_utils import remove_outliers_df + # data_grcuda = load_data(INPUT_DATE_GRCUDA, skip_iter=3) + # data_cuda = load_data_cuda(INPUT_DATE_CUDA, skip_iter=3) + # dg = remove_outliers_df(data_grcuda, "computation_sec") + + # df_list = [] + # for k, v in data_grcuda.groupby(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"], as_index=False): + # tmp = remove_outliers_df(v, "computation_sec", reset_index=False) + # df_list += [tmp.set_index(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"])["computation_sec"]] + + # a = pd.concat(df_list).to_frame() + + # df_list = [] + # for k, v in data_cuda.groupby(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"], as_index=False): + # tmp = remove_outliers_df(v, "computation_sec", reset_index=False) + # df_list += [tmp.set_index(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"])["computation_sec"]] + + # b = pd.concat(df_list).to_frame() + + # a = a.groupby(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"], as_index=True).apply(np.median).to_frame() + # b = b.groupby(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"], as_index=True).apply(np.median).to_frame() + + # c = a.merge(b, suffixes=("_grcuda", "_cuda"), left_index=True, right_index=True, sort=True).reset_index() + # c["grcuda_cuda_speedup"] = c["0_cuda"] / c["0_grcuda"] + + + + + + \ No newline at end of file diff --git a/projects/resources/python/plotting/plot_utils.py b/projects/resources/python/plotting/plot_utils.py index b0ce785a..51bf27e6 100755 --- a/projects/resources/python/plotting/plot_utils.py +++ b/projects/resources/python/plotting/plot_utils.py @@ -111,6 +111,25 @@ def remove_outliers(data, sigmas: int=3): return data[st.zscore(data) < sigmas] +def remove_outliers_df(data: pd.DataFrame, column: str, reset_index: bool = True, drop_index: bool = True, sigmas: int = 3) -> pd.DataFrame: + """ + :param data: a pd.DataFrame + :param column: name of the column where data are filtered + :param reset_index: if True, reset the index after filtering + :param drop_index: if True, drop the index column after reset + :param sigmas: number of standard deviations outside which a value is consider to be an outlier + :return: data without outliers + + Filter a sequence of data by keeping only values within "sigma" standard deviations from the mean. + This is a simple way to filter outliers, it is more useful for visualizations than for sound statistical analyses; + """ + col = data[column] + res = data.loc[remove_outliers(col, sigmas).index] + if reset_index: + res = res.reset_index(drop=drop_index) + return res + + def compute_speedup(X: pd.DataFrame, col_slow: str, col_fast: str, col_speedup: str) -> None: """ Add a column to a dataframe that represents a speedup, From 364e0160117a62010c1a2e3bd82c9b48e9177c9a Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 23 Jun 2020 09:40:05 +0200 Subject: [PATCH 104/236] added png plots --- projects/resources/python/plotting/plot_speedup_baseline.py | 4 ++-- .../resources/python/plotting/plot_speedup_grcuda_cuda.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index d3eafcd7..3d481741 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -196,7 +196,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): plt.annotate("Speedup over serial scheduling", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") plt.suptitle("Execution time speedup\nover serial kernel scheduling", fontsize=25, x=.05, y=0.99, ha="left") - plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_{OUTPUT_DATE}.pdf"), dpi=300) + plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_{OUTPUT_DATE}.png"), dpi=300) #%% Similar plot, but all block sizes are on 1 row; @@ -230,7 +230,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): plt.annotate("Speedup over\nserial scheduling", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") plt.suptitle("Execution time speedup\nover serial kernel scheduling", fontsize=20, x=.05, y=0.98, ha="left") - plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_1_row_{OUTPUT_DATE}.pdf"), dpi=300) + plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_1_row_{OUTPUT_DATE}.png"), dpi=300) diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 51b1c36f..dd1f82d2 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -229,7 +229,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): plt.annotate("Relative execution time", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") plt.suptitle("Relative execution time \nof GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") - plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_grcuda_cuda_{OUTPUT_DATE}.pdf"), dpi=300) + plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_grcuda_cuda_{OUTPUT_DATE}.png"), dpi=300) #%% Similar plot, but all block sizes are on 1 row; @@ -265,7 +265,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): plt.annotate("Relative execution time", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") plt.suptitle("Relative execution time \nof GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") - plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_grcuda_cuda_compact_{OUTPUT_DATE}.pdf"), dpi=300) + plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_grcuda_cuda_compact_{OUTPUT_DATE}.png"), dpi=300) #%% # from plot_utils import remove_outliers_df From 22d447309ab74b28f2a3e1ec97928a2c5de1234f Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 23 Jun 2020 09:44:25 +0200 Subject: [PATCH 105/236] added images to results --- RESULTS.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/RESULTS.md b/RESULTS.md index 5e01a073..e7fdb192 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -135,3 +135,12 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── | | 4000 | 0.179 | 0.169 | 1.05x | +## Plots + +![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_1_row_2020_06_22.png) + +![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_2020_06_22.png) + +![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_grcuda_cuda_compact_2020_06_22.png) + +![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_grcuda_cuda_2020_06_22.png) From 93de41a0ab30b30cf871e8d48f7c69b3c2003409 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 23 Jun 2020 10:18:30 +0200 Subject: [PATCH 106/236] Update RESULTS.md --- RESULTS.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/RESULTS.md b/RESULTS.md index e7fdb192..1a108ddf 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -139,8 +139,22 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── ![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_1_row_2020_06_22.png) +In general, **DAG scheduling allows better GPU resource usage**: when the data-set size does not fill the GPU computational resources, DAG scheduling provides speedups close to the theoretical optimum. As expected, the speedup is less significant as the data-set size increases, as each kernel can fully use the GPU resources by itself. + +**Even for large data-sets** (enough to saturate the GPU memory), **the DAG scheduling speedup stays above 1**: even if kernels fill the GPU resources, it is still possible to achieve a small degree of parallelism by overlapping data transfer with execution of different kernels, or possibly by overlapping execution of kernels with different bottlenecks. + +**DAG scheduling is never worse than serial scheduling**, meaning that users do not have to think about which scheduling policy would be better for them, but can always leverage DAG scheduling. + +As rule of thumb, **smaller blocks provide better speedup**: this is likely connected to the GPU architecture being better at parallelizing smaller blocks. In general, small blocks almost always provide better absolute performance, for similar reasons. Kernels in the benchmarks leverage grid-striding, meaning that the number of blocks is independent from the size of data to be processed and each thread becomes more computationally intensive as the data-size increases (instead of being constant). Currently, kernels do not use shared memory whose size depends on block size; if that was the case, bigger blocks might have an advantage. + ![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_2020_06_22.png) +Performance of serial and DAG GrCUDA scheduling has been compared to the same benchmarks implemented directly in C++ and CUDA. The experimental setup and the kernels are exactly the same. In the case of CUDA asynchronous kernel execution, dependendencies and synchronization points have been computed by hand, instead of automatically. This provides a **comparison of how the overhead introduced by GrCUDA impacts the total execution time** compared to lower-level kernel scheduling. + +In the case of serial execution, CUDA is sligthly faster than GrCUDA, as expected; however, the performance difference is negligible and converges to 0 as the data-set size increases. It can be safely stated that in any realistic computation using serial GrCUDA scheduling will not decrease performance. + +As for asynchronous DAG scheduling, we see how GrCUDA is actually **faster** than CUDA in most cases. It is not clear how GrCUDA is actually faster than CUDA. The only difference is that GrCUDA uses `nvrtc` (Nvidia runtime compilation library), instead of `nvcc`. Whether this provides faster kernel launches, or generates faster code, is yet to be checked. It is likely that `nvrtc` uses the same routines as `nvcc` for compilation, although kernel launches might be faster. + ![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_grcuda_cuda_compact_2020_06_22.png) ![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_grcuda_cuda_2020_06_22.png) From fc87ca919817b19e6ef85e6d8bb18568e4a5f504 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 23 Jun 2020 11:46:19 +0200 Subject: [PATCH 107/236] updated plots --- RESULTS.md | 8 ++++---- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 2 +- .../python/plotting/plot_speedup_baseline.py | 13 ++++++------ .../plotting/plot_speedup_grcuda_cuda.py | 11 +++++++--- .../resources/python/plotting/plot_utils.py | 20 ++++++++++++++++++- 5 files changed, 39 insertions(+), 15 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index 1a108ddf..5972f27f 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -137,7 +137,7 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── ## Plots -![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_1_row_2020_06_22.png) +![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_06_22/speedup_baseline_1_row_2020_06_22.png) In general, **DAG scheduling allows better GPU resource usage**: when the data-set size does not fill the GPU computational resources, DAG scheduling provides speedups close to the theoretical optimum. As expected, the speedup is less significant as the data-set size increases, as each kernel can fully use the GPU resources by itself. @@ -147,7 +147,7 @@ In general, **DAG scheduling allows better GPU resource usage**: when the data-s As rule of thumb, **smaller blocks provide better speedup**: this is likely connected to the GPU architecture being better at parallelizing smaller blocks. In general, small blocks almost always provide better absolute performance, for similar reasons. Kernels in the benchmarks leverage grid-striding, meaning that the number of blocks is independent from the size of data to be processed and each thread becomes more computationally intensive as the data-size increases (instead of being constant). Currently, kernels do not use shared memory whose size depends on block size; if that was the case, bigger blocks might have an advantage. -![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_2020_06_22.png) +![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_06_22/speedup_baseline_2020_06_22.png) Performance of serial and DAG GrCUDA scheduling has been compared to the same benchmarks implemented directly in C++ and CUDA. The experimental setup and the kernels are exactly the same. In the case of CUDA asynchronous kernel execution, dependendencies and synchronization points have been computed by hand, instead of automatically. This provides a **comparison of how the overhead introduced by GrCUDA impacts the total execution time** compared to lower-level kernel scheduling. @@ -155,6 +155,6 @@ In the case of serial execution, CUDA is sligthly faster than GrCUDA, as expecte As for asynchronous DAG scheduling, we see how GrCUDA is actually **faster** than CUDA in most cases. It is not clear how GrCUDA is actually faster than CUDA. The only difference is that GrCUDA uses `nvrtc` (Nvidia runtime compilation library), instead of `nvcc`. Whether this provides faster kernel launches, or generates faster code, is yet to be checked. It is likely that `nvrtc` uses the same routines as `nvcc` for compilation, although kernel launches might be faster. -![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_grcuda_cuda_compact_2020_06_22.png) +![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_06_22/speedup_baseline_grcuda_cuda_compact_2020_06_22.png) -![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/speedup_baseline_grcuda_cuda_2020_06_22.png) +![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_06_22/speedup_baseline_grcuda_cuda_2020_06_22.png) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 4cf2ae23..18cce802 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -919,7 +919,7 @@ public Kernel loadKernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, @TruffleBoundary public Kernel buildKernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, String code, String kernelName, String signature) { String moduleName = "truffle" + context.getNextModuleId(); - PTXKernel ptx = nvrtc.compileKernel(code, kernelName, moduleName, "--std=c++14"); + PTXKernel ptx = nvrtc.compileKernel(code, kernelName, moduleName, "--std=c++11"); CUModule module = null; try { module = cuModuleLoadData(ptx.getPtxSource(), moduleName); diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 3d481741..88076e5a 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -18,7 +18,7 @@ import os from load_data import load_data -from plot_utils import COLORS, get_exp_label, get_ci_size +from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot INPUT_DATE = "2020_06_22_10_13_05_grcuda" @@ -33,6 +33,8 @@ def build_exec_time_plot(data, gridspec, x, y): # Add a lineplot with the exec times; ax = fig.add_subplot(gridspec[x, y]) + ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) + ax = sns.lineplot(x="size_str", y="computation_speedup", data=data, color=COLORS["bb1"], ax=ax, estimator=gmean, err_style="bars", linewidth=2, legend=False, sort=False, ci=None, zorder=2) @@ -104,6 +106,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): # Add a lineplot with the exec times; ax = fig.add_subplot(gridspec[0, y]) + ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) ax = sns.lineplot(x="size_str", y="computation_speedup", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, err_style="bars", linewidth=2, legend=None, sort=False, ci=None, zorder=2) data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["computation_speedup"].apply(gmean).reset_index() @@ -196,7 +199,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): plt.annotate("Speedup over serial scheduling", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") plt.suptitle("Execution time speedup\nover serial kernel scheduling", fontsize=25, x=.05, y=0.99, ha="left") - plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_{OUTPUT_DATE}.png"), dpi=300) + save_plot(PLOT_DIR, "speedup_baseline_{}.{}", OUTPUT_DATE) #%% Similar plot, but all block sizes are on 1 row; @@ -229,9 +232,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") plt.annotate("Speedup over\nserial scheduling", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") plt.suptitle("Execution time speedup\nover serial kernel scheduling", fontsize=20, x=.05, y=0.98, ha="left") - - plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_1_row_{OUTPUT_DATE}.png"), dpi=300) - - + + save_plot(PLOT_DIR, "speedup_baseline_1_row_{}.{}", OUTPUT_DATE) \ No newline at end of file diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index dd1f82d2..1fd65b9f 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -18,7 +18,7 @@ import os from load_data import load_data, load_data_cuda, join_tables -from plot_utils import COLORS, get_exp_label, get_ci_size +from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot ############################## ############################## @@ -43,6 +43,8 @@ def build_exec_time_plot_grcuda_cuda(data, gridspec, x, y): # Add a lineplot with the exec times; ax = fig.add_subplot(gridspec[x, y]) + ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) + ax = sns.lineplot(x="size_str", y="grcuda_cuda_speedup", hue="exec_policy", data=data, palette=palette, ax=ax, estimator=gmean, err_style="bars", linewidth=2, legend=None, ci=None, sort=False, zorder=2) @@ -131,6 +133,8 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): # Add a lineplot with the exec times; ax = fig.add_subplot(gridspec[x, y]) + ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) + ax = sns.lineplot(x="size_str", y="grcuda_cuda_speedup", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, err_style="bars", linewidth=2, legend=None, sort=False, ci=None, zorder=2) data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["grcuda_cuda_speedup"].apply(gmean).reset_index() @@ -229,7 +233,8 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): plt.annotate("Relative execution time", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") plt.suptitle("Relative execution time \nof GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") - plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_grcuda_cuda_{OUTPUT_DATE}.png"), dpi=300) + save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_{}.{}", OUTPUT_DATE) + #%% Similar plot, but all block sizes are on 1 row; @@ -265,7 +270,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): plt.annotate("Relative execution time", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") plt.suptitle("Relative execution time \nof GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") - plt.savefig(os.path.join(PLOT_DIR, f"speedup_baseline_grcuda_cuda_compact_{OUTPUT_DATE}.png"), dpi=300) + save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_compact_{}.{}", OUTPUT_DATE) #%% # from plot_utils import remove_outliers_df diff --git a/projects/resources/python/plotting/plot_utils.py b/projects/resources/python/plotting/plot_utils.py index 51bf27e6..cbdf14a9 100755 --- a/projects/resources/python/plotting/plot_utils.py +++ b/projects/resources/python/plotting/plot_utils.py @@ -9,6 +9,7 @@ import pandas as pd import matplotlib.pyplot as plt import numpy as np +import os ############################## # Colors ##################### @@ -202,4 +203,21 @@ def update_width(ax: plt.Axes, width: float=1): # Change the bar width patch.set_width(width) # Recenter the bar - patch.set_x(patch.get_x() + 0.5 * diff) \ No newline at end of file + patch.set_x(patch.get_x() + 0.5 * diff) + + +def save_plot(directory: str, filename: str, date: str, create_date_dir: bool = True, extension: list = ["pdf", "png"]): + """ + :param directory: where the plot is stored + :param filename: should be of format 'myplot_{}.{}', where the first placeholder is used for the date and the second for the extension + :param date: date that should appear in the plot filename + :param create_date_dir: if True, create a sub-folder with the date + :param extension: list of extension used to store the plot + """ + + output_folder = os.path.join(directory, date) if create_date_dir else directory + if not os.path.exists(output_folder): + os.mkdir(output_folder) + + for e in extension: + plt.savefig(os.path.join(output_folder, filename.format(date, e)), dpi=300) \ No newline at end of file From e9870d6bc1bed5222c1381706e2aa541b454e4d6 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 23 Jun 2020 21:05:14 +0200 Subject: [PATCH 108/236] updated plots, adding ridgeplot --- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 2 +- .../plotting/plot_speedup_grcuda_cuda.py | 138 +++++++++++++----- .../resources/python/plotting/plot_utils.py | 7 +- 3 files changed, 106 insertions(+), 41 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 18cce802..4cf2ae23 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -919,7 +919,7 @@ public Kernel loadKernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, @TruffleBoundary public Kernel buildKernel(AbstractGrCUDAExecutionContext grCUDAExecutionContext, String code, String kernelName, String signature) { String moduleName = "truffle" + context.getNextModuleId(); - PTXKernel ptx = nvrtc.compileKernel(code, kernelName, moduleName, "--std=c++11"); + PTXKernel ptx = nvrtc.compileKernel(code, kernelName, moduleName, "--std=c++14"); CUModule module = null; try { module = cuModuleLoadData(ptx.getPtxSource(), moduleName); diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 1fd65b9f..e6d07879 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -19,6 +19,8 @@ import os from load_data import load_data, load_data_cuda, join_tables from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot +import matplotlib.ticker as ticker + ############################## ############################## @@ -194,6 +196,97 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): return ax +def ridgeplot(data): + # Plotting setup; + sns.set(font_scale=1.4) + sns.set_style("whitegrid") + plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams['axes.titlepad'] = 20 + plt.rcParams['axes.labelpad'] = 10 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + + sns.set(style="white", rc={"axes.facecolor": (0, 0, 0, 0)}) + plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] + + # Plot only some data, for now; + data = data[(data["benchmark"] == "b8") & (data["exec_policy"] == "default")].copy() + + # Normalize execution times so that the CUDA baseline has median 1; + data["normalized_time_cuda"] = 1 + data["normalized_time_grcuda"] = 1 + + block_sizes = data["block_size_str"].unique() + sizes = data["size"].unique() + + grouped_data = data.groupby(["block_size_str", "size"], as_index=False) + for group_key, group in grouped_data: + # Compute the median baseline computation time; + median_baseline = np.median(group["computation_sec_cuda"]) + # Compute the speedup for this group; + data.loc[group.index, "normalized_time_cuda"] = group["computation_sec_cuda"].values / median_baseline + data.loc[group.index, "normalized_time_grcuda"] = group["computation_sec_grcuda"].values / median_baseline + + # Initialize the plot; + g = sns.FacetGrid(data, row="size", aspect=5, height=1, sharey=False, col="block_size_str") + + # Plot a vertical line corresponding to speedup = 1; + g.map(plt.axvline, x=1, lw=0.75, clip_on=True, zorder=0, linestyle="--", ymax=0.5) + # Plot the densities. Plot them twice as the second time we plot just the white contour; + + g.map(sns.kdeplot, "normalized_time_cuda", clip_on=False, shade=True, alpha=0.6, lw=1, color=COLORS["peach1"], zorder=2) + g.map(sns.kdeplot, "normalized_time_grcuda", clip_on=False, shade=True, alpha=0.6, lw=1, color=COLORS["b8"], zorder=2) + g.map(sns.kdeplot, "normalized_time_cuda", clip_on=False, color="w", lw=1.1, zorder=2) + g.map(sns.kdeplot, "normalized_time_grcuda", clip_on=False, color="w", lw=1.1, zorder=2) + # Plot the horizontal line below the densities; + g.map(plt.axhline, y=0, lw=0.75, clip_on=False, zorder=5, color="0.6") + + # Fix the horizontal axes so that they are between 0.5 and 1.25; + def set_x_width(label="", color="#2f2f2f"): + ax = plt.gca() + ax.set_xlim(left=0, right=2) + g.map(set_x_width) + + # Titles and labels; + g.set_titles("") + g.set(xlabel=None) + + # Add block size labels; + for i, ax in enumerate(g.axes[-1]): + ax.annotate("1D={}, 2D={}".format(*block_sizes[i].split(",")), xy=(0.5, -0.8), xycoords="axes fraction", ha="center", color="#2f2f2f", fontsize=14) + for i, ax in enumerate(g.axes[:, 0]): + ax.annotate(f"{get_exp_label(sizes[i])}", xy=(-0.1, 0.05), xycoords="axes fraction", ha="center", color="#2f2f2f", fontsize=14) + + # Fix the borders. This must be done here as the previous operations update the default values; + g.fig.subplots_adjust(top=0.83, + bottom=0.15, + right=0.95, + left=0.05, + hspace=-0.20, + wspace=0.1) + + # Write the x-axis tick labels using percentages; + @ticker.FuncFormatter + def major_formatter(x, pos): + return f"{x:.1f}x" + g.fig.get_axes()[-1].xaxis.set_major_formatter(major_formatter) + g.set(yticks=[]) + g.despine(bottom=True, left=True) + + # Add custom legend; + custom_lines = [Patch(facecolor=COLORS["peach1"], edgecolor="#2f2f2f", label="CUDA"), + Patch(facecolor=COLORS["b8"], edgecolor="#2f2f2f", label="GrCUDA"), + ] + leg = g.fig.legend(custom_lines, ["CUDA", "GrCUDA"], bbox_to_anchor=(0.97, 0.98), fontsize=15) + leg.set_title(None) + leg._legend_box.align = "left" + leg.get_frame().set_facecolor('white') + + # Main plot title; + g.fig.suptitle("Relative Exec. Time Distribution,\nCUDA vs GrCUDA", ha="left", x=0.05, y=0.95, fontsize=18) + + return g + ############################## ############################## @@ -230,17 +323,16 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): exec_time_axes += [build_exec_time_plot_grcuda_cuda(curr_res, gs, block_size_i, b_i)] plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") - plt.annotate("Relative execution time", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Relative execution time \nof GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + plt.annotate("Speedup", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_{}.{}", OUTPUT_DATE) #%% Similar plot, but all block sizes are on 1 row; - sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams["font.family"] = ["Latin Modern Roman"] plt.rcParams['axes.titlepad'] = 20 plt.rcParams['axes.labelpad'] = 10 plt.rcParams['axes.titlesize'] = 22 @@ -267,40 +359,12 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): exec_time_axes += [build_exec_time_plot_grcuda_cuda_compact(curr_res, gs, p_i, b_i)] plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") - plt.annotate("Relative execution time", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Relative execution time \nof GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_compact_{}.{}", OUTPUT_DATE) - #%% - # from plot_utils import remove_outliers_df - # data_grcuda = load_data(INPUT_DATE_GRCUDA, skip_iter=3) - # data_cuda = load_data_cuda(INPUT_DATE_CUDA, skip_iter=3) - # dg = remove_outliers_df(data_grcuda, "computation_sec") - - # df_list = [] - # for k, v in data_grcuda.groupby(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"], as_index=False): - # tmp = remove_outliers_df(v, "computation_sec", reset_index=False) - # df_list += [tmp.set_index(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"])["computation_sec"]] - - # a = pd.concat(df_list).to_frame() - - # df_list = [] - # for k, v in data_cuda.groupby(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"], as_index=False): - # tmp = remove_outliers_df(v, "computation_sec", reset_index=False) - # df_list += [tmp.set_index(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"])["computation_sec"]] - - # b = pd.concat(df_list).to_frame() - - # a = a.groupby(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"], as_index=True).apply(np.median).to_frame() - # b = b.groupby(["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", "size"], as_index=True).apply(np.median).to_frame() - - # c = a.merge(b, suffixes=("_grcuda", "_cuda"), left_index=True, right_index=True, sort=True).reset_index() - # c["grcuda_cuda_speedup"] = c["0_cuda"] / c["0_grcuda"] - - - - - - \ No newline at end of file + #%% Ridge plot with distributions; + g = ridgeplot(data) + save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_ridgeplot_{}.{}", OUTPUT_DATE) \ No newline at end of file diff --git a/projects/resources/python/plotting/plot_utils.py b/projects/resources/python/plotting/plot_utils.py index cbdf14a9..ded2e82d 100755 --- a/projects/resources/python/plotting/plot_utils.py +++ b/projects/resources/python/plotting/plot_utils.py @@ -206,10 +206,11 @@ def update_width(ax: plt.Axes, width: float=1): patch.set_x(patch.get_x() + 0.5 * diff) -def save_plot(directory: str, filename: str, date: str, create_date_dir: bool = True, extension: list = ["pdf", "png"]): +def save_plot(directory: str, filename: str, date: str = "", create_date_dir: bool = True, extension: list = ["pdf", "png"]): """ :param directory: where the plot is stored - :param filename: should be of format 'myplot_{}.{}', where the first placeholder is used for the date and the second for the extension + :param filename: should be of format 'myplot_{}.{}', where the first placeholder is used for the date and the second for the extension, + or 'myplot.{}', or 'myplot.extension' :param date: date that should appear in the plot filename :param create_date_dir: if True, create a sub-folder with the date :param extension: list of extension used to store the plot @@ -220,4 +221,4 @@ def save_plot(directory: str, filename: str, date: str, create_date_dir: bool = os.mkdir(output_folder) for e in extension: - plt.savefig(os.path.join(output_folder, filename.format(date, e)), dpi=300) \ No newline at end of file + plt.savefig(os.path.join(output_folder, filename.format(date, e) if date else filename.format(e)), dpi=300) \ No newline at end of file From 194a68c1b5b32adcc97b5ae91c9eff8b9b5d2103 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 1 Jul 2020 09:11:59 +0200 Subject: [PATCH 109/236] updated plots and benchmarks now use Java nanotime for better accuracy --- projects/resources/cuda/b4_default.cu | 115 ++++++ projects/resources/cuda/b4_sync.cu | 109 ++++++ projects/resources/cuda/b5_default.cu | 127 +++++++ projects/resources/cuda/b5_sync.cu | 116 ++++++ .../python/benchmark/bench/bench_1.py | 24 +- .../python/benchmark/bench/bench_4.py | 132 +++---- .../python/benchmark/bench/bench_7.py | 54 +-- .../python/benchmark/bench/bench_8.py | 69 ++-- .../resources/python/benchmark/benchmark.py | 14 +- .../python/benchmark/benchmark_wrapper.py | 15 +- .../resources/python/plotting/load_data.py | 60 ++- .../python/plotting/plot_speedup_baseline.py | 4 +- .../plotting/plot_speedup_grcuda_cuda.py | 4 +- .../plotting/plot_theoretical_performance.py | 344 ++++++++++++++++++ 14 files changed, 1003 insertions(+), 184 deletions(-) create mode 100644 projects/resources/cuda/b4_default.cu create mode 100644 projects/resources/cuda/b4_sync.cu create mode 100644 projects/resources/cuda/b5_default.cu create mode 100644 projects/resources/cuda/b5_sync.cu create mode 100755 projects/resources/python/plotting/plot_theoretical_performance.py diff --git a/projects/resources/cuda/b4_default.cu b/projects/resources/cuda/b4_default.cu new file mode 100644 index 00000000..37e94fc3 --- /dev/null +++ b/projects/resources/cuda/b4_default.cu @@ -0,0 +1,115 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void sum(int* x, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + x[i] += 1; + } +} + +///////////////////////////// +///////////////////////////// + +void init(int *x, int *y, int N) { + for (int i = 0; i < N; i++) { + x[i] = rand() % 10; + y[i] = rand() % 10; + } +} + +void reset() { +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = 64; + int err = 0; + + if (debug) { + std::cout << "running b4 default" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + } + + auto start = clock_type::now(); + int *x, *y; + err = cudaMallocManaged(&x, sizeof(int) * N); + err = cudaMallocManaged(&y, sizeof(int) * N); + if (debug && err) std::cout << err << std::endl; + + // Create streams; + cudaStream_t s1, s2; + err = cudaStreamCreate(&s1); + err = cudaStreamCreate(&s2); + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + init(x, y, N); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + sum<<>>(x, N); + sum<<>>(y, N); + err = cudaStreamSynchronize(s1); + err = cudaStreamSynchronize(s2); + + if (debug && err) std::cout << err << std::endl; + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=" << x[0] << " " << y[0] << "; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << x[0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b4_sync.cu b/projects/resources/cuda/b4_sync.cu new file mode 100644 index 00000000..4d41f9fc --- /dev/null +++ b/projects/resources/cuda/b4_sync.cu @@ -0,0 +1,109 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void sum(int* x, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + x[i] += 1; + } +} + +///////////////////////////// +///////////////////////////// + +void init(int *x, int *y, int N) { + for (int i = 0; i < N; i++) { + x[i] = rand() % 10; + y[i] = rand() % 10; + } +} + +void reset() { +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = 64; + int err = 0; + + if (debug) { + std::cout << "running b4 sync" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + } + + auto start = clock_type::now(); + int *x, *y; + err = cudaMallocManaged(&x, sizeof(int) * N); + err = cudaMallocManaged(&y, sizeof(int) * N); + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + init(x, y, N); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + sum<<>>(x, N); + err = cudaDeviceSynchronize(); + sum<<>>(y, N); + err = cudaDeviceSynchronize(); + + if (debug && err) std::cout << err << std::endl; + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=" << x[0] << " " << y[0] << "; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << x[0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b5_default.cu b/projects/resources/cuda/b5_default.cu new file mode 100644 index 00000000..e571a176 --- /dev/null +++ b/projects/resources/cuda/b5_default.cu @@ -0,0 +1,127 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void sum(int* x, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + x[i] += 1; + } +} + +///////////////////////////// +///////////////////////////// + +void init(int **x, int N, int K) { + for (int i = 0; i < K; i++) { + for (int j = 0; j < N; j++) { + x[i][j] = rand() % 10; + } + } +} + +void reset() { +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = 64; + int err = 0; + + int K = num_executions; + + if (debug) { + std::cout << "running b5 default" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + } + + auto start = clock_type::now(); + int **x; + x = (int **) malloc(sizeof(int*) * K); + for (int i = 0; i < K; i++) { + cudaMallocManaged(&x[i], sizeof(int) * N); + } + if (debug && err) std::cout << err << std::endl; + + // Create streams; + cudaStream_t *s = (cudaStream_t *) malloc(sizeof(cudaStream_t) * K); + for (int i = 0; i < K; i++) { + err = cudaStreamCreate(&s[i]); + } + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + init(x, N, K); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + start = clock_type::now(); + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + auto end_tmp = clock_type::now(); + auto reset_time = 0; + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + sum<<>>(x[i], N); + + if (debug && err) std::cout << err << std::endl; + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + } + + for (int i = 0; i < K; i++) { + err = cudaStreamSynchronize(s[i]); + } + end = clock_type::now(); + auto time_tot = chrono::duration_cast(end - start).count(); + if (debug && err) std::cout << err << std::endl; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < K; j++) { + std::cout << x[j][0] << ", "; + } + std::cout << ", ...]; time=" << (float) time_tot / 1000 << " ms" << std::endl; + } else { + std::cout << 0 << "," << x[0][0] << "," << (float) time_tot / 1e6 << "," << 0 << "," << (float) time_tot / 1e6 << std::endl; + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) time_tot << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b5_sync.cu b/projects/resources/cuda/b5_sync.cu new file mode 100644 index 00000000..f4101fc0 --- /dev/null +++ b/projects/resources/cuda/b5_sync.cu @@ -0,0 +1,116 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void sum(int* x, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + x[i] += 1; + } +} + +///////////////////////////// +///////////////////////////// + +void init(int **x, int N, int K) { + for (int i = 0; i < K; i++) { + for (int j = 0; j < N; j++) { + x[i][j] = rand() % 10; + } + } +} + +void reset() { +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = 64; + int err = 0; + + int K = num_executions; + + if (debug) { + std::cout << "running b5 sync" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + } + + auto start = clock_type::now(); + int **x; + x = (int **) malloc(sizeof(int*) * K); + for (int i = 0; i < K; i++) { + cudaMallocManaged(&x[i], sizeof(int) * N); + } + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + init(x, N, K); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + sum<<>>(x[i], N); + err = cudaDeviceSynchronize(); + + if (debug && err) std::cout << err << std::endl; + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < K; j++) { + std::cout << x[j][0] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << x[0][0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index ebd58d91..4d276787 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -1,6 +1,6 @@ # coding=utf-8 import polyglot -import time +from java.lang import System import numpy as np from random import random, randint, seed @@ -117,23 +117,23 @@ def reset_result(self) -> None: def execute(self) -> object: # A, B. Call the kernel. The 2 computations are independent, and can be done in parallel; - start = time.time() + start = System.nanoTime() self.square_kernel(self.num_blocks, self.block_size)(self.x, self.x1, self.size) self.square_kernel(self.num_blocks, self.block_size)(self.y, self.y1, self.size) - end = time.time() - self.benchmark.add_phase({"name": "square", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "square", "time_sec": (end - start) / 1_000_000_000}) # C. Compute the sum of the result; - start = time.time() + start = System.nanoTime() self.reduce_kernel(self.num_blocks, self.block_size)(self.x1, self.y1, self.res, self.size) - end = time.time() - self.benchmark.add_phase({"name": "reduce", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "reduce", "time_sec": (end - start) / 1_000_000_000}) # Add a final sync step to measure the real computation time; - start = time.time() + start = System.nanoTime() result = self.res[0] - end = time.time() - self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) self.benchmark.add_to_benchmark("gpu_result", result) if self.benchmark.debug: @@ -143,7 +143,7 @@ def execute(self) -> object: def cpu_validation(self, gpu_result: object, reinit: bool) -> None: # Recompute the CPU result only if necessary; - start = time.time() + start = System.nanoTime() if self.current_iter == 0 or reinit: # Re-initialize the random number generator with the same seed as the GPU to generate the same values; seed(self.random_seed) @@ -161,7 +161,7 @@ def cpu_validation(self, gpu_result: object, reinit: bool) -> None: y_g = y_g ** 2 x_g -= y_g self.cpu_result = np.sum(x_g) - cpu_time = time.time() - start + cpu_time = System.nanoTime() - start difference = np.abs(self.cpu_result - gpu_result) self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) self.benchmark.add_to_benchmark("cpu_gpu_res_difference", difference) diff --git a/projects/resources/python/benchmark/bench/bench_4.py b/projects/resources/python/benchmark/bench/bench_4.py index 2c43faad..4bb0d98e 100644 --- a/projects/resources/python/benchmark/bench/bench_4.py +++ b/projects/resources/python/benchmark/bench/bench_4.py @@ -4,46 +4,20 @@ import numpy as np from random import random, randint, seed -from benchmark import Benchmark, time_phase +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D from benchmark_result import BenchmarkResult +from java.lang import System ############################## ############################## -NUM_THREADS_PER_BLOCK = 128 - -COMPUTE_KERNEL = """ - extern "C" __global__ void compute(const float* x, float *y, int n) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n) { - y[i] = logf(1.0 + cosf(x[i]) * cosf(x[i]) + sinf(x[i]) * sinf(x[i])); - } +SUM_KERNEL = """ +extern "C" __global__ void sum(int* x, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + x[i] += 1; } - """ - -REDUCE_KERNEL = """ - extern "C" __global__ void reduce(const float *x, const float *y, float *res, int n) { - __shared__ float cache[%d]; - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n) { - cache[threadIdx.x] = x[i] + y[i]; - } - __syncthreads(); - - // Perform tree reduction; - i = %d / 2; - while (i > 0) { - if (threadIdx.x < i) { - cache[threadIdx.x] += cache[threadIdx.x + i]; - } - __syncthreads(); - i /= 2; - } - if (threadIdx.x == 0) { - atomicAdd(res, cache[0]); - } - } - """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) +} +""" ############################## ############################## @@ -51,10 +25,7 @@ class Benchmark4(Benchmark): """ - Compute the sum of 2 vectors after having applied some computationally intensive arithmetic to it: - A: log(1 + sin(x)^2 + cos(x)^2) ──┐ - ├─> C: sum(x + y) - B: log(1 + sin(y)^2 + cos(y)^2) ──┘ + A benchmark with 2 very simple independent computations, used to measure overheads and the impact of data transfer; """ def __init__(self, benchmark: BenchmarkResult): @@ -62,32 +33,23 @@ def __init__(self, benchmark: BenchmarkResult): self.size = 0 self.x = None self.y = None - self.a = None - self.b = None - self.res = None - self.num_blocks = 0 - self.compute_kernel = None - self.reduce_kernel = None + self.num_blocks = 64 + self.sum_kernel = None self.cpu_result = 0 + self.block_size = DEFAULT_BLOCK_SIZE_1D @time_phase("allocation") def alloc(self, size: int, block_size: dict = None) -> None: self.size = size - self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + self.block_size = block_size["block_size_1d"] # Allocate 4 vectors; - self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") - self.y = polyglot.eval(language="grcuda", string=f"float[{size}]") - self.a = polyglot.eval(language="grcuda", string=f"float[{size}]") - self.b = polyglot.eval(language="grcuda", string=f"float[{size}]") - - # Allocate a support vector; - self.res = polyglot.eval(language="grcuda", string=f"float[1]") + self.x = polyglot.eval(language="grcuda", string=f"int[{size}]") + self.y = polyglot.eval(language="grcuda", string=f"int[{size}]") # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") - self.compute_kernel = build_kernel(COMPUTE_KERNEL, "compute", "pointer, pointer, sint32") - self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "pointer, pointer, pointer, sint32") + self.sum_kernel = build_kernel(SUM_KERNEL, "sum", "pointer, sint32") @time_phase("initialization") def init(self): @@ -95,43 +57,41 @@ def init(self): seed(self.random_seed) for i in range(self.size): if self.benchmark.random_init: - self.x[i] = random() - self.a[i] = random() + self.x[i] = randint(0, 10) + self.y[i] = randint(0, 10) else: self.x[i] = 1 / (i + 1) - self.a[i] = 1 / (i + 1) + self.y[i] = 1 / (i + 1) def execute(self) -> object: - # This must be reset at every execution; - self.res[0] = 0 # A. B. Call the kernels. The 2 computations are independent, and can be done in parallel; - start = time.time() - self.compute_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.y, self.size) - self.compute_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.a, self.b, self.size) - end = time.time() - self.benchmark.add_phase({"name": "compute", "time_sec": end - start}) - - # C. Compute the sum of the result; - start = time.time() - self.reduce_kernel(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.b, self.res, self.size) - end = time.time() - self.benchmark.add_phase({"name": "reduce", "time_sec": end - start}) - - start = time.time() - result = self.res[0] - end = time.time() - self.benchmark.add_phase({"name": "read_result", "time_sec": end - start}) - - self.benchmark.add_to_benchmark("gpu_result", result) + start = System.nanoTime() + s = System.nanoTime() + self.sum_kernel(self.num_blocks, self.block_size)(self.x, self.size) + end = System.nanoTime() + self.benchmark.add_phase({"name": "sum_1", "time_sec": (end - start) / 1_000_000_000}) + + start = System.nanoTime() + self.sum_kernel(self.num_blocks, self.block_size)(self.y, self.size) + end = System.nanoTime() + self.benchmark.add_phase({"name": "sum_2", "time_sec": (end - start) / 1_000_000_000}) + + start = System.nanoTime() + result_1 = self.x[0] + result_2 = self.y[0] + end = System.nanoTime() + self.benchmark.add_phase({"name": "read_result", "time_sec": (end - start) / 1_000_000_000}) + + self.benchmark.add_to_benchmark("gpu_result", result_1 + result_2) if self.benchmark.debug: - BenchmarkResult.log_message(f"\tgpu result: {result:.4f}") + BenchmarkResult.log_message(f"\tgpu result: {result_1} {result_2}") - return result + return result_1 + result_2 def cpu_validation(self, gpu_result: object, reinit: bool) -> None: # Recompute the CPU result only if necessary; - start = time.time() + start = System.nanoTime() if self.current_iter == 0 or reinit: # Re-initialize the random number generator with the same seed as the GPU to generate the same values; seed(self.random_seed) @@ -139,16 +99,16 @@ def cpu_validation(self, gpu_result: object, reinit: bool) -> None: x_g = np.zeros(self.size) y_g = np.zeros(self.size) for i in range(self.size): - x_g[i] = random() - y_g[i] = random() + x_g[i] = randint(0, 10) + y_g[i] = randint(0, 10) else: x_g = 1 / np.linspace(1, self.size, self.size) y_g = 1 / np.linspace(1, self.size, self.size) - x_g = np.log(1 + np.sin(x_g)**2 + np.cos(x_g)**2) - y_g = np.log(1 + np.sin(y_g)**2 + np.cos(y_g)**2) - self.cpu_result = np.sum(x_g + y_g) - cpu_time = time.time() - start + x_g += 1 + y_g += 1 + self.cpu_result = x_g[0] + y_g[0] + cpu_time = System.nanoTime() - start difference = np.abs(self.cpu_result - gpu_result) self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) self.benchmark.add_to_benchmark("cpu_gpu_res_difference", difference) diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index ad8f3cf4..3fad6d5a 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -1,6 +1,6 @@ # coding=utf-8 import polyglot -import time +from java.lang import System import numpy as np from random import random, randint, seed, sample @@ -201,51 +201,51 @@ def execute(self) -> object: for i in range(self.num_iterations): # Authorities; - start = time.time() + start = System.nanoTime() self.spmv_kernel(self.num_blocks_size, self.block_size)(self.ptr2, self.idx2, self.val2, self.hub1, self.auth2, self.size, self.num_nnz) - end = time.time() - self.benchmark.add_phase({"name": f"spmv_a_{i}", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": f"spmv_a_{i}", "time_sec": (end - start) / 1_000_000_000}) # Hubs; - start = time.time() + start = System.nanoTime() self.spmv_kernel(self.num_blocks_size, self.block_size)(self.ptr, self.idx, self.val, self.auth1, self.hub2, self.size, self.num_nnz) - end = time.time() - self.benchmark.add_phase({"name": f"spmv_h_{i}", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": f"spmv_h_{i}", "time_sec": (end - start) / 1_000_000_000}) # Normalize authorities; - start = time.time() + start = System.nanoTime() self.sum_kernel(self.num_blocks_size, self.block_size)(self.auth2, self.auth_norm, self.size) - end = time.time() - self.benchmark.add_phase({"name": f"sum_a_{i}", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": f"sum_a_{i}", "time_sec": (end - start) / 1_000_000_000}) # Normalize hubs; - start = time.time() + start = System.nanoTime() self.sum_kernel(self.num_blocks_size, self.block_size)(self.hub2, self.hub_norm, self.size) - end = time.time() - self.benchmark.add_phase({"name": f"sum_h_{i}", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": f"sum_h_{i}", "time_sec": (end - start) / 1_000_000_000}) - start = time.time() + start = System.nanoTime() self.divide_kernel(self.num_blocks_size, self.block_size)(self.auth2, self.auth1, self.auth_norm, self.size) - end = time.time() - self.benchmark.add_phase({"name": f"divide_a_{i}", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": f"divide_a_{i}", "time_sec": (end - start) / 1_000_000_000}) - start = time.time() + start = System.nanoTime() self.divide_kernel(self.num_blocks_size, self.block_size)(self.hub2, self.hub1, self.hub_norm, self.size) - end = time.time() - self.benchmark.add_phase({"name": f"divide_h_{i}", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": f"divide_h_{i}", "time_sec": (end - start) / 1_000_000_000}) - start = time.time() + start = System.nanoTime() self.auth_norm[0] = 0.0 self.hub_norm[0] = 0.0 - end = time.time() - self.benchmark.add_phase({"name": f"norm_reset_{i}", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": f"norm_reset_{i}", "time_sec": (end - start) / 1_000_000_000}) # Add a final sync step to measure the real computation time; - start = time.time() + start = System.nanoTime() tmp1 = self.auth1[0] tmp2 = self.hub1[0] - end = time.time() - self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) # Compute GPU result; for i in range(self.size): @@ -271,7 +271,7 @@ def spmv(ptr, idx, val, vec): return res # Recompute the CPU result only if necessary; - start = time.time() + start = System.nanoTime() if self.current_iter == 0 or reinit: # Re-initialize the random number generator with the same seed as the GPU to generate the same values; seed(self.random_seed) @@ -294,7 +294,7 @@ def spmv(ptr, idx, val, vec): hub1 = hub2 self.cpu_result = hub1 + auth1 - cpu_time = time.time() - start + cpu_time = System.nanoTime() - start # Compare GPU and CPU results; difference = 0 diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index 0959f625..f676bd8c 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -1,6 +1,6 @@ # coding=utf-8 import polyglot -import time +from java.lang import System import numpy as np from random import random, randint, seed, sample @@ -336,69 +336,78 @@ def reset_result(self) -> None: def execute(self) -> object: # Blur - Small; - start = time.time() + start = System.nanoTime() a = 32 self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_small_diameter**2)\ (self.image, self.blurred_small, self.size, self.size, self.kernel_small, self.kernel_small_diameter) - end = time.time() - self.benchmark.add_phase({"name": "blur_small", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "blur_small", "time_sec": (end - start) / 1_000_000_000}) # Blur - Large; - start = time.time() + start = System.nanoTime() self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_large_diameter**2)\ (self.image, self.blurred_large, self.size, self.size, self.kernel_large, self.kernel_large_diameter) - end = time.time() - self.benchmark.add_phase({"name": "blur_large", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "blur_large", "time_sec": (end - start) / 1_000_000_000}) # Blur - Unsharpen; - start = time.time() + start = System.nanoTime() self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_unsharpen_diameter**2)\ (self.image, self.blurred_unsharpen, self.size, self.size, self.kernel_unsharpen, self.kernel_unsharpen_diameter) - end = time.time() - self.benchmark.add_phase({"name": "blur_unsharpen", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "blur_unsharpen", "time_sec": (end - start) / 1_000_000_000}) # Sobel filter (edge detection); - start = time.time() + start = System.nanoTime() self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (self.block_size_2d, self.block_size_2d))\ (self.blurred_small, self.mask_small, self.size, self.size) - end = time.time() - self.benchmark.add_phase({"name": "sobel_small", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "sobel_small", "time_sec": (end - start) / 1_000_000_000}) - start = time.time() + start = System.nanoTime() self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (self.block_size_2d, self.block_size_2d))\ (self.blurred_large, self.mask_large, self.size, self.size) - end = time.time() - self.benchmark.add_phase({"name": "sobel_large", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "sobel_large", "time_sec": (end - start) / 1_000_000_000}) # Extend large edge detection mask; - start = time.time() + start = System.nanoTime() self.maximum_kernel(self.num_blocks_per_processor, self.block_size_1d)(self.mask_large, self.maximum, self.size**2) + end = System.nanoTime() + self.benchmark.add_phase({"name": "maximum", "time_sec": (end - start) / 1_000_000_000}) + start = System.nanoTime() self.minimum_kernel(self.num_blocks_per_processor, self.block_size_1d)(self.mask_large, self.minimum, self.size**2) + end = System.nanoTime() + self.benchmark.add_phase({"name": "minimum", "time_sec": (end - start) / 1_000_000_000}) + start = System.nanoTime() self.extend_kernel(self.num_blocks_per_processor, self.block_size_1d)(self.mask_large, self.minimum, self.maximum, self.size**2) - end = time.time() - self.benchmark.add_phase({"name": "extend", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "extend", "time_sec": (end - start) / 1_000_000_000}) # Unsharpen; - start = time.time() + start = System.nanoTime() self.unsharpen_kernel(self.num_blocks_per_processor, self.block_size_1d)\ (self.image, self.blurred_unsharpen, self.image_unsharpen, self.unsharpen_amount, self.size * self.size) - end = time.time() - self.benchmark.add_phase({"name": "unsharpen", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "unsharpen", "time_sec": (end - start) / 1_000_000_000}) # Combine results; - start = time.time() + start = System.nanoTime() self.combine_mask_kernel(self.num_blocks_per_processor, self.block_size_1d)\ (self.image_unsharpen, self.blurred_large, self.mask_large, self.image2, self.size * self.size) + end = System.nanoTime() + self.benchmark.add_phase({"name": "combine", "time_sec": (end - start) / 1_000_000_000}) + start = System.nanoTime() self.combine_mask_kernel(self.num_blocks_per_processor, self.block_size_1d)\ (self.image2, self.blurred_small, self.mask_small, self.image3, self.size * self.size) - end = time.time() - self.benchmark.add_phase({"name": "combine", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "combine_2", "time_sec": (end - start) / 1_000_000_000}) # Add a final sync step to measure the real computation time; - start = time.time() + start = System.nanoTime() tmp = self.image3[0][0] - end = time.time() - self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) # Compute GPU result; # for i in range(self.size): @@ -474,7 +483,7 @@ def truncate(image, minimum=0, maximum=1): return out # Recompute the CPU result only if necessary; - start = time.time() + start = System.nanoTime() if self.current_iter == 0 or reinit: # Part 1: Small blur on medium frequencies; blurred_small = gaussian_blur(self.image_cpu, self.kernel_small_cpu) @@ -498,7 +507,7 @@ def truncate(image, minimum=0, maximum=1): # Part 5: Merge image and medium frequencies; self.cpu_result = image2 * edges_small + blurred_small * (1 - edges_small) - cpu_time = time.time() - start + cpu_time = System.nanoTime() - start # Compare GPU and CPU results; difference = 0 diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py index 38fc380c..6da5dcbe 100644 --- a/projects/resources/python/benchmark/benchmark.py +++ b/projects/resources/python/benchmark/benchmark.py @@ -1,6 +1,6 @@ from benchmark_result import BenchmarkResult from abc import ABC, abstractmethod -import time +from java.lang import System from typing import Callable DEFAULT_BLOCK_SIZE_1D = 32 @@ -14,10 +14,10 @@ def time_phase(phase_name: str) -> Callable: """ def inner_func(func) -> Callable: def func_call(self, *args, **kwargs) -> object: - start = time.time() + start = System.nanoTime() result = func(self, *args, **kwargs) - end = time.time() - self.benchmark.add_phase({"name": phase_name, "time_sec": end - start}) + end = System.nanoTime() + self.benchmark.add_phase({"name": phase_name, "time_sec": (end - start) / 1_000_000_000}) return result return func_call return inner_func @@ -96,7 +96,7 @@ def run(self, num_iter: int, policy: str, size: int, realloc: bool, reinit: bool # TODO: set the execution policy; # Start a timer to monitor the total GPU execution time; - start = time.time() + start = System.nanoTime() # Allocate memory for the benchmark; if num_iter == 0 or realloc: @@ -112,8 +112,8 @@ def run(self, num_iter: int, policy: str, size: int, realloc: bool, reinit: bool gpu_result = self.execute() # Stop the timer; - end = time.time() - self.benchmark.add_total_time(end - start) + end = System.nanoTime() + self.benchmark.add_total_time((end - start) / 1_000_000_000) # Perform validation on CPU; if self.benchmark.cpu_validation: diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 7698a091..76ef2817 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -5,6 +5,7 @@ from datetime import datetime from benchmark_result import BenchmarkResult from benchmark_main import create_block_size_list +from java.lang import System ############################## ############################## @@ -12,6 +13,7 @@ # Benchmark settings; benchmarks = [ "b1", + # "b4", "b6", "b7", "b8", @@ -19,6 +21,7 @@ num_elem = { "b1": [2000000, 5000000, 10000000, 20000000, 40000000], + "b4": [2000000, 5000000, 10000000, 20000000, 40000000], "b6": [20000, 50000, 200000, 500000, 800000], "b7": [50000, 100000, 150000, 200000, 250000], "b8": [800, 1600, 2400, 4000, 4800], @@ -67,15 +70,15 @@ def execute_cuda_benchmark(benchmark, size, block_size, exec_policy, num_iter, d benchmark_cmd = CUDA_CMD.format(benchmark, exec_policy, size, block_size["block_size_1d"], block_size["block_size_2d"], num_iter, output_path) - start = time.time() + start = System.nanoTime() result = subprocess.run(benchmark_cmd, shell=True, stdout=subprocess.STDOUT, cwd=f"{os.getenv('GRCUDA_HOME')}/projects/resources/cuda/bin") result.check_returncode() - end = time.time() + end = System.nanoTime() if debug: - BenchmarkResult.log_message(f"Benchmark total execution time: {end - start:.2f} seconds") + BenchmarkResult.log_message(f"Benchmark total execution time: {(end - start) / 1_000_000_000:.2f} seconds") ############################## @@ -119,15 +122,15 @@ def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_strea benchmark_cmd = GRAALPYTHON_CMD.format(new_stream_policy, exec_policy, dependency_policy, parent_stream_policy, num_iter, size, benchmark, block_size["block_size_1d"], block_size["block_size_2d"], "-d" if debug else "", output_path) - start = time.time() + start = System.nanoTime() result = subprocess.run(benchmark_cmd, shell=True, stdout=subprocess.STDOUT, cwd=f"{os.getenv('GRCUDA_HOME')}/projects/resources/python/benchmark") result.check_returncode() - end = time.time() + end = System.nanoTime() if debug: - BenchmarkResult.log_message(f"Benchmark total execution time: {end - start:.2f} seconds") + BenchmarkResult.log_message(f"Benchmark total execution time: {(end - start) / 1_000_000_000:.2f} seconds") ############################## ############################## diff --git a/projects/resources/python/plotting/load_data.py b/projects/resources/python/plotting/load_data.py index e57d24c9..065decc1 100755 --- a/projects/resources/python/plotting/load_data.py +++ b/projects/resources/python/plotting/load_data.py @@ -10,15 +10,20 @@ import json import os import numpy as np +from scipy.stats.mstats import gmean DEFAULT_RES_DIR = "../../../../data/results" -def load_data(input_date: str, skip_iter=0, remove_inf=True) -> pd.DataFrame: +def load_data(input_date: str, skip_iter=0, remove_inf=True, remove_time_zero=True, benchmark="", phases=None) -> pd.DataFrame: """ Load the benchmark results located in the input sub-folder :param input_date: name of the folder where results are located, as a subfolder of DEFAULT_RES_DIR :param skip_iter: skip the first iterations for each benchmark, as they are considered warmup + :param remove_inf: remove rows with infinite speedup value, as they are not useful + :param remove_time_zero: if True, remove rows with 0 computation time; + :param benchmark: load data only for the specified benchmark + :param phases: list of benchmark phases to add as columns :return: a DataFrame containing the results """ input_path = os.path.join(DEFAULT_RES_DIR, input_date) @@ -27,7 +32,10 @@ def load_data(input_date: str, skip_iter=0, remove_inf=True) -> pd.DataFrame: data_dict = {} for res in os.listdir(input_path): with open(os.path.join(input_path, res)) as f: - data_dict[res] = json.load(f) + if not benchmark or res.split("_")[6] == benchmark: + data_dict[res] = json.load(f) + + phases_names = [] # Turn results into a pd.DataFrame; rows = [] @@ -56,32 +64,46 @@ def load_data(input_date: str, skip_iter=0, remove_inf=True) -> pd.DataFrame: total_time_sec = curr_iteration["total_time_sec"] overhead_sec = curr_iteration["overhead_sec"] computation_sec = curr_iteration["computation_sec"] + + # Process phases; + phases_time = [] + if phases: + phases_time = [p["time_sec"] for p in curr_iteration["phases"] if p["name"] in phases] + if not phases_names: + phases_names = [p["name"] for p in curr_iteration["phases"] if p["name"] in phases] + # Add a new row; if (num_iter >= skip_iter): - rows += [row + [int(size), bool(realloc), bool(reinit), num_iter - skip_iter, gpu_result, total_time_sec, overhead_sec, computation_sec]] + rows += [row + [int(size), bool(realloc), bool(reinit), num_iter - skip_iter, gpu_result, total_time_sec, overhead_sec, computation_sec] + phases_time] columns = ["benchmark", "exec_policy", "new_stream_policy", "parent_stream_policy", "dependency_policy", "block_size_1d", "block_size_2d", "block_size_str", "total_iterations", "cpu_validation", "random_init", "size", "realloc", "reinit", - "num_iter", "gpu_result", "total_time_sec", "overhead_sec", "computation_sec"] + "num_iter", "gpu_result", "total_time_sec", "overhead_sec", "computation_sec"] + (phases_names if phases else []) data = pd.DataFrame(rows, columns=columns).sort_values(by=columns[:14], ignore_index=True) + # Clean columns with 0 computation time; + if remove_time_zero: + data = data[data["computation_sec"] > 0].reset_index(drop=True) + # Compute speedups; compute_speedup(data, ["benchmark", "new_stream_policy", "parent_stream_policy", "dependency_policy", "block_size_1d", "block_size_2d", "total_iterations", "cpu_validation", "random_init", "size", "realloc", "reinit"]) # Clean columns with infinite speedup; if remove_inf: - data = data[data["computation_speedup"] != np.inf] + data = data[data["computation_speedup"] != np.inf].reset_index(drop=True) return data -def load_data_cuda(input_date: str, skip_iter=0, remove_inf=True) -> pd.DataFrame: +def load_data_cuda(input_date: str, skip_iter=0, remove_inf=True, remove_time_zero=True) -> pd.DataFrame: """ Load the benchmark results located in the input sub-folder :param input_date: name of the folder where results are located, as a subfolder of DEFAULT_RES_DIR :param skip_iter: skip the first iterations for each benchmark, as they are considered warmup + :param remove_inf: if True, remove rows with infinite speedup + :param remove_time_zero: if True, remove rows with 0 computation time; :return: a DataFrame containing the results """ input_path = os.path.join(DEFAULT_RES_DIR, input_date) @@ -114,28 +136,42 @@ def load_data_cuda(input_date: str, skip_iter=0, remove_inf=True) -> pd.DataFram "total_iterations", "size", "num_iter", "gpu_result", "total_time_sec", "overhead_sec", "computation_sec"] data = data[columns] + # Clean columns with 0 computation time; + if remove_time_zero: + data = data[data["computation_sec"] > 0].reset_index(drop=True) + # Compute speedups; - compute_speedup(data, ["benchmark", "block_size_1d", "block_size_2d", "total_iterations", "size"]) + compute_speedup(data, ["benchmark", "block_size_1d", "block_size_2d", "size"]) # Clean columns with infinite speedup; if remove_inf: - data = data[data["computation_speedup"] != np.inf] + data = data[data["computation_speedup"] != np.inf].reset_index(drop=True) return data -def compute_speedup(data, key, speedup_col_name="computation_speedup", time_column="computation_sec", baseline_filter_col="exec_policy", baseline_filter_val="sync", baseline_col_name="baseline_time_sec"): +def compute_speedup(data, key, speedup_col_name="computation_speedup", time_column="computation_sec", + baseline_filter_col="exec_policy", baseline_filter_val="sync", baseline_col_name="baseline_time_sec", + correction=True, aggregation=np.median): # Initialize speedup values; data[speedup_col_name] = 1 data[baseline_col_name] = 0 + updated_groups = [] grouped_data = data.groupby(key, as_index=False) for group_key, group in grouped_data: # Compute the median baseline computation time; - median_baseline = np.median(group.loc[group[baseline_filter_col] == baseline_filter_val, time_column]) + median_baseline = aggregation(group.loc[group[baseline_filter_col] == baseline_filter_val, time_column]) # Compute the speedup for this group; - data.loc[group.index, speedup_col_name] = median_baseline / group[time_column] - data.loc[group.index, baseline_col_name] = median_baseline + group.loc[:, speedup_col_name] = median_baseline / group[time_column] + group.loc[:, baseline_col_name] = median_baseline + data.loc[group.index, :] = group + + # Guarantee that the geometric mean of speedup referred to the baseline is 1, and adjust speedups accordingly; + if correction: + gmean_speedup = gmean(group.loc[group[baseline_filter_col] == baseline_filter_val, speedup_col_name]) + group.loc[:, speedup_col_name] /= gmean_speedup + data.loc[group.index, :] = group def join_tables(t1, t2, key=["benchmark", "exec_policy", "block_size_1d", "block_size_2d", "block_size_str", diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 88076e5a..3d179381 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,8 +21,8 @@ from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot -INPUT_DATE = "2020_06_22_10_13_05_grcuda" -OUTPUT_DATE = "2020_06_22" +INPUT_DATE = "2020_06_30_18_20_02_grcuda" +OUTPUT_DATE = "2020_07_01" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index e6d07879..c1fc747d 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -26,9 +26,9 @@ ############################## -INPUT_DATE_GRCUDA = "2020_06_22_10_13_05_grcuda" +INPUT_DATE_GRCUDA = "2020_06_30_18_20_02_grcuda" INPUT_DATE_CUDA = "2020_06_22_14_37_09_cuda" -OUTPUT_DATE = "2020_06_22" +OUTPUT_DATE = "2020_07_01" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py new file mode 100755 index 00000000..111aba1b --- /dev/null +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -0,0 +1,344 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Mon Jun 29 12:00:01 2020 + +@author: alberto.parravicini +""" + +import json +import numpy as np +import pandas as pd +import seaborn as sns +import matplotlib.pyplot as plt +import matplotlib.gridspec as gridspec +from scipy.stats.mstats import gmean +from matplotlib.patches import Patch, Rectangle +from matplotlib.collections import PatchCollection, LineCollection +import matplotlib.lines as lines + +import os +from load_data import load_data, load_data_cuda, join_tables, compute_speedup +from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot +import matplotlib.ticker as ticker + +############################## +############################## + +DEFAULT_RES_DIR = "../../../../data/results" + +INPUT_DATE_GRCUDA = "2020_06_30_18_20_02_grcuda" +OUTPUT_DATE = "2020_07_01" +PLOT_DIR = "../../../../data/plots" + +B7_ITER = 10 + +BENCHMARK_NAMES = {"b1": "Vector Squares", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} +BENCHMARK_PHASES = { + "b1": ["square", "reduce"], + "b6": ["rr_1", "rr_2", "rr_3", "nb_1", "nb_2", "nb_3", "nb_4", "softmax", "argmax"], + "b7": [y for x in [[f"spmv_a_{i}", f"spmv_h_{i}", f"sum_a_{i}", f"sum_h_{i}", f"divide_a_{i}", f"divide_h_{i}", f"norm_reset_{i}"] for i in range(B7_ITER)] for y in x], + "b8": ["blur_small", "blur_large", "blur_unsharpen", "sobel_small", "sobel_large", "maximum", "minimum", "extend", "unsharpen", "combine", "combine_2"], + } + +############################## +############################## + +def theoretical_speed(input_data, group_columns, benchmark): + data = input_data.copy() + + # Only relevant for "sync" policy; + data["theoretical_time_sec"] = THEORETICAL_SPEED_FUNCTIONS[benchmark](data) + + for key, group in data.groupby(group_columns): + # Get the median theoretical time; + median_theoretical_time = np.mean(group[group["exec_policy"] == "sync"]["theoretical_time_sec"]) + data.loc[group.index, "speedup_wrt_theoretical"] = median_theoretical_time / group["computation_sec"] + return data + +def theoretical_speed_b1(data): + return data["square"] / 2 + data["reduce"] + +def theoretical_speed_b6(data): + return np.maximum(data["rr_1"] + data["rr_2"] + data["rr_3"], data["nb_1"] + data["nb_2"] + data["nb_3"] + data["nb_4"]) + data["softmax"] / 2 + data["argmax"] + +def theoretical_speed_b7(data): + total = np.zeros(len(data)) + for i in range(B7_ITER): + total += data[f"norm_reset_{i}"] + np.maximum(data[f"divide_a_{i}"] + np.maximum(data[f"spmv_a_{i}"] + data[f"sum_a_{i}"], data[f"spmv_h_{i}"]), + data[f"divide_h_{i}"] + np.maximum(data[f"spmv_h_{i}"] + data[f"sum_h_{i}"], data[f"spmv_a_{i}"])) + return total + +def theoretical_speed_b8(data): + extend = np.maximum(data["maximum"], data["minimum"]) + data["extend"] + combine = data["combine"] + np.maximum(data["blur_unsharpen"] + data["unsharpen"], data["blur_large"] + data["sobel_large"] + extend) + return data["combine_2"] + np.maximum(data["blur_small"] + data["sobel_small"], combine) + +THEORETICAL_SPEED_FUNCTIONS = { + "b1": theoretical_speed_b1, + "b6": theoretical_speed_b6, + "b7": theoretical_speed_b7, + "b8": theoretical_speed_b8, + } + +############################## +############################## + +def build_theoretical_time_plot(data, gridspec, x, y): + + palette = [COLORS["peach1"], COLORS["bb1"]] + markers = ["o"] * len(palette) + + data["size_str"] = data["size"].astype(str) + + # Add a lineplot with the exec times; + ax = fig.add_subplot(gridspec[x, y]) + ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) + + ax = sns.lineplot(x="size_str", y="speedup_wrt_theoretical", hue="exec_policy", data=data, palette=palette, ax=ax, estimator=gmean, + err_style="bars", linewidth=2, legend=None, ci=None, sort=False, zorder=2) + + labels = sorted(data["size"].unique()) + labels_str = [str(x) for x in labels] + + # Add rectangles to represent variance; + for p_i, p in enumerate(sorted(data["exec_policy"].unique())): + rectangles = [] + for s_i, s in enumerate(labels): + curr_data = data[(data["size"] == s) & (data["exec_policy"] == p)] + upper_ci_size, lower_ci_size, center = get_ci_size(curr_data["speedup_wrt_theoretical"], estimator=gmean, ci=0.90) + bottom = center - lower_ci_size + width = 0.1 + lower_left = [s_i - width / 2, bottom] + # Add an offset to the x position, to avoid overlapping; + lower_left[0] += (2 * p_i - 1) * (width / 3.5) + rectangles += [Rectangle(lower_left, width, upper_ci_size + lower_ci_size)] + + pc = PatchCollection(rectangles, facecolor=palette[p_i], edgecolor="#2f2f2f", linewidth=0.5, zorder=3, clip_on=True, alpha=0.7) + ax.add_collection(pc) + + # Set the same y limits in each plot; + ax.set_ylim((0, 3)) + + # Add a horizontal line to denote speedup = 1x; + ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + + # Set the x ticks; + ax.set_xticks(labels_str) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=45, ha="right", fontsize=9, rotation_mode="anchor") + ax.tick_params(labelcolor="black") + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(7)) + if y == 0: + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=9) + else: + ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # Hide tick markers; + for tic in ax.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + ax.set_ylabel(None) + ax.set_xlabel(None) + + # Add benchmark name and baseline execution time annotations; + ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.1), fontsize=14, ha="center", xycoords="axes fraction") + ax.annotate(f"Min. theoretical time (ms):", xy=(0, -0.37), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + + for i, l in enumerate(labels): + baseline_median = np.median(data[(data["exec_policy"] == "sync") & (data["size"] == int(l))]["theoretical_time_sec"]) + ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.47), fontsize=9, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + + # Add block size annotation; + if y == 0: + ax.annotate(f"Block size:\n1D={data['block_size_1d'].iloc[0]}, 2D={data['block_size_2d'].iloc[0]}x{data['block_size_2d'].iloc[0]}", xy=(-0.65, 1.25), fontsize=14, ha="left", xycoords="axes fraction") + + # Turn off tick lines; + ax.xaxis.grid(False) + + # Legend; + if y == 0 and x == 0: + legend_labels = ["DAG Scheduling", "Serial Scheduling"] + custom_lines = [ + lines.Line2D([], [], color="white", marker=markers[i], markersize=10, label=legend_labels[i], markerfacecolor=palette[i], markeredgecolor="#2f2f2f") + for i in range(len(legend_labels))] + + leg = fig.legend(custom_lines, legend_labels, + bbox_to_anchor=(0.91, 0.98), fontsize=12, ncol=1, handletextpad=0.1) + leg.set_title(None) + leg._legend_box.align = "left" + + + return ax + + +def build_theoretical_time_plot_compact(data, gridspec, x, y): + + data["size_str"] = data["size"].astype(str) + + legend_labels = ["DAG Scheduling", "Serial Scheduling"] + + palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"], COLORS["b4"]][:len(data["block_size_str"].unique())] + markers = ["o", "X", "D", "P"][:len(data["block_size_str"].unique())] + + # Add a lineplot with the exec times; + ax = fig.add_subplot(gridspec[x, y]) + ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) + + ax = sns.lineplot(x="size_str", y="speedup_wrt_theoretical", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, + err_style="bars", linewidth=2, legend=None, sort=False, ci=None, zorder=2) + data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["speedup_wrt_theoretical"].apply(gmean).reset_index() + order = data["block_size_str"].unique() + ax = sns.scatterplot(x="size_str", y="speedup_wrt_theoretical", hue="block_size_str", data=data_averaged, palette=palette, ax=ax, edgecolor="#0f0f0f", + size_norm=30, legend=False, zorder=3, ci=None, markers=markers, style="block_size_str", hue_order=order, style_order=order, linewidth=0.05) + + labels = sorted(data["size"].unique()) + labels_str = [str(x) for x in labels] + + # Set the same y limits in each plot; + ax.set_ylim((0, 3)) + + # Add a horizontal line to denote speedup = 1x; + ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + + # Set the x ticks; + ax.set_xticks(labels_str) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) + ax.tick_params(labelcolor="black") + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(7)) + if y == 0: + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=9) + else: + ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # Hide tick markers; + for tic in ax.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + # Add policy annotation; + if y == 0: + ax.annotate(f"{legend_labels[x]}", xy=(-0.15, 1.25), fontsize=14, ha="left", xycoords="axes fraction") + + ax.set_ylabel(None) + ax.set_xlabel(None) + + # Add benchmark name and baseline execution time annotations; + ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.1), fontsize=14, ha="center", xycoords="axes fraction") + + # Turn off tick lines; + ax.xaxis.grid(False) + + # Legend; + if x == 0 and y == 0: + legend_labels = [f"1D={x.split(',')[0]}, 2D={x.split(',')[1]}" for x in data["block_size_str"].unique()] + custom_lines = [ + lines.Line2D([], [], color="white", marker=markers[i], markersize=10, label=legend_labels[i], markerfacecolor=palette[i], markeredgecolor="#2f2f2f") + for i in range(len(legend_labels))] + + leg = fig.legend(custom_lines, legend_labels, + bbox_to_anchor=(0.95, 1), fontsize=12, ncol=len(legend_labels) // 2, handletextpad=0.1) + leg.set_title("Block size:") + leg._legend_box.align = "left" + + return ax + +############################## +############################## + +#%% + +if __name__ == "__main__": + + # Columns that uniquely identify each benchmark setup; + index_columns = ["benchmark", "exec_policy", + # "new_stream_policy", "parent_stream_policy", "dependency_policy", + "block_size_1d", "block_size_2d", + # "total_iterations", "cpu_validation", "random_init", + "size", + # "realloc", "reinit" + ] + + processed_data = [] + processed_data_summary = [] + for b in BENCHMARK_PHASES.keys(): + data = load_data(INPUT_DATE_GRCUDA, skip_iter=3, benchmark=b, phases=BENCHMARK_PHASES[b]) + tmp_cols = index_columns.copy() + tmp_cols.remove("exec_policy") + data = theoretical_speed(data, tmp_cols, b) + data_summary = data.groupby(index_columns)[["computation_speedup", "speedup_wrt_theoretical"]].aggregate(gmean).reset_index() + processed_data += [data[list(data.columns[:18]) + list(data.columns[-4:])]] + processed_data_summary += [data_summary] + + data = pd.concat(processed_data).reset_index(drop=True) + + #%% + + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams['axes.titlepad'] = 20 + plt.rcParams['axes.labelpad'] = 10 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + + # Lists of benchmarks and block sizes; + benchmark_list = sorted(data["benchmark"].unique()) + block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) + num_col = len(benchmark_list) + num_row = len(block_size_list) + fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) + gs = gridspec.GridSpec(num_row, num_col) + plt.subplots_adjust(top=0.85, + bottom=0.15, + left=0.2, + right=0.90, + hspace=1.2, + wspace=0.15) + + exec_time_axes = [] + for b_i, b in enumerate(benchmark_list): + for block_size_i, block_size in enumerate(block_size_list): + curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) + exec_time_axes += [build_theoretical_time_plot(curr_res, gs, block_size_i, b_i)] + + plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") + plt.annotate("Speedup", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Speedup w.r.t\nminimum theoretical time", fontsize=25, x=.05, y=0.99, ha="left") + + save_plot(PLOT_DIR, "speedup_theoretical_time_{}.{}", OUTPUT_DATE) + + + #%% Similar plot, but all block sizes are on 1 row; + + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams['axes.titlepad'] = 20 + plt.rcParams['axes.labelpad'] = 10 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + + # Lists of benchmarks and block sizes; + benchmark_list = sorted(data["benchmark"].unique()) + policy_list = sorted(data["exec_policy"].unique()) + num_col = len(benchmark_list) + num_row = len(policy_list) + fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) + gs = gridspec.GridSpec(num_row, num_col) + plt.subplots_adjust(top=0.75, + bottom=0.1, + left=0.12, + right=0.95, + hspace=0.7, + wspace=0.15) + + exec_time_axes = [] + for b_i, b in enumerate(benchmark_list): + for p_i, p in enumerate(policy_list): + curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) + exec_time_axes += [build_theoretical_time_plot_compact(curr_res, gs, p_i, b_i)] + + plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") + plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Speedup w.r.t\nminimum theoretical time", fontsize=25, x=.05, y=0.99, ha="left") + + save_plot(PLOT_DIR, "speedup_theoretical_time_compact_{}.{}", OUTPUT_DATE) \ No newline at end of file From ea04b61eb33d9759dd1a540233ad8003a25942e9 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 2 Jul 2020 10:20:07 +0200 Subject: [PATCH 110/236] adding bs benchmark --- projects/resources/cuda/b5_default.cu | 131 +++++++--- projects/resources/cuda/b5_sync.cu | 99 +++++-- .../python/benchmark/bench/bench_4.py | 1 - .../python/benchmark/bench/bench_5.py | 246 +++++++++--------- .../resources/python/benchmark/benchmark.py | 4 +- .../python/benchmark/benchmark_wrapper.py | 10 +- .../python/plotting/plot_speedup_baseline.py | 6 +- 7 files changed, 305 insertions(+), 192 deletions(-) diff --git a/projects/resources/cuda/b5_default.cu b/projects/resources/cuda/b5_default.cu index e571a176..e0c0fb43 100644 --- a/projects/resources/cuda/b5_default.cu +++ b/projects/resources/cuda/b5_default.cu @@ -15,25 +15,75 @@ using clock_type = chrono::high_resolution_clock; ///////////////////////////// ///////////////////////////// -extern "C" __global__ void sum(int* x, int n) { - for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { - x[i] += 1; +float R = 0.08; +float V = 0.3; +float T = 1.0; +float K = 60.0; + +__device__ inline float cndGPU(float d) +{ + const float A1 = 0.31938153f; + const float A2 = -0.356563782f; + const float A3 = 1.781477937f; + const float A4 = -1.821255978f; + const float A5 = 1.330274429f; + const float RSQRT2PI = 0.39894228040143267793994605993438f; + + float + K = __fdividef(1.0f, (1.0f + 0.2316419f * fabsf(d))); + + float + cnd = RSQRT2PI * __expf(- 0.5f * d * d) * + (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); + + if (d > 0) + cnd = 1.0f - cnd; + + return cnd; +} + +extern "C" __global__ void bs(float *x, float *y, int N, float R, float V, float T, float K) { + + float sqrtT = __fdividef(1.0F, rsqrtf(T)); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + float expRT; + float d1, d2, CNDD1, CNDD2; + d1 = __fdividef(__logf(x[i] / K) + (R + 0.5f * V * V) * T, V * sqrtT); + d2 = d1 - V * sqrtT; + + CNDD1 = cndGPU(d1); + CNDD2 = cndGPU(d2); + + //Calculate Call and Put simultaneously + expRT = __expf(-R * T); + y[i] = x[i] * CNDD1 - K * expRT * CNDD2; } } ///////////////////////////// ///////////////////////////// -void init(int **x, int N, int K) { +void init(float **x, float **y, float* tmp_x, int N, int K) { + for (int j = 0; j < N; j++) { + tmp_x[j] = 60 - 0.5 + (float) rand() / RAND_MAX; + for (int i = 0; i < K; i++) { + x[i][j] = tmp_x[j]; + y[i][j] = 0; + } + } +} + +void reset(float **x, float* y, int N, int K, cudaStream_t *s) { for (int i = 0; i < K; i++) { + // memcpy(x[i], y, sizeof(int) * N); + // cudaMemcpy(x[i], y, sizeof(int) * N, cudaMemcpyDefault); + // cudaMemcpyAsync(x[i], y, sizeof(int) * N, cudaMemcpyHostToDevice, s[i]); for (int j = 0; j < N; j++) { - x[i][j] = rand() % 10; + x[i][j] = y[j]; } } } -void reset() { -} ///////////////////////////// ///////////////////////////// @@ -52,7 +102,7 @@ int main(int argc, char *argv[]) { int num_blocks = 64; int err = 0; - int K = num_executions; + int M = 10; if (debug) { std::cout << "running b5 default" << std::endl; @@ -62,22 +112,28 @@ int main(int argc, char *argv[]) { } auto start = clock_type::now(); - int **x; - x = (int **) malloc(sizeof(int*) * K); - for (int i = 0; i < K; i++) { - cudaMallocManaged(&x[i], sizeof(int) * N); + float **x = (float **) malloc(sizeof(float*) * M); + float **y = (float **) malloc(sizeof(float*) * M); + float *tmp_x = (float *) malloc(sizeof(float) * N); + // cudaHostRegister(tmp_x, sizeof(float) * N, 0); + + for (int i = 0; i < M; i++) { + cudaMallocManaged(&x[i], sizeof(float) * N); + cudaMallocManaged(&y[i], sizeof(float) * N); } if (debug && err) std::cout << err << std::endl; - + // Create streams; - cudaStream_t *s = (cudaStream_t *) malloc(sizeof(cudaStream_t) * K); - for (int i = 0; i < K; i++) { + cudaStream_t *s = (cudaStream_t *) malloc(sizeof(cudaStream_t) * M); + for (int i = 0; i < M; i++) { err = cudaStreamCreate(&s[i]); } if (debug && err) std::cout << err << std::endl; // Initialze arrays; - init(x, N, K); + init(x, y, tmp_x, N, M); + + if (debug) std::cout << "x[0][0]=" << tmp_x[0] << std::endl; auto end = clock_type::now(); if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; @@ -85,43 +141,44 @@ int main(int argc, char *argv[]) { // Print header; if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; - start = clock_type::now(); + float tot = 0; for (int i = 0; i < num_executions; i++) { if (debug) std::cout << "\n-- iter=" << i << std::endl; auto start_tmp = clock_type::now(); + reset(x, tmp_x, N, M, s); auto end_tmp = clock_type::now(); - auto reset_time = 0; + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; start = clock_type::now(); - sum<<>>(x[i], N); + for (int j = 0; j < M; j++) { + bs<<>>(x[j], y[j], N, R, V, T, K); + } + + for (int j = 0; j < M; j++) { + err = cudaStreamSynchronize(s[j]); + } if (debug && err) std::cout << err << std::endl; end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - } - - for (int i = 0; i < K; i++) { - err = cudaStreamSynchronize(s[i]); - } - end = clock_type::now(); - auto time_tot = chrono::duration_cast(end - start).count(); - if (debug && err) std::cout << err << std::endl; - - if (debug) { - std::cout << " gpu result=["; - for (int j = 0; j < K; j++) { - std::cout << x[j][0] << ", "; - } - std::cout << ", ...]; time=" << (float) time_tot / 1000 << " ms" << std::endl; - } else { - std::cout << 0 << "," << x[0][0] << "," << (float) time_tot / 1e6 << "," << 0 << "," << (float) time_tot / 1e6 << std::endl; + tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < M; j++) { + std::cout << y[j][0] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << y[0][0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } } // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) time_tot << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b5_sync.cu b/projects/resources/cuda/b5_sync.cu index f4101fc0..68d56f9e 100644 --- a/projects/resources/cuda/b5_sync.cu +++ b/projects/resources/cuda/b5_sync.cu @@ -15,26 +15,74 @@ using clock_type = chrono::high_resolution_clock; ///////////////////////////// ///////////////////////////// -extern "C" __global__ void sum(int* x, int n) { - for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { - x[i] += 1; +float R = 0.08; +float V = 0.3; +float T = 1.0; +float K = 60.0; + +__device__ inline float cndGPU(float d) +{ + const float A1 = 0.31938153f; + const float A2 = -0.356563782f; + const float A3 = 1.781477937f; + const float A4 = -1.821255978f; + const float A5 = 1.330274429f; + const float RSQRT2PI = 0.39894228040143267793994605993438f; + + float + K = __fdividef(1.0f, (1.0f + 0.2316419f * fabsf(d))); + + float + cnd = RSQRT2PI * __expf(- 0.5f * d * d) * + (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); + + if (d > 0) + cnd = 1.0f - cnd; + + return cnd; +} + +extern "C" __global__ void bs(float *x, float *y, int N, float R, float V, float T, float K) { + + float sqrtT = __fdividef(1.0F, rsqrtf(T)); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + float expRT; + float d1, d2, CNDD1, CNDD2; + d1 = __fdividef(__logf(x[i] / K) + (R + 0.5f * V * V) * T, V * sqrtT); + d2 = d1 - V * sqrtT; + + CNDD1 = cndGPU(d1); + CNDD2 = cndGPU(d2); + + //Calculate Call and Put simultaneously + expRT = __expf(-R * T); + y[i] = x[i] * CNDD1 - K * expRT * CNDD2; } } ///////////////////////////// ///////////////////////////// -void init(int **x, int N, int K) { - for (int i = 0; i < K; i++) { - for (int j = 0; j < N; j++) { - x[i][j] = rand() % 10; +void init(float **x, float **y, float* tmp_x, int N, int K) { + for (int j = 0; j < N; j++) { + tmp_x[j] = 60 - 0.5 + (float) rand() / RAND_MAX; + for (int i = 0; i < K; i++) { + x[i][j] = tmp_x[j]; + y[i][j] = 0; } } } -void reset() { +void reset(float **x, float* y, int N, int K) { + for (int i = 0; i < K; i++) { + // memcpy(x[i], y, sizeof(int) * N); + // cudaMemcpy(x[i], y, sizeof(int) * N, cudaMemcpyDefault); + // cudaMemcpyAsync(x[i], y, sizeof(int) * N, cudaMemcpyHostToDevice, s[i]); + for (int j = 0; j < N; j++) { + x[i][j] = y[j]; + } + } } - ///////////////////////////// ///////////////////////////// @@ -52,7 +100,7 @@ int main(int argc, char *argv[]) { int num_blocks = 64; int err = 0; - int K = num_executions; + int M = 10; if (debug) { std::cout << "running b5 sync" << std::endl; @@ -62,15 +110,21 @@ int main(int argc, char *argv[]) { } auto start = clock_type::now(); - int **x; - x = (int **) malloc(sizeof(int*) * K); - for (int i = 0; i < K; i++) { - cudaMallocManaged(&x[i], sizeof(int) * N); + float **x = (float **) malloc(sizeof(float*) * M); + float **y = (float **) malloc(sizeof(float*) * M); + float *tmp_x = (float *) malloc(sizeof(float) * N); + // cudaHostRegister(tmp_x, sizeof(float) * N, 0); + + for (int i = 0; i < M; i++) { + cudaMallocManaged(&x[i], sizeof(float) * N); + cudaMallocManaged(&y[i], sizeof(float) * N); } if (debug && err) std::cout << err << std::endl; // Initialze arrays; - init(x, N, K); + init(x, y, tmp_x, N, M); + + if (debug) std::cout << "x[0][0]=" << tmp_x[0] << std::endl; auto end = clock_type::now(); if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; @@ -82,15 +136,16 @@ int main(int argc, char *argv[]) { for (int i = 0; i < num_executions; i++) { if (debug) std::cout << "\n-- iter=" << i << std::endl; auto start_tmp = clock_type::now(); - reset(); + reset(x, tmp_x, N, M); auto end_tmp = clock_type::now(); auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; start = clock_type::now(); - - sum<<>>(x[i], N); - err = cudaDeviceSynchronize(); + for (int j = 0; j < M; j++) { + bs<<>>(x[j], y[j], N, R, V, T, K); + err = cudaDeviceSynchronize(); + } if (debug && err) std::cout << err << std::endl; @@ -100,12 +155,12 @@ int main(int argc, char *argv[]) { if (debug) { std::cout << " gpu result=["; - for (int j = 0; j < K; j++) { - std::cout << x[j][0] << ", "; + for (int j = 0; j < M; j++) { + std::cout << y[j][0] << ", "; } std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; } else { - std::cout << i << "," << x[0][0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + std::cout << i << "," << y[0][0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; } } diff --git a/projects/resources/python/benchmark/bench/bench_4.py b/projects/resources/python/benchmark/bench/bench_4.py index 4bb0d98e..87d3335a 100644 --- a/projects/resources/python/benchmark/bench/bench_4.py +++ b/projects/resources/python/benchmark/bench/bench_4.py @@ -67,7 +67,6 @@ def execute(self) -> object: # A. B. Call the kernels. The 2 computations are independent, and can be done in parallel; start = System.nanoTime() - s = System.nanoTime() self.sum_kernel(self.num_blocks, self.block_size)(self.x, self.size) end = System.nanoTime() self.benchmark.add_phase({"name": "sum_1", "time_sec": (end - start) / 1_000_000_000}) diff --git a/projects/resources/python/benchmark/bench/bench_5.py b/projects/resources/python/benchmark/bench/bench_5.py index bd24fc35..0aa8d4a1 100644 --- a/projects/resources/python/benchmark/bench/bench_5.py +++ b/projects/resources/python/benchmark/bench/bench_5.py @@ -4,55 +4,59 @@ import numpy as np from random import random, randint, seed -from benchmark import Benchmark, time_phase +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D from benchmark_result import BenchmarkResult +from java.lang import System +import math ############################## ############################## -NUM_THREADS_PER_BLOCK = 128 +R = 0.08 +V = 0.3 +T = 1.0 +K = 60.0 -SQUARE_KERNEL = """ - extern "C" __global__ void square(const float* x, float* y, int n) { - int idx = blockIdx.x * blockDim.x + threadIdx.x; - if (idx < n) { - y[idx] = x[idx] * x[idx]; - } - } - """ +BS_KERNEL = """ +__device__ inline float cndGPU(float d) { + const float A1 = 0.31938153f; + const float A2 = -0.356563782f; + const float A3 = 1.781477937f; + const float A4 = -1.821255978f; + const float A5 = 1.330274429f; + const float RSQRT2PI = 0.39894228040143267793994605993438f; -COMPUTE_KERNEL = """ - extern "C" __global__ void compute(const float* x, float *y, int n) { - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n) { - y[i] = logf(1.0 + cosf(x[i]) * cosf(x[i]) + sinf(x[i]) * sinf(x[i])); - } - } - """ + float + K = __fdividef(1.0f, (1.0f + 0.2316419f * fabsf(d))); + + float + cnd = RSQRT2PI * __expf(- 0.5f * d * d) * + (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); + + if (d > 0) + cnd = 1.0f - cnd; -REDUCE_KERNEL = """ - extern "C" __global__ void reduce(const float *x, const float *y, float *res, int n) { - __shared__ float cache[%d]; - int i = blockIdx.x * blockDim.x + threadIdx.x; - if (i < n) { - cache[threadIdx.x] = x[i] + y[i]; - } - __syncthreads(); - - // Perform tree reduction; - i = %d / 2; - while (i > 0) { - if (threadIdx.x < i) { - cache[threadIdx.x] += cache[threadIdx.x + i]; - } - __syncthreads(); - i /= 2; - } - if (threadIdx.x == 0) { - atomicAdd(res, cache[0]); - } + return cnd; +} + +extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, float T, float K) { + + float sqrtT = __fdividef(1.0F, rsqrtf(T)); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + float expRT; + float d1, d2, CNDD1, CNDD2; + d1 = __fdividef(__logf(x[i] / K) + (R + 0.5f * V * V) * T, V * sqrtT); + d2 = d1 - V * sqrtT; + + CNDD1 = cndGPU(d1); + CNDD2 = cndGPU(d2); + + //Calculate Call and Put simultaneously + expRT = __expf(-R * T); + y[i] = x[i] * CNDD1 - K * expRT * CNDD2; } - """ % (NUM_THREADS_PER_BLOCK, NUM_THREADS_PER_BLOCK) +} +""" ############################## ############################## @@ -60,49 +64,37 @@ class Benchmark5(Benchmark): """ - Compute a complex pipeline of kernels, doing mock computations, and using read-only arguments; - ┌─> B(const Y, R1) ───────────────────┐ - A: (const X, Y) ─┤ ├─> E(const R1, const R2, R) - └─> C(const Y, Z) ─> D(const Z, R2) ──┘ + Black & Scholes equation benchmark, executed concurrently on different input vectors; """ def __init__(self, benchmark: BenchmarkResult): super().__init__("b5", benchmark) self.size = 0 - self.x = None - self.y = None - self.z = None - self.r1 = None - self.r2 = None - self.r = None - self.num_blocks = 0 - self.kernel_a = None - self.kernel_b = None - self.kernel_c = None - self.kernel_d = None - self.kernel_e = None - self.cpu_result = None + + self.num_blocks = 64 + self.sum_kernel = None + self.cpu_result = 0 + self.block_size = DEFAULT_BLOCK_SIZE_1D + + self.K = 10 + self.x = [[]] * self.K + self.x_tmp = None + self.y = [[]] * self.K @time_phase("allocation") def alloc(self, size: int, block_size: dict = None) -> None: self.size = size - self.num_blocks = (size + NUM_THREADS_PER_BLOCK - 1) // NUM_THREADS_PER_BLOCK + self.block_size = block_size["block_size_1d"] + self.x_tmp = [0] * self.size # Allocate vectors; - self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") - self.y = polyglot.eval(language="grcuda", string=f"float[{size}]") - self.z = polyglot.eval(language="grcuda", string=f"float[{size}]") - self.r1 = polyglot.eval(language="grcuda", string=f"float[{size}]") - self.r2 = polyglot.eval(language="grcuda", string=f"float[{size}]") - self.r = polyglot.eval(language="grcuda", string=f"float[1]") + for i in range(self.K): + self.x[i] = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.y[i] = polyglot.eval(language="grcuda", string=f"float[{size}]") # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") - self.kernel_a = build_kernel(SQUARE_KERNEL, "square", "const pointer, pointer, sint32") - self.kernel_b = build_kernel(COMPUTE_KERNEL, "compute", "const pointer, pointer, sint32") - self.kernel_c = build_kernel(SQUARE_KERNEL, "square", "const pointer, pointer, sint32") - self.kernel_d = build_kernel(COMPUTE_KERNEL, "compute", "const pointer, pointer, sint32") - self.kernel_e = build_kernel(REDUCE_KERNEL, "reduce", "const pointer, const pointer, pointer, sint32") + self.bs_kernel = build_kernel(BS_KERNEL, "bs", "const pointer, pointer, sint32, float, float, float, float") @time_phase("initialization") def init(self): @@ -110,70 +102,76 @@ def init(self): seed(self.random_seed) for i in range(self.size): if self.benchmark.random_init: - self.x[i] = random() + self.x_tmp[i] = random() + K - 0.5 else: - self.x[i] = 1 / (i + 1) + self.x_tmp[i] = K + + @time_phase("reset_result") + def reset_result(self) -> None: + for i in range(self.K): + for j in range(self.size): + self.x[i][j] = self.x_tmp[j] def execute(self) -> object: - # This must be reset at every execution; - self.r[0] = 0 - - # A. - start = time.time() - self.kernel_a(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.x, self.y, self.size) - end = time.time() - self.benchmark.add_phase({"name": "kernel_a", "time_sec": end - start}) - - # B. - start = time.time() - self.kernel_b(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.r1, self.size) - end = time.time() - self.benchmark.add_phase({"name": "kernel_b", "time_sec": end - start}) - - # C, D. - start = time.time() - self.kernel_c(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.y, self.z, self.size) - self.kernel_d(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.z, self.r2, self.size) - end = time.time() - self.benchmark.add_phase({"name": "kernel_c_d", "time_sec": end - start}) - - # E. - start = time.time() - self.kernel_e(self.num_blocks, NUM_THREADS_PER_BLOCK)(self.r1, self.r2, self.r, self.size) - end = time.time() - self.benchmark.add_phase({"name": "kernel_e", "time_sec": end - start}) - - # Read the result; - start = time.time() - result = self.r[0] - end = time.time() - self.benchmark.add_phase({"name": "read_result", "time_sec": end - start}) - - self.benchmark.add_to_benchmark("gpu_result", result) + + result = [] + + # Call the kernels. + for i in range(self.K): + start = System.nanoTime() + self.bs_kernel(self.num_blocks, self.block_size)(self.x[i], self.y[i], self.size, R, V, T, K) + end = System.nanoTime() + self.benchmark.add_phase({"name": f"bs_{i}", "time_sec": (end - start) / 1_000_000_000}) + + start = System.nanoTime() + for i in range(self.K): + result += [self.y[i][0]] + end = System.nanoTime() + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + + self.benchmark.add_to_benchmark("gpu_result", result[0]) if self.benchmark.debug: - BenchmarkResult.log_message(f"\tgpu result: {result:.4f}") + BenchmarkResult.log_message(f"\tgpu result: {result[0]}") - return result + return result[0] def cpu_validation(self, gpu_result: object, reinit: bool) -> None: - # Recompute the CPU result only if necessary; - start = time.time() - if self.current_iter == 0 or reinit: - # Re-initialize the random number generator with the same seed as the GPU to generate the same values; - seed(self.random_seed) - if self.benchmark.random_init: - x_g = np.zeros(self.size) - for i in range(self.size): - x_g[i] = random() - else: - x_g = 1 / np.linspace(1, self.size, self.size) - x_g = x_g**2 - r1 = np.log(1 + np.sin(x_g)**2 + np.cos(x_g)**2) - r2 = np.log(1 + np.sin(x_g**2) ** 2 + np.cos(x_g**2) ** 2) - self.cpu_result = np.sum(r1 + r2) + def CND(X): + """ + Cumulative normal distribution. + Helper function used by BS(...). + """ + + (a1, a2, a3, a4, a5) = (0.31938153, -0.356563782, 1.781477937, -1.821255978, 1.330274429) + L = np.absolute(X) + K = np.float64(1.0) / (1.0 + 0.2316419 * L) + w = 1.0 - 1.0 / math.sqrt(2 * np.pi) * np.exp(-L * L / 2.) * \ + (a1 * K + + a2 * (K ** 2) + + a3 * (K ** 3) + + a4 * (K ** 4) + + a5 * (K ** 5)) + + mask = X < 0 + w = w * ~mask + (1.0 - w) * mask + + return w + + def BS(X, R, V, T, K): + """Black Scholes Function.""" + d1_arr = (np.log(X / K) + (R + V * V / 2.) * T) / (V * math.sqrt(T)) + d2_arr = d1_arr - V * math.sqrt(T) + w_arr = CND(d1_arr) + w2_arr = CND(d2_arr) + return X * w_arr - X * math.exp(-R * T) * w2_arr - cpu_time = time.time() - start + # Recompute the CPU result only if necessary; + start = System.nanoTime() + if self.current_iter == 0 or reinit: + res = BS(np.array(self.x_tmp), R, V, T, K) + self.cpu_result = res[0] + cpu_time = System.nanoTime() - start difference = np.abs(self.cpu_result - gpu_result) self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) self.benchmark.add_to_benchmark("cpu_gpu_res_difference", difference) diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py index 6da5dcbe..21ee730f 100644 --- a/projects/resources/python/benchmark/benchmark.py +++ b/projects/resources/python/benchmark/benchmark.py @@ -6,6 +6,7 @@ DEFAULT_BLOCK_SIZE_1D = 32 DEFAULT_BLOCK_SIZE_2D = 8 + def time_phase(phase_name: str) -> Callable: """ Decorator that simplifies timing a function call and storing the result in the benchmark log; @@ -32,6 +33,7 @@ def __init__(self, name: str, benchmark: BenchmarkResult): self.name = name self.benchmark = benchmark self.tot_iter = 0 + self.current_iter = 0 self.random_seed = 42 # Default random seed, it will be overwritten with a random one; self.block_size_1d = DEFAULT_BLOCK_SIZE_1D self.block_size_2d = DEFAULT_BLOCK_SIZE_2D @@ -92,7 +94,7 @@ def run(self, num_iter: int, policy: str, size: int, realloc: bool, reinit: bool reinit=reinit, block_size=block_size, iteration=num_iter) - + self.current_iter = num_iter # TODO: set the execution policy; # Start a timer to monitor the total GPU execution time; diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 76ef2817..76594b14 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -12,16 +12,18 @@ # Benchmark settings; benchmarks = [ - "b1", + # "b1", # "b4", - "b6", - "b7", - "b8", + "b5", + # "b6", + # "b7", + # "b8", ] num_elem = { "b1": [2000000, 5000000, 10000000, 20000000, 40000000], "b4": [2000000, 5000000, 10000000, 20000000, 40000000], + "b5": [2000000, 5000000, 10000000, 15000000, 20000000], "b6": [20000, 50000, 200000, 500000, 800000], "b7": [50000, 100000, 150000, 200000, 250000], "b8": [800, 1600, 2400, 4000, 4800], diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 3d179381..67aa7369 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,11 +21,11 @@ from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot -INPUT_DATE = "2020_06_30_18_20_02_grcuda" -OUTPUT_DATE = "2020_07_01" +INPUT_DATE = "2020_07_01_20_19_24_grcuda" +OUTPUT_DATE = "2020_07_02" PLOT_DIR = "../../../../data/plots" -BENCHMARK_NAMES = {"b1": "Vector Squares", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} +BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} def build_exec_time_plot(data, gridspec, x, y): From 22385bebe57a8b19eeda233a1e92e02001a75b02 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 2 Jul 2020 16:57:25 +0200 Subject: [PATCH 111/236] fixed memcpy not working correctly with arrays with stream-restricted visibility --- .../com/nvidia/grcuda/gpu/CUDARuntime.java | 34 +++++++++++++++++++ .../ArrayReadWriteFunctionExecution.java | 15 ++++++-- projects/resources/cuda/b5_default.cu | 8 ++--- projects/resources/cuda/b5_sync.cu | 8 ++--- .../python/benchmark/bench/bench_5.py | 29 +++++++++++----- .../plotting/plot_speedup_grcuda_cuda.py | 8 ++--- .../plotting/plot_theoretical_performance.py | 12 +++++-- 7 files changed, 87 insertions(+), 27 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 4cf2ae23..4934dfff 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -236,6 +236,24 @@ public void cudaMemcpy(long destPointer, long fromPointer, long numBytesToCopy) } } + @TruffleBoundary + public void cudaMemcpy(long destPointer, long fromPointer, long numBytesToCopy, CUDAStream stream) { + try { + Object callable = CUDARuntimeFunction.CUDA_MEMCPYASYNC.getSymbol(this); + if (numBytesToCopy < 0) { + throw new IllegalArgumentException("requested negative number of bytes to copy " + numBytesToCopy); + } + // cudaMemcpyKind from driver_types.h (default: direction of transfer is inferred + // from the pointer values, uses virtual addressing) + final long cudaMemcpyDefault = 4; + Object result = INTEROP.execute(callable, destPointer, fromPointer, numBytesToCopy, cudaMemcpyDefault, stream.getRawPointer()); + cudaStreamSynchronize(stream); + checkCUDAReturnCode(result, "cudaMemcpyAsync"); + } catch (InteropException e) { + throw new GrCUDAException(e); + } + } + @TruffleBoundary public DeviceMemoryInfo cudaMemGetInfo() { final String symbol = "cudaMemGetInfo"; @@ -683,6 +701,22 @@ public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException return NoneValue.get(); } }, + CUDA_MEMCPYASYNC("cudaMemcpyAsync", "(pointer, pointer, uint64, sint32, pointer): sint32") { + @Override + @TruffleBoundary + public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, UnsupportedTypeException, InteropException { + checkArgumentLength(args, 3); + long destPointer = expectLong(args[0]); + long fromPointer = expectLong(args[1]); + long numBytesToCopy = expectPositiveLong(args[2]); + long streamPointer = expectLong(args[3]); + // cudaMemcpyKind from driver_types.h (default: direction of transfer is + // inferred from the pointer values, uses virtual addressing) + final long cudaMemcpyDefault = 4; + callSymbol(cudaRuntime, destPointer, fromPointer, numBytesToCopy, cudaMemcpyDefault, streamPointer); + return NoneValue.get(); + } + }, CUDA_STREAMCREATE("cudaStreamCreate", "(pointer): sint32") { @Override @TruffleBoundary diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java index 6604f7a7..98e52b41 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java @@ -11,7 +11,6 @@ /** * Computational elements that represents a low-level memory copy from/to a {@link AbstractArray} - * @param the type of {@link AbstractArray} used in the copy */ public class ArrayReadWriteFunctionExecution extends GrCUDAComputationalElement { @@ -60,7 +59,12 @@ private void copyFrom() throws IndexOutOfBoundsException { CompilerDirectives.transferToInterpreter(); throw new IndexOutOfBoundsException(); } - grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(array.getPointer(), pointer, numBytesToCopy); + // If the array visibility is restricted to a stream, provide the stream to memcpy; + if (array.getStreamMapping().isDefaultStream()) { + grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(array.getPointer(), pointer, numBytesToCopy); + } else { + grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(array.getPointer(), pointer, numBytesToCopy, array.getStreamMapping()); + } } private void copyTo() throws IndexOutOfBoundsException { @@ -69,7 +73,12 @@ private void copyTo() throws IndexOutOfBoundsException { CompilerDirectives.transferToInterpreter(); throw new IndexOutOfBoundsException(); } - grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(pointer, array.getPointer(), numBytesToCopy); + // If the array visibility is restricted to a stream, provide the stream to memcpy; + if (array.getStreamMapping().isDefaultStream()) { + grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(pointer, array.getPointer(), numBytesToCopy); + } else { + grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(pointer, array.getPointer(), numBytesToCopy, array.getStreamMapping()); + } } @Override diff --git a/projects/resources/cuda/b5_default.cu b/projects/resources/cuda/b5_default.cu index e0c0fb43..fdd63909 100644 --- a/projects/resources/cuda/b5_default.cu +++ b/projects/resources/cuda/b5_default.cu @@ -76,11 +76,11 @@ void init(float **x, float **y, float* tmp_x, int N, int K) { void reset(float **x, float* y, int N, int K, cudaStream_t *s) { for (int i = 0; i < K; i++) { // memcpy(x[i], y, sizeof(int) * N); - // cudaMemcpy(x[i], y, sizeof(int) * N, cudaMemcpyDefault); + cudaMemcpy(x[i], y, sizeof(int) * N, cudaMemcpyDefault); // cudaMemcpyAsync(x[i], y, sizeof(int) * N, cudaMemcpyHostToDevice, s[i]); - for (int j = 0; j < N; j++) { - x[i][j] = y[j]; - } + // for (int j = 0; j < N; j++) { + // x[i][j] = y[j]; + // } } } diff --git a/projects/resources/cuda/b5_sync.cu b/projects/resources/cuda/b5_sync.cu index 68d56f9e..be03adec 100644 --- a/projects/resources/cuda/b5_sync.cu +++ b/projects/resources/cuda/b5_sync.cu @@ -76,11 +76,11 @@ void init(float **x, float **y, float* tmp_x, int N, int K) { void reset(float **x, float* y, int N, int K) { for (int i = 0; i < K; i++) { // memcpy(x[i], y, sizeof(int) * N); - // cudaMemcpy(x[i], y, sizeof(int) * N, cudaMemcpyDefault); + cudaMemcpy(x[i], y, sizeof(int) * N, cudaMemcpyDefault); // cudaMemcpyAsync(x[i], y, sizeof(int) * N, cudaMemcpyHostToDevice, s[i]); - for (int j = 0; j < N; j++) { - x[i][j] = y[j]; - } + // for (int j = 0; j < N; j++) { + // x[i][j] = y[j]; + // } } } ///////////////////////////// diff --git a/projects/resources/python/benchmark/bench/bench_5.py b/projects/resources/python/benchmark/bench/bench_5.py index 0aa8d4a1..fc2f0ee2 100644 --- a/projects/resources/python/benchmark/bench/bench_5.py +++ b/projects/resources/python/benchmark/bench/bench_5.py @@ -81,11 +81,14 @@ def __init__(self, benchmark: BenchmarkResult): self.x_tmp = None self.y = [[]] * self.K + self.bs_kernel = None + @time_phase("allocation") def alloc(self, size: int, block_size: dict = None) -> None: self.size = size self.block_size = block_size["block_size_1d"] - self.x_tmp = [0] * self.size + self.x_tmp = None + # self.x_tmp = [0] * self.size # Allocate vectors; for i in range(self.K): @@ -100,23 +103,30 @@ def alloc(self, size: int, block_size: dict = None) -> None: def init(self): self.random_seed = randint(0, 10000000) seed(self.random_seed) - for i in range(self.size): - if self.benchmark.random_init: - self.x_tmp[i] = random() + K - 0.5 - else: - self.x_tmp[i] = K + if self.benchmark.random_init: + self.x_tmp = np.random.uniform(-0.5, 0.5, self.size).astype(np.float32) + K + else: + self.x_tmp = np.zeros(self.size, dtype=np.float32) + K + + # for i in range(self.size): + # if self.benchmark.random_init: + # self.x_tmp[i] = random() + K - 0.5 + # else: + # self.x_tmp[i] = K @time_phase("reset_result") def reset_result(self) -> None: for i in range(self.K): - for j in range(self.size): - self.x[i][j] = self.x_tmp[j] + self.x[i].copyFrom(int(np.int64(self.x_tmp.ctypes.data)), self.size) + # for j in range(self.size): + # self.x[i][j] = self.x_tmp[j] def execute(self) -> object: result = [] - # Call the kernels. + # Call the kernels; + s = System.nanoTime() for i in range(self.K): start = System.nanoTime() self.bs_kernel(self.num_blocks, self.block_size)(self.x[i], self.y[i], self.size, R, V, T, K) @@ -127,6 +137,7 @@ def execute(self) -> object: for i in range(self.K): result += [self.y[i][0]] end = System.nanoTime() + print("TIMETIME= ", (end - s) / 1_000_000_000) self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) self.benchmark.add_to_benchmark("gpu_result", result[0]) diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index c1fc747d..a7369796 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -26,12 +26,12 @@ ############################## -INPUT_DATE_GRCUDA = "2020_06_30_18_20_02_grcuda" -INPUT_DATE_CUDA = "2020_06_22_14_37_09_cuda" -OUTPUT_DATE = "2020_07_01" +INPUT_DATE_GRCUDA = "2020_07_01_20_19_24_grcuda" +INPUT_DATE_CUDA = "2020_07_02_10_21_01_cuda" +OUTPUT_DATE = "2020_07_02" PLOT_DIR = "../../../../data/plots" -BENCHMARK_NAMES = {"b1": "Vector Squares", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} +BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} ############################## ############################## diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index 111aba1b..8d89898a 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -27,15 +27,17 @@ DEFAULT_RES_DIR = "../../../../data/results" -INPUT_DATE_GRCUDA = "2020_06_30_18_20_02_grcuda" -OUTPUT_DATE = "2020_07_01" +INPUT_DATE_GRCUDA = "2020_07_01_20_19_24_grcuda" +OUTPUT_DATE = "2020_07_02" PLOT_DIR = "../../../../data/plots" +B5_ITER = 10 B7_ITER = 10 -BENCHMARK_NAMES = {"b1": "Vector Squares", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} +BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} BENCHMARK_PHASES = { "b1": ["square", "reduce"], + "b5": [y for x in [[f"bs_{i}"] for i in range(B5_ITER)] for y in x], "b6": ["rr_1", "rr_2", "rr_3", "nb_1", "nb_2", "nb_3", "nb_4", "softmax", "argmax"], "b7": [y for x in [[f"spmv_a_{i}", f"spmv_h_{i}", f"sum_a_{i}", f"sum_h_{i}", f"divide_a_{i}", f"divide_h_{i}", f"norm_reset_{i}"] for i in range(B7_ITER)] for y in x], "b8": ["blur_small", "blur_large", "blur_unsharpen", "sobel_small", "sobel_large", "maximum", "minimum", "extend", "unsharpen", "combine", "combine_2"], @@ -59,6 +61,9 @@ def theoretical_speed(input_data, group_columns, benchmark): def theoretical_speed_b1(data): return data["square"] / 2 + data["reduce"] +def theoretical_speed_b5(data): + return data[[f"bs_{i}" for i in range(B5_ITER)]].max(axis=1) + def theoretical_speed_b6(data): return np.maximum(data["rr_1"] + data["rr_2"] + data["rr_3"], data["nb_1"] + data["nb_2"] + data["nb_3"] + data["nb_4"]) + data["softmax"] / 2 + data["argmax"] @@ -76,6 +81,7 @@ def theoretical_speed_b8(data): THEORETICAL_SPEED_FUNCTIONS = { "b1": theoretical_speed_b1, + "b5": theoretical_speed_b5, "b6": theoretical_speed_b6, "b7": theoretical_speed_b7, "b8": theoretical_speed_b8, From f76ca4defe18b08288d120dce8f335e9a37dbf4c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 5 Jul 2020 11:37:14 +0200 Subject: [PATCH 112/236] added option to skip phase timing in benchmarks --- .../ArrayReadWriteFunctionExecution.java | 2 +- .../GrCUDAExecutionContext.java | 2 +- .../gpu/stream/GrCUDAStreamManager.java | 10 +- .../python/benchmark/bench/bench_1.py | 23 +++-- .../python/benchmark/bench/bench_5.py | 20 ++-- .../python/benchmark/bench/bench_6.py | 64 +++++-------- .../python/benchmark/bench/bench_7.py | 49 ++++------ .../python/benchmark/bench/bench_8.py | 92 ++++++++----------- .../resources/python/benchmark/benchmark.py | 24 ++++- .../python/benchmark/benchmark_main.py | 7 +- .../python/benchmark/benchmark_result.py | 21 ++++- .../python/benchmark/benchmark_wrapper.py | 44 +++++---- .../python/plotting/plot_speedup_baseline.py | 12 +-- .../plotting/plot_speedup_grcuda_cuda.py | 15 +-- .../plotting/plot_theoretical_performance.py | 16 ++-- 15 files changed, 197 insertions(+), 204 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java index 98e52b41..732a0e07 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/computation/ArrayReadWriteFunctionExecution.java @@ -73,7 +73,7 @@ private void copyTo() throws IndexOutOfBoundsException { CompilerDirectives.transferToInterpreter(); throw new IndexOutOfBoundsException(); } - // If the array visibility is restricted to a stream, provide the stream to memcpy; + // If the array visibility is restricted to a stream, provide the stream to memcpy; if (array.getStreamMapping().isDefaultStream()) { grCUDAExecutionContext.getCudaRuntime().cudaMemcpy(pointer, array.getPointer(), numBytesToCopy); } else { diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java index 92c5703d..8690ba10 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/executioncontext/GrCUDAExecutionContext.java @@ -53,7 +53,7 @@ public Object registerExecution(GrCUDAComputationalElement computation) throws U // Associate a CUDA event to this computation, if performed asynchronously; streamManager.assignEvent(vertex); - System.out.println("-- running " + vertex.getComputation()); +// System.out.println("-- running " + vertex.getComputation()); return result; } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java index 774758ae..f2ba02fa 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/stream/GrCUDAStreamManager.java @@ -127,7 +127,7 @@ public void syncParentStreams(ExecutionDAG.DAGVertex vertex) { CUDAStream stream = additionalStream.get(); // If we require synchronization on the default stream, perform it in a specialized way; if (stream.isDefaultStream()) { - System.out.println("--\tsync stream " + stream + " by " + vertex.getComputation()); +// System.out.println("--\tsync stream " + stream + " by " + vertex.getComputation()); // Synchronize the device; syncDevice(); // All computations are now finished; @@ -169,9 +169,9 @@ protected void syncStreamsUsingEvents(ExecutionDAG.DAGVertex vertex) { CUDAEvent event = parent.getEvent().get(); runtime.cudaStreamWaitEvent(vertex.getComputation().getStream(), event); - System.out.println("\t* wait event on stream; stream to sync=" + stream.getStreamNumber() - + "; stream that waits=" + vertex.getComputation().getStream().getStreamNumber() - + "; event=" + event.getEventNumber()); +// System.out.println("\t* wait event on stream; stream to sync=" + stream.getStreamNumber() +// + "; stream that waits=" + vertex.getComputation().getStream().getStreamNumber() +// + "; event=" + event.getEventNumber()); } else { System.out.println("\t* WARNING: missing event to sync child computation=" + vertex.getComputation() + " and parent computation=" + parent); @@ -193,7 +193,7 @@ protected void syncParentStreamsImpl(ExecutionDAG.DAGVertex vertex) { Set streamsToSync = getParentStreams(vertex.getParentComputations()); // Synchronize streams; streamsToSync.forEach(s -> { - System.out.println("--\tsync stream=" + s.getStreamNumber() + " by " + vertex.getComputation()); +// System.out.println("--\tsync stream=" + s.getStreamNumber() + " by " + vertex.getComputation()); syncStream(s); }); diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index 4d276787..7cba3e53 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -116,25 +116,24 @@ def reset_result(self) -> None: def execute(self) -> object: + start_comp = System.nanoTime() + start = 0 + # A, B. Call the kernel. The 2 computations are independent, and can be done in parallel; - start = System.nanoTime() - self.square_kernel(self.num_blocks, self.block_size)(self.x, self.x1, self.size) - self.square_kernel(self.num_blocks, self.block_size)(self.y, self.y1, self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": "square", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase("square_1", self.square_kernel(self.num_blocks, self.block_size), self.x, self.x1, self.size) + self.execute_phase("square_2", self.square_kernel(self.num_blocks, self.block_size), self.y, self.y1, self.size) # C. Compute the sum of the result; - start = System.nanoTime() - self.reduce_kernel(self.num_blocks, self.block_size)(self.x1, self.y1, self.res, self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": "reduce", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase("reduce", self.reduce_kernel(self.num_blocks, self.block_size), self.x1, self.y1, self.res, self.size) # Add a final sync step to measure the real computation time; - start = System.nanoTime() + if self.time_phases: + start = System.nanoTime() result = self.res[0] end = System.nanoTime() - self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) - + if self.time_phases: + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + self.benchmark.add_computation_time((end - start_comp) / 1_000_000_000) self.benchmark.add_to_benchmark("gpu_result", result) if self.benchmark.debug: BenchmarkResult.log_message(f"\tgpu result: {result:.4f}") diff --git a/projects/resources/python/benchmark/bench/bench_5.py b/projects/resources/python/benchmark/bench/bench_5.py index fc2f0ee2..cf60fed2 100644 --- a/projects/resources/python/benchmark/bench/bench_5.py +++ b/projects/resources/python/benchmark/bench/bench_5.py @@ -123,22 +123,22 @@ def reset_result(self) -> None: def execute(self) -> object: - result = [] + result = [0] * self.K # Call the kernels; - s = System.nanoTime() + start_comp = System.nanoTime() + start = System.nanoTime() for i in range(self.K): - start = System.nanoTime() - self.bs_kernel(self.num_blocks, self.block_size)(self.x[i], self.y[i], self.size, R, V, T, K) - end = System.nanoTime() - self.benchmark.add_phase({"name": f"bs_{i}", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase(f"bs_{i}", self.bs_kernel(self.num_blocks, self.block_size), self.x[i], self.y[i], self.size, R, V, T, K) - start = System.nanoTime() + if self.time_phases: + start = System.nanoTime() for i in range(self.K): - result += [self.y[i][0]] + result[i] = self.y[i][0] end = System.nanoTime() - print("TIMETIME= ", (end - s) / 1_000_000_000) - self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + if self.time_phases: + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + self.benchmark.add_computation_time((end - start_comp) / 1_000_000_000) self.benchmark.add_to_benchmark("gpu_result", result[0]) if self.benchmark.debug: diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index 0de86a3f..bb93561c 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -1,6 +1,7 @@ # coding=utf-8 import polyglot import time +from java.lang import System import numpy as np from random import random, randint, seed @@ -265,70 +266,47 @@ def reset_result(self) -> None: def execute(self) -> object: # Schedule the categorical Naive Bayes and Ridge Regression kernels + start_comp = System.nanoTime() + start = 0 # RR - 1. - start = time.time() - self.rr_1(self.num_blocks_feat, self.block_size)(self.x, self.z, self.size, self.num_features) - end = time.time() - self.benchmark.add_phase({"name": "rr_1", "time_sec": end - start}) + self.execute_phase("rr_1", self.rr_1(self.num_blocks_feat, self.block_size), self.x, self.z, self.size, self.num_features) # NB - 1. - start = time.time() - self.nb_1(self.num_blocks_size, self.block_size)(self.x, self.nb_feat_log_prob, self.r1, self.size, self.num_features, self.num_classes) - end = time.time() - self.benchmark.add_phase({"name": "nb_1", "time_sec": end - start}) + self.execute_phase("nb_1", self.nb_1(self.num_blocks_size, self.block_size), self.x, self.nb_feat_log_prob, self.r1, self.size, self.num_features, self.num_classes) # RR - 2. - start = time.time() - self.rr_2(self.num_blocks_size, self.block_size)(self.z, self.ridge_coeff, self.r2, self.size, self.num_features, self.num_classes) - end = time.time() - self.benchmark.add_phase({"name": "rr_2", "time_sec": end - start}) + self.execute_phase("rr_2", self.rr_2(self.num_blocks_size, self.block_size), self.z, self.ridge_coeff, self.r2, self.size, self.num_features, self.num_classes) # NB - 2. - start = time.time() - self.nb_2(self.num_blocks_size, self.block_size)(self.r1, self.nb_amax, self.size, self.num_classes) - end = time.time() - self.benchmark.add_phase({"name": "nb_2", "time_sec": end - start}) + self.execute_phase("nb_2", self.nb_2(self.num_blocks_size, self.block_size), self.r1, self.nb_amax, self.size, self.num_classes) # NB - 3. - start = time.time() - self.nb_3(self.num_blocks_size, self.block_size)(self.r1, self.nb_amax, self.nb_l, self.size, self.num_classes) - end = time.time() - self.benchmark.add_phase({"name": "nb_3", "time_sec": end - start}) + self.execute_phase("nb_3", self.nb_3(self.num_blocks_size, self.block_size), self.r1, self.nb_amax, self.nb_l, self.size, self.num_classes) # RR - 3. - start = time.time() - self.rr_3(self.num_blocks_size, self.block_size)(self.r2, self.ridge_intercept, self.size, self.num_classes) - end = time.time() - self.benchmark.add_phase({"name": "rr_3", "time_sec": end - start}) + self.execute_phase("rr_3", self.rr_3(self.num_blocks_size, self.block_size), self.r2, self.ridge_intercept, self.size, self.num_classes) # NB - 4. - start = time.time() - self.nb_4(self.num_blocks_size, self.block_size)(self.r1, self.nb_l, self.size, self.num_classes) - end = time.time() - self.benchmark.add_phase({"name": "nb_4", "time_sec": end - start}) + self.execute_phase("nb_4", self.nb_4(self.num_blocks_size, self.block_size), self.r1, self.nb_l, self.size, self.num_classes) # Ensemble results; # Softmax normalization; - start = time.time() - self.softmax(self.num_blocks_size, self.block_size)(self.r1, self.size, self.num_classes) - self.softmax(self.num_blocks_size, self.block_size)(self.r2, self.size, self.num_classes) - end = time.time() - self.benchmark.add_phase({"name": "softmax", "time_sec": end - start}) + self.execute_phase("softmax_1", self.softmax(self.num_blocks_size, self.block_size), self.r1, self.size, self.num_classes) + self.execute_phase("softmax_2", self.softmax(self.num_blocks_size, self.block_size), self.r2, self.size, self.num_classes) # Prediction; - start = time.time() - self.argmax(self.num_blocks_size, self.block_size)(self.r1, self.r2, self.r, self.size, self.num_classes) - end = time.time() - self.benchmark.add_phase({"name": "argmax", "time_sec": end - start}) + self.execute_phase("argmax", self.argmax(self.num_blocks_size, self.block_size), self.r1, self.r2, self.r, self.size, self.num_classes) # Add a final sync step to measure the real computation time; - start = time.time() + if self.time_phases: + start = System.nanoTime() tmp = self.r[0] - end = time.time() - self.benchmark.add_phase({"name": "sync", "time_sec": end - start}) - + end = System.nanoTime() + if self.time_phases: + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + self.benchmark.add_computation_time((end - start_comp) / 1_000_000_000) self.benchmark.add_to_benchmark("gpu_result", 0) if self.benchmark.debug: BenchmarkResult.log_message(f"\tgpu result: [" + ", ".join([f"{x:.4f}" for x in self.r[:10]]) + "...]") @@ -357,7 +335,7 @@ def ridge_pred(X, coef, intercept): return np.dot(X, coef.T) + intercept # Recompute the CPU result only if necessary; - start = time.time() + start = System.nanoTime() if self.current_iter == 0 or reinit: # Re-initialize the random number generator with the same seed as the GPU to generate the same values; seed(self.random_seed) @@ -367,7 +345,7 @@ def ridge_pred(X, coef, intercept): r_g = np.argmax(softmax(r1_g) + softmax(r2_g), axis=1) self.cpu_result = r_g - cpu_time = time.time() - start + cpu_time = System.nanoTime() - start # Compare GPU and CPU results; difference = 0 diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index 3fad6d5a..ec39cb1e 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -199,54 +199,43 @@ def reset_result(self) -> None: def execute(self) -> object: + start_comp = System.nanoTime() + start = 0 + for i in range(self.num_iterations): # Authorities; - start = System.nanoTime() - self.spmv_kernel(self.num_blocks_size, self.block_size)(self.ptr2, self.idx2, self.val2, self.hub1, self.auth2, self.size, self.num_nnz) - end = System.nanoTime() - self.benchmark.add_phase({"name": f"spmv_a_{i}", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase(f"spmv_a_{i}", self.spmv_kernel(self.num_blocks_size, self.block_size), self.ptr2, self.idx2, self.val2, self.hub1, self.auth2, self.size, self.num_nnz) # Hubs; - start = System.nanoTime() - self.spmv_kernel(self.num_blocks_size, self.block_size)(self.ptr, self.idx, self.val, self.auth1, self.hub2, self.size, self.num_nnz) - end = System.nanoTime() - self.benchmark.add_phase({"name": f"spmv_h_{i}", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase(f"spmv_h_{i}", self.spmv_kernel(self.num_blocks_size, self.block_size), self.ptr, self.idx, self.val, self.auth1, self.hub2, self.size, self.num_nnz) # Normalize authorities; - start = System.nanoTime() - self.sum_kernel(self.num_blocks_size, self.block_size)(self.auth2, self.auth_norm, self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": f"sum_a_{i}", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase(f"sum_a_{i}", self.sum_kernel(self.num_blocks_size, self.block_size), self.auth2, self.auth_norm, self.size) # Normalize hubs; - start = System.nanoTime() - self.sum_kernel(self.num_blocks_size, self.block_size)(self.hub2, self.hub_norm, self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": f"sum_h_{i}", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase(f"sum_h_{i}", self.sum_kernel(self.num_blocks_size, self.block_size), self.hub2, self.hub_norm, self.size) - start = System.nanoTime() - self.divide_kernel(self.num_blocks_size, self.block_size)(self.auth2, self.auth1, self.auth_norm, self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": f"divide_a_{i}", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase(f"divide_a_{i}", self.divide_kernel(self.num_blocks_size, self.block_size), self.auth2, self.auth1, self.auth_norm, self.size) - start = System.nanoTime() - self.divide_kernel(self.num_blocks_size, self.block_size)(self.hub2, self.hub1, self.hub_norm, self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": f"divide_h_{i}", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase(f"divide_h_{i}", self.divide_kernel(self.num_blocks_size, self.block_size), self.hub2, self.hub1, self.hub_norm, self.size) - start = System.nanoTime() + if self.time_phases: + start = System.nanoTime() self.auth_norm[0] = 0.0 self.hub_norm[0] = 0.0 - end = System.nanoTime() - self.benchmark.add_phase({"name": f"norm_reset_{i}", "time_sec": (end - start) / 1_000_000_000}) + if self.time_phases: + end = System.nanoTime() + self.benchmark.add_phase({"name": f"norm_reset_{i}", "time_sec": (end - start) / 1_000_000_000}) # Add a final sync step to measure the real computation time; - start = System.nanoTime() + if self.time_phases: + start = System.nanoTime() tmp1 = self.auth1[0] tmp2 = self.hub1[0] end = System.nanoTime() - self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) - + if self.time_phases: + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + self.benchmark.add_computation_time((end - start_comp) / 1_000_000_000) # Compute GPU result; for i in range(self.size): self.gpu_result[i] = self.auth1[i] + self.hub1[i] diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index f676bd8c..1be1b0a4 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -335,79 +335,63 @@ def reset_result(self) -> None: def execute(self) -> object: + start_comp = System.nanoTime() + start = 0 + # Blur - Small; - start = System.nanoTime() a = 32 - self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_small_diameter**2)\ - (self.image, self.blurred_small, self.size, self.size, self.kernel_small, self.kernel_small_diameter) - end = System.nanoTime() - self.benchmark.add_phase({"name": "blur_small", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase("blur_small", + self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_small_diameter**2), + self.image, self.blurred_small, self.size, self.size, self.kernel_small, self.kernel_small_diameter) # Blur - Large; - start = System.nanoTime() - self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_large_diameter**2)\ - (self.image, self.blurred_large, self.size, self.size, self.kernel_large, self.kernel_large_diameter) - end = System.nanoTime() - self.benchmark.add_phase({"name": "blur_large", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase("blur_large", + self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_large_diameter**2), + self.image, self.blurred_large, self.size, self.size, self.kernel_large, self.kernel_large_diameter) # Blur - Unsharpen; - start = System.nanoTime() - self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_unsharpen_diameter**2)\ - (self.image, self.blurred_unsharpen, self.size, self.size, self.kernel_unsharpen, self.kernel_unsharpen_diameter) - end = System.nanoTime() - self.benchmark.add_phase({"name": "blur_unsharpen", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase("blur_unsharpen", + self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_unsharpen_diameter**2), + self.image, self.blurred_unsharpen, self.size, self.size, self.kernel_unsharpen, self.kernel_unsharpen_diameter) # Sobel filter (edge detection); - start = System.nanoTime() - self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (self.block_size_2d, self.block_size_2d))\ - (self.blurred_small, self.mask_small, self.size, self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": "sobel_small", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase("sobel_small", + self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (self.block_size_2d, self.block_size_2d)), + self.blurred_small, self.mask_small, self.size, self.size) - start = System.nanoTime() - self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (self.block_size_2d, self.block_size_2d))\ - (self.blurred_large, self.mask_large, self.size, self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": "sobel_large", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase("sobel_large", + self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (self.block_size_2d, self.block_size_2d)), + self.blurred_large, self.mask_large, self.size, self.size) # Extend large edge detection mask; - start = System.nanoTime() - self.maximum_kernel(self.num_blocks_per_processor, self.block_size_1d)(self.mask_large, self.maximum, self.size**2) - end = System.nanoTime() - self.benchmark.add_phase({"name": "maximum", "time_sec": (end - start) / 1_000_000_000}) - start = System.nanoTime() - self.minimum_kernel(self.num_blocks_per_processor, self.block_size_1d)(self.mask_large, self.minimum, self.size**2) - end = System.nanoTime() - self.benchmark.add_phase({"name": "minimum", "time_sec": (end - start) / 1_000_000_000}) - start = System.nanoTime() - self.extend_kernel(self.num_blocks_per_processor, self.block_size_1d)(self.mask_large, self.minimum, self.maximum, self.size**2) - end = System.nanoTime() - self.benchmark.add_phase({"name": "extend", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase("maximum", + self.maximum_kernel(self.num_blocks_per_processor, self.block_size_1d), self.mask_large, self.maximum, self.size**2) + self.execute_phase("minimum", + self.minimum_kernel(self.num_blocks_per_processor, self.block_size_1d), self.mask_large, self.minimum, self.size**2) + self.execute_phase("extend", + self.extend_kernel(self.num_blocks_per_processor, self.block_size_1d), self.mask_large, self.minimum, self.maximum, self.size**2) # Unsharpen; - start = System.nanoTime() - self.unsharpen_kernel(self.num_blocks_per_processor, self.block_size_1d)\ - (self.image, self.blurred_unsharpen, self.image_unsharpen, self.unsharpen_amount, self.size * self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": "unsharpen", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase("unsharpen", + self.unsharpen_kernel(self.num_blocks_per_processor, self.block_size_1d), + self.image, self.blurred_unsharpen, self.image_unsharpen, self.unsharpen_amount, self.size * self.size) # Combine results; - start = System.nanoTime() - self.combine_mask_kernel(self.num_blocks_per_processor, self.block_size_1d)\ - (self.image_unsharpen, self.blurred_large, self.mask_large, self.image2, self.size * self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": "combine", "time_sec": (end - start) / 1_000_000_000}) - start = System.nanoTime() - self.combine_mask_kernel(self.num_blocks_per_processor, self.block_size_1d)\ - (self.image2, self.blurred_small, self.mask_small, self.image3, self.size * self.size) - end = System.nanoTime() - self.benchmark.add_phase({"name": "combine_2", "time_sec": (end - start) / 1_000_000_000}) + self.execute_phase("combine", + self.combine_mask_kernel(self.num_blocks_per_processor, self.block_size_1d), + self.image_unsharpen, self.blurred_large, self.mask_large, self.image2, self.size * self.size) + self.execute_phase("combine_2", + self.combine_mask_kernel(self.num_blocks_per_processor, self.block_size_1d), + self.image2, self.blurred_small, self.mask_small, self.image3, self.size * self.size) # Add a final sync step to measure the real computation time; - start = System.nanoTime() + if self.time_phases: + start = System.nanoTime() tmp = self.image3[0][0] end = System.nanoTime() - self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + if self.time_phases: + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + self.benchmark.add_computation_time((end - start_comp) / 1_000_000_000) # Compute GPU result; # for i in range(self.size): diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py index 21ee730f..05d60501 100644 --- a/projects/resources/python/benchmark/benchmark.py +++ b/projects/resources/python/benchmark/benchmark.py @@ -32,6 +32,7 @@ class Benchmark(ABC): def __init__(self, name: str, benchmark: BenchmarkResult): self.name = name self.benchmark = benchmark + self.time_phases = False self.tot_iter = 0 self.current_iter = 0 self.random_seed = 42 # Default random seed, it will be overwritten with a random one; @@ -79,7 +80,24 @@ def execute(self) -> object: """ pass - def run(self, num_iter: int, policy: str, size: int, realloc: bool, reinit: bool, block_size: dict = None) -> None: + def execute_phase(self, phase_name, function, *args) -> object: + """ + Executes a single step of the benchmark, possibily measuring the time it takes + :param phase_name: name of this benchmark step + :param function: a function to execute + :param args: arguments of the function + :return: the result of the function + """ + if self.time_phases: + start = System.nanoTime() + res = function(*args) + end = System.nanoTime() + self.benchmark.add_phase({"name": phase_name, "time_sec": (end - start) / 1_000_000_000}) + return res + else: + return function(*args) + + def run(self, num_iter: int, policy: str, size: int, realloc: bool, reinit: bool, time_phases: bool, block_size: dict = None) -> None: # Fix missing block size; if "block_size_1d" not in block_size: @@ -93,8 +111,10 @@ def run(self, num_iter: int, policy: str, size: int, realloc: bool, reinit: bool realloc=realloc, reinit=reinit, block_size=block_size, - iteration=num_iter) + iteration=num_iter, + time_phases=time_phases) self.current_iter = num_iter + self.time_phases = time_phases # TODO: set the execution policy; # Start a timer to monitor the total GPU execution time; diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index c50d7354..5626b616 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -102,6 +102,9 @@ def create_block_size_list(block_size_1d, block_size_2d) -> list: help="Number of threads per block when using 2D kernels") parser.add_argument("-r", "--random", action="store_true", help="Initialize benchmarks randomly whenever possible") + parser.add_argument("-p", "--time_phases", action="store_true", + help="Measure the execution time of each phase of the benchmark;" + " note that this introduces overheads, and might influence the total execution time") parser.set_defaults(cpu_validation=BenchmarkResult.DEFAULT_CPU_VALIDATION) # Parse the input arguments; @@ -114,6 +117,7 @@ def create_block_size_list(block_size_1d, block_size_2d) -> list: reinit = args.reinit if args.reinit else [BenchmarkResult.DEFAULT_REINIT] random_init = args.random if args.random else BenchmarkResult.DEFAULT_RANDOM_INIT cpu_validation = args.cpu_validation + time_phases = args.time_phases # Create a new benchmark result instance; benchmark_res = BenchmarkResult(debug=debug, num_iterations=num_iter, output_path=output_path, @@ -150,7 +154,8 @@ def create_block_size_list(block_size_1d, block_size_2d) -> list: for ri in reinit: for block_size in block_sizes: for i in range(num_iter): - benchmark.run(num_iter=i, policy=p, size=n, realloc=re, reinit=ri, block_size=block_size) + benchmark.run(num_iter=i, policy=p, size=n, realloc=re, reinit=ri, + block_size=block_size, time_phases=time_phases) # Print the summary of this block; if benchmark_res.debug: benchmark_res.print_current_summary(name=b_name, policy=p, size=n, diff --git a/projects/resources/python/benchmark/benchmark_result.py b/projects/resources/python/benchmark/benchmark_result.py index c15901ba..4e08f21d 100644 --- a/projects/resources/python/benchmark/benchmark_result.py +++ b/projects/resources/python/benchmark/benchmark_result.py @@ -51,7 +51,8 @@ def default_output_file_name(self) -> str: return os.path.join(self.DEFAULT_RES_FOLDER, file_name) def start_new_benchmark(self, name: str, policy: str, size: int, - realloc: bool, reinit: bool, block_size: dict, iteration: int) -> None: + realloc: bool, reinit: bool, block_size: dict, + iteration: int, time_phases: bool) -> None: """ Benchmark results are stored in a nested dictionary with the following structure. self.results["benchmarks"]->{benchmark_name}->{policy}->{size}->{realloc}->{reinit}->{actual result} @@ -63,6 +64,8 @@ def start_new_benchmark(self, name: str, policy: str, size: int, :param reinit: if re-initialization is performed :param block_size: dictionary that specifies the number of threads per block :param iteration: current iteration + :param time_phases: if True, measure the execution time of each phase of the benchmark. + Note that this introduces overheads, and might influence the total execution time """ # 1. Benchmark name; @@ -96,7 +99,7 @@ def start_new_benchmark(self, name: str, policy: str, size: int, dict_block = {} dict_reinit[reinit] = dict_block # 6. Block size options; - self._dict_current = {"phases": [], "iteration": iteration} + self._dict_current = {"phases": [], "iteration": iteration, "time_phases": time_phases} if BenchmarkResult.create_block_size_key(block_size) in dict_block: dict_block[BenchmarkResult.create_block_size_key(block_size)] += [self._dict_current] else: @@ -105,7 +108,8 @@ def start_new_benchmark(self, name: str, policy: str, size: int, if self.debug: BenchmarkResult.log_message( f"starting benchmark={name}, iter={iteration + 1}/{self.num_iterations}, " - f"policy={policy}, size={size}, realloc={realloc}, reinit={reinit}, block_size={BenchmarkResult.create_block_size_key(block_size)}") + f"policy={policy}, size={size}, realloc={realloc}, reinit={reinit}, block_size={BenchmarkResult.create_block_size_key(block_size)}, " + f"time_phases={time_phases}") def add_to_benchmark(self, key: str, message: object) -> None: """ @@ -129,11 +133,18 @@ def add_total_time(self, total_time: float) -> None: filtered_phases = [x for x in self._dict_current["phases"] if x["name"] not in blacklisted_phases] tot_time_phases = sum([x["time_sec"] if "time_sec" in x else 0 for x in filtered_phases]) self._dict_current["overhead_sec"] = total_time - tot_time_phases - self._dict_current["computation_sec"] = tot_time_phases + self._dict_current["computation_sum_phases_sec"] = tot_time_phases if self.debug: BenchmarkResult.log_message(f"\ttotal execution time: {total_time:.4f} sec," + f" overhead: {total_time - tot_time_phases:.4f} sec, " + - f" computation: {tot_time_phases:.4f} sec") + f" computation: {self._dict_current['computation_sec']:.4f} sec") + + def add_computation_time(self, computation_time: float) -> None: + """ + Add to the current benchmark entry the GPU computation time of the benchmark iteration + :param computation_time: execution time of the GPU computation in the benchmark iteration, in seconds + """ + self._dict_current["computation_sec"] = computation_time def add_phase(self, phase: dict) -> None: """ diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 76594b14..e0cb9ca3 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -12,21 +12,21 @@ # Benchmark settings; benchmarks = [ - # "b1", + "b1", # "b4", - "b5", + # "b5", # "b6", # "b7", # "b8", ] num_elem = { - "b1": [2000000, 5000000, 10000000, 20000000, 40000000], - "b4": [2000000, 5000000, 10000000, 20000000, 40000000], - "b5": [2000000, 5000000, 10000000, 15000000, 20000000], - "b6": [20000, 50000, 200000, 500000, 800000], - "b7": [50000, 100000, 150000, 200000, 250000], - "b8": [800, 1600, 2400, 4000, 4800], + "b1": [2000000],# , 5000000, 10000000, 20000000, 40000000], + "b4": [2000000],# , 5000000, 10000000, 20000000, 40000000], + "b5": [2000000],#, 5000000, 10000000, 15000000, 20000000], + "b6": [20000],#, 50000, 200000, 500000, 800000], + "b7": [50000],#, 100000, 150000, 200000, 250000], + "b8": [800],#, 1600, 2400, 4000, 4800], } exec_policies = ["default", "sync"] @@ -37,8 +37,8 @@ dependency_policies = ["with-const"] -block_sizes_1d = [32, 128, 256, 1024] -block_sizes_2d = [8, 8, 16, 32] +block_sizes_1d = [32]#, 128, 256, 1024] +block_sizes_2d = [8]#, 8, 16, 32] ############################## ############################## @@ -89,22 +89,23 @@ def execute_cuda_benchmark(benchmark, size, block_size, exec_policy, num_iter, d GRAALPYTHON_CMD = "graalpython --vm.XX:MaxHeapSize=24G --jvm --polyglot --WithThread " \ "--grcuda.RetrieveNewStreamPolicy={} --grcuda.ExecutionPolicy={} --grcuda.DependencyPolicy={} " \ "--grcuda.RetrieveParentStreamPolicy={} benchmark_main.py -i {} -n {} " \ - "--reinit false --realloc false -b {} --block_size_1d {} --block_size_2d {} --no_cpu_validation {} -o {}" + "--reinit false --realloc false -b {} --block_size_1d {} --block_size_2d {} --no_cpu_validation {} {} -o {}" def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_stream_policy, - parent_stream_policy, dependency_policy, num_iter, debug, output_date=None): + parent_stream_policy, dependency_policy, num_iter, debug, time_phases, output_date=None): if debug: BenchmarkResult.log_message("") BenchmarkResult.log_message("") BenchmarkResult.log_message("#" * 30) BenchmarkResult.log_message(f"Benchmark {i + 1}/{tot_benchmarks}") BenchmarkResult.log_message(f"benchmark={b}, size={n}," - f" block size={block_size}, " - f" exec policy={exec_policy}, " - f" new stream policy={new_stream_policy}, " - f" parent stream policy={parent_stream_policy}, " - f" dependency policy={dependency_policy}") + f"block size={block_size}, " + f"exec policy={exec_policy}, " + f"new stream policy={new_stream_policy}, " + f"parent stream policy={parent_stream_policy}, " + f"dependency policy={dependency_policy}, " + f"time_phases={time_phases}") BenchmarkResult.log_message("#" * 30) BenchmarkResult.log_message("") BenchmarkResult.log_message("") @@ -123,7 +124,7 @@ def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_strea benchmark_cmd = GRAALPYTHON_CMD.format(new_stream_policy, exec_policy, dependency_policy, parent_stream_policy, num_iter, size, benchmark, block_size["block_size_1d"], block_size["block_size_2d"], - "-d" if debug else "", output_path) + "-d" if debug else "", "-p" if time_phases else "", output_path) start = System.nanoTime() result = subprocess.run(benchmark_cmd, shell=True, @@ -148,6 +149,9 @@ def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_strea help="If present, run performance tests using CUDA") parser.add_argument("-i", "--num_iter", metavar="N", type=int, default=BenchmarkResult.DEFAULT_NUM_ITER, help="Number of times each benchmark is executed") + parser.add_argument("-p", "--time_phases", action="store_true", + help="Measure the execution time of each phase of the benchmark;" + " note that this introduces overheads, and might influence the total execution time") # Parse the input arguments; args = parser.parse_args() @@ -155,6 +159,7 @@ def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_strea debug = args.debug if args.debug else BenchmarkResult.DEFAULT_DEBUG num_iter = args.num_iter if args.num_iter else BenchmarkResult.DEFAULT_NUM_ITER use_cuda = args.cuda_test + time_phases = args.time_phases # Setup the block size for each benchmark; block_sizes = create_block_size_list(block_sizes_1d, block_sizes_2d) @@ -190,5 +195,6 @@ def tot_benchmark_count(): for parent_stream_policy in parent_stream_policies: for dependency_policy in dependency_policies: execute_grcuda_benchmark(b, n, block_size, exec_policy, new_stream_policy, - parent_stream_policy, dependency_policy, num_iter, debug, output_date=output_date) + parent_stream_policy, dependency_policy, num_iter, + debug, time_phases, output_date=output_date) i += 1 diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 67aa7369..a88de32c 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,8 +21,8 @@ from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot -INPUT_DATE = "2020_07_01_20_19_24_grcuda" -OUTPUT_DATE = "2020_07_02" +INPUT_DATE = "2020_07_03_10_48_22_grcuda" +OUTPUT_DATE = "2020_07_032" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} @@ -56,7 +56,7 @@ def build_exec_time_plot(data, gridspec, x, y): ax.add_collection(pc) # Set the same y limits in each plot; - ax.set_ylim((0, 4)) + ax.set_ylim((0, 3)) # Add a horizontal line to denote speedup = 1x; ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) @@ -66,7 +66,7 @@ def build_exec_time_plot(data, gridspec, x, y): ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=45, ha="right", fontsize=9, rotation_mode="anchor") ax.tick_params(labelcolor="black") # Set the y ticks; - ax.yaxis.set_major_locator(plt.LinearLocator(5)) + ax.yaxis.set_major_locator(plt.LinearLocator(7)) if y == 0: ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) else: @@ -118,7 +118,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): labels_str = [str(x) for x in labels] # Set the same y limits in each plot; - ax.set_ylim((0, 4)) + ax.set_ylim((0, 3)) # Add a horizontal line to denote speedup = 1x; ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) @@ -128,7 +128,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) ax.tick_params(labelcolor="black") # Set the y ticks; - ax.yaxis.set_major_locator(plt.LinearLocator(5)) + ax.yaxis.set_major_locator(plt.LinearLocator(7)) if y == 0: ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) else: diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index a7369796..e3c869e9 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -26,9 +26,9 @@ ############################## -INPUT_DATE_GRCUDA = "2020_07_01_20_19_24_grcuda" -INPUT_DATE_CUDA = "2020_07_02_10_21_01_cuda" -OUTPUT_DATE = "2020_07_02" +INPUT_DATE_GRCUDA = "2020_07_03_10_48_22_grcuda" +INPUT_DATE_CUDA = "2020_07_03_09_37_24_cuda" +OUTPUT_DATE = "2020_07_032" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} @@ -70,7 +70,7 @@ def build_exec_time_plot_grcuda_cuda(data, gridspec, x, y): ax.add_collection(pc) # Set the same y limits in each plot; - ax.set_ylim((0, 4)) + ax.set_ylim((0, 2)) # Add a horizontal line to denote speedup = 1x; ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) @@ -132,15 +132,16 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"], COLORS["b4"]][:len(data["block_size_str"].unique())] markers = ["o", "X", "D", "P"][:len(data["block_size_str"].unique())] + order = data["block_size_str"].unique() # Add a lineplot with the exec times; ax = fig.add_subplot(gridspec[x, y]) ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) ax = sns.lineplot(x="size_str", y="grcuda_cuda_speedup", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, - err_style="bars", linewidth=2, legend=None, sort=False, ci=None, zorder=2) + err_style="bars", linewidth=2, legend=None, sort=False, ci=None, hue_order=order, zorder=2) data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["grcuda_cuda_speedup"].apply(gmean).reset_index() - order = data["block_size_str"].unique() + ax = sns.scatterplot(x="size_str", y="grcuda_cuda_speedup", hue="block_size_str", data=data_averaged, palette=palette, ax=ax, edgecolor="#0f0f0f", size_norm=30, legend=False, zorder=3, ci=None, markers=markers, style="block_size_str", hue_order=order, style_order=order, linewidth=0.05) @@ -148,7 +149,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): labels_str = [str(x) for x in labels] # Set the same y limits in each plot; - ax.set_ylim((0, 4)) + ax.set_ylim((0, 2)) # Add a horizontal line to denote speedup = 1x; ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index 8d89898a..a5d8af51 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -27,8 +27,8 @@ DEFAULT_RES_DIR = "../../../../data/results" -INPUT_DATE_GRCUDA = "2020_07_01_20_19_24_grcuda" -OUTPUT_DATE = "2020_07_02" +INPUT_DATE_GRCUDA = "2020_07_02_19_13_55_grcuda" +OUTPUT_DATE = "2020_07_03" PLOT_DIR = "../../../../data/plots" B5_ITER = 10 @@ -124,17 +124,17 @@ def build_theoretical_time_plot(data, gridspec, x, y): ax.add_collection(pc) # Set the same y limits in each plot; - ax.set_ylim((0, 3)) + ax.set_ylim((0, 1)) # Add a horizontal line to denote speedup = 1x; - ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + # ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) # Set the x ticks; ax.set_xticks(labels_str) ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=45, ha="right", fontsize=9, rotation_mode="anchor") ax.tick_params(labelcolor="black") # Set the y ticks; - ax.yaxis.set_major_locator(plt.LinearLocator(7)) + ax.yaxis.set_major_locator(plt.LinearLocator(5)) if y == 0: ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=9) else: @@ -202,17 +202,17 @@ def build_theoretical_time_plot_compact(data, gridspec, x, y): labels_str = [str(x) for x in labels] # Set the same y limits in each plot; - ax.set_ylim((0, 3)) + ax.set_ylim((0, 1)) # Add a horizontal line to denote speedup = 1x; - ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + # ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) # Set the x ticks; ax.set_xticks(labels_str) ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) ax.tick_params(labelcolor="black") # Set the y ticks; - ax.yaxis.set_major_locator(plt.LinearLocator(7)) + ax.yaxis.set_major_locator(plt.LinearLocator(5)) if y == 0: ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=9) else: From bfd1be6961765a5cbf8b3620babdc23d33ee8a25 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sun, 5 Jul 2020 12:03:50 +0200 Subject: [PATCH 113/236] added makefile for cuda examples --- projects/resources/cuda/Makefile | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 projects/resources/cuda/Makefile diff --git a/projects/resources/cuda/Makefile b/projects/resources/cuda/Makefile new file mode 100644 index 00000000..ac99d3fa --- /dev/null +++ b/projects/resources/cuda/Makefile @@ -0,0 +1,31 @@ +FLAGS = -std=c++11 -O3 +BIN_FOLDER=bin + +.PHONY: all b1 b5 b6 b7 b8 +all: \ + b1 \ + b5 \ + b6 \ + b7 \ + b8 + +b1: b1* + nvcc b1_default.cu $(FLAGS) -o $(BIN_FOLDER)/b1_default; + nvcc b1_sync.cu $(FLAGS) -o $(BIN_FOLDER)/b1_sync + +b5: b5* + nvcc b5_default.cu $(FLAGS) -o $(BIN_FOLDER)/b5_default; + nvcc b5_sync.cu $(FLAGS) -o $(BIN_FOLDER)/b5_sync + +b6: b6* + nvcc b6_default.cu $(FLAGS) -o $(BIN_FOLDER)/b6_default; + nvcc b6_sync.cu $(FLAGS) -o $(BIN_FOLDER)/b6_sync + +b7: b7* + nvcc b7_default.cu $(FLAGS) -o $(BIN_FOLDER)/b7_default; + nvcc b7_sync.cu $(FLAGS) -o $(BIN_FOLDER)/b7_sync + +b8: b8* + nvcc b8_default.cu $(FLAGS) -o $(BIN_FOLDER)/b8_default; + nvcc b8_sync.cu $(FLAGS) -o $(BIN_FOLDER)/b8_sync + From b9e9f903fd23661fd2071ffa7d59d228a8ab1114 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 6 Jul 2020 20:20:08 +0200 Subject: [PATCH 114/236] updated benchmarks and plots --- RESULTS.md | 8 +++--- projects/resources/.gitignore | 1 + projects/resources/cuda/Makefile | 2 +- projects/resources/cuda/b1_default.cu | 27 ++++++++++++++++--- projects/resources/cuda/b1_sync.cu | 26 +++++++++++++++--- projects/resources/cuda/b4_default.cu | 9 ++++--- projects/resources/cuda/b4_sync.cu | 5 +++- projects/resources/cuda/b5_default.cu | 9 ++++--- projects/resources/cuda/b5_sync.cu | 9 ++++--- projects/resources/cuda/b6_default.cu | 11 +++++--- projects/resources/cuda/b6_sync.cu | 11 +++++--- projects/resources/cuda/b7_default.cu | 9 ++++--- projects/resources/cuda/b7_sync.cu | 9 ++++--- projects/resources/cuda/b8_default.cu | 12 ++++++--- projects/resources/cuda/b8_sync.cu | 5 +++- projects/resources/cuda/options.hpp | 14 +++++++++- .../python/benchmark/bench/bench_6.py | 2 +- .../python/benchmark/benchmark_wrapper.py | 20 +++++++------- .../python/plotting/plot_speedup_baseline.py | 4 +-- .../plotting/plot_speedup_grcuda_cuda.py | 6 ++--- 20 files changed, 140 insertions(+), 59 deletions(-) create mode 100644 projects/resources/.gitignore diff --git a/RESULTS.md b/RESULTS.md index 5972f27f..bcf1c263 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -137,7 +137,7 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── ## Plots -![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_06_22/speedup_baseline_1_row_2020_06_22.png) +![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_1_row_2020_07_06.png) In general, **DAG scheduling allows better GPU resource usage**: when the data-set size does not fill the GPU computational resources, DAG scheduling provides speedups close to the theoretical optimum. As expected, the speedup is less significant as the data-set size increases, as each kernel can fully use the GPU resources by itself. @@ -147,7 +147,7 @@ In general, **DAG scheduling allows better GPU resource usage**: when the data-s As rule of thumb, **smaller blocks provide better speedup**: this is likely connected to the GPU architecture being better at parallelizing smaller blocks. In general, small blocks almost always provide better absolute performance, for similar reasons. Kernels in the benchmarks leverage grid-striding, meaning that the number of blocks is independent from the size of data to be processed and each thread becomes more computationally intensive as the data-size increases (instead of being constant). Currently, kernels do not use shared memory whose size depends on block size; if that was the case, bigger blocks might have an advantage. -![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_06_22/speedup_baseline_2020_06_22.png) +![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_2020_07_06.png) Performance of serial and DAG GrCUDA scheduling has been compared to the same benchmarks implemented directly in C++ and CUDA. The experimental setup and the kernels are exactly the same. In the case of CUDA asynchronous kernel execution, dependendencies and synchronization points have been computed by hand, instead of automatically. This provides a **comparison of how the overhead introduced by GrCUDA impacts the total execution time** compared to lower-level kernel scheduling. @@ -155,6 +155,6 @@ In the case of serial execution, CUDA is sligthly faster than GrCUDA, as expecte As for asynchronous DAG scheduling, we see how GrCUDA is actually **faster** than CUDA in most cases. It is not clear how GrCUDA is actually faster than CUDA. The only difference is that GrCUDA uses `nvrtc` (Nvidia runtime compilation library), instead of `nvcc`. Whether this provides faster kernel launches, or generates faster code, is yet to be checked. It is likely that `nvrtc` uses the same routines as `nvcc` for compilation, although kernel launches might be faster. -![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_06_22/speedup_baseline_grcuda_cuda_compact_2020_06_22.png) +![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_grcuda_cuda_compact_2020_07_06.png) -![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_06_22/speedup_baseline_grcuda_cuda_2020_06_22.png) +![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_grcuda_cuda_2020_07_06.png) diff --git a/projects/resources/.gitignore b/projects/resources/.gitignore new file mode 100644 index 00000000..888acda7 --- /dev/null +++ b/projects/resources/.gitignore @@ -0,0 +1 @@ +*.pbs diff --git a/projects/resources/cuda/Makefile b/projects/resources/cuda/Makefile index ac99d3fa..0c996c33 100644 --- a/projects/resources/cuda/Makefile +++ b/projects/resources/cuda/Makefile @@ -1,4 +1,4 @@ -FLAGS = -std=c++11 -O3 +FLAGS = -std=c++11 -O3 -arch=sm_50 BIN_FOLDER=bin .PHONY: all b1 b5 b6 b7 b8 diff --git a/projects/resources/cuda/b1_default.cu b/projects/resources/cuda/b1_default.cu index 235b6262..93ea752e 100644 --- a/projects/resources/cuda/b1_default.cu +++ b/projects/resources/cuda/b1_default.cu @@ -17,7 +17,13 @@ using clock_type = chrono::high_resolution_clock; extern "C" __global__ void square(const float* x, float* y, int n) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { - y[i] = x[i] * x[i]; + float tmp = x[i]; + float sum = 0; + // for (int j = 0; j < 4; j++) { + // sum += tmp + j; + // } + + y[i] = tmp + tmp * tmp / 2 + tmp * tmp * tmp / 6; } } @@ -28,6 +34,16 @@ __inline__ __device__ float warp_reduce(float val) { return val; } +// __device__ float atomicAddDouble(float* address, float val) { +// unsigned long long int* address_as_ull = (unsigned long long int*) address; +// unsigned long long int old = *address_as_ull, assumed; +// do { +// assumed = old; +// old = atomicCAS(address_as_ull, assumed, __float_as_longlong(val + __longlong_as_float(assumed))); +// } while (assumed != old); +// return __longlong_as_float(old); +// } + __global__ void reduce(const float *x, const float *y, float* z, int N) { int warp_size = 32; float sum = float(0); @@ -67,7 +83,8 @@ int main(int argc, char *argv[]) { int N = options.N; int block_size = options.block_size_1d; - int num_blocks = 64; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; if (debug) { @@ -75,6 +92,8 @@ int main(int argc, char *argv[]) { std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); @@ -127,7 +146,7 @@ int main(int argc, char *argv[]) { end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - tot += tmp; + if (i >= skip_iterations) tot += tmp; if (debug) { std::cout << " gpu result=" << res[0] << "; time=" << (float) tmp / 1000 << " ms" << std::endl; @@ -139,5 +158,5 @@ int main(int argc, char *argv[]) { // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b1_sync.cu b/projects/resources/cuda/b1_sync.cu index e30e3adf..f97c1f9a 100644 --- a/projects/resources/cuda/b1_sync.cu +++ b/projects/resources/cuda/b1_sync.cu @@ -17,7 +17,12 @@ using clock_type = chrono::high_resolution_clock; extern "C" __global__ void square(const float* x, float* y, int n) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { - y[i] = x[i] * x[i]; + float tmp = x[i]; + // float sum = 0; + // for (int j = 0; j < 4; j++) { + // sum += tmp + j; + // } + y[i] = tmp + tmp * tmp / 2 + tmp * tmp * tmp / 6; } } @@ -28,6 +33,16 @@ __inline__ __device__ float warp_reduce(float val) { return val; } +// __device__ float atomicAddDouble(float* address, float val) { +// unsigned long long int* address_as_ull = (unsigned long long int*) address; +// unsigned long long int old = *address_as_ull, assumed; +// do { +// assumed = old; +// old = atomicCAS(address_as_ull, assumed, __float_as_longlong(val + __longlong_as_float(assumed))); +// } while (assumed != old); +// return __longlong_as_float(old); +// } + __global__ void reduce(const float *x, const float *y, float* z, int N) { int warp_size = 32; float sum = float(0); @@ -67,7 +82,8 @@ int main(int argc, char *argv[]) { int N = options.N; int block_size = options.block_size_1d; - int num_blocks = 64; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; if (debug) { @@ -75,6 +91,8 @@ int main(int argc, char *argv[]) { std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); @@ -116,7 +134,7 @@ int main(int argc, char *argv[]) { end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - tot += tmp; + if (i >= skip_iterations) tot += tmp; if (debug) { std::cout << " gpu result=" << res[0] << "; time=" << (float) tmp / 1000 << " ms" << std::endl; @@ -128,5 +146,5 @@ int main(int argc, char *argv[]) { // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b4_default.cu b/projects/resources/cuda/b4_default.cu index 37e94fc3..98f5eaaf 100644 --- a/projects/resources/cuda/b4_default.cu +++ b/projects/resources/cuda/b4_default.cu @@ -48,7 +48,8 @@ int main(int argc, char *argv[]) { int N = options.N; int block_size = options.block_size_1d; - int num_blocks = 64; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; if (debug) { @@ -56,6 +57,8 @@ int main(int argc, char *argv[]) { std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); @@ -99,7 +102,7 @@ int main(int argc, char *argv[]) { end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - tot += tmp; + if (i >= skip_iterations) tot += tmp; if (debug) { std::cout << " gpu result=" << x[0] << " " << y[0] << "; time=" << (float) tmp / 1000 << " ms" << std::endl; @@ -111,5 +114,5 @@ int main(int argc, char *argv[]) { // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b4_sync.cu b/projects/resources/cuda/b4_sync.cu index 4d41f9fc..4d354156 100644 --- a/projects/resources/cuda/b4_sync.cu +++ b/projects/resources/cuda/b4_sync.cu @@ -48,7 +48,8 @@ int main(int argc, char *argv[]) { int N = options.N; int block_size = options.block_size_1d; - int num_blocks = 64; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; if (debug) { @@ -56,6 +57,8 @@ int main(int argc, char *argv[]) { std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); diff --git a/projects/resources/cuda/b5_default.cu b/projects/resources/cuda/b5_default.cu index fdd63909..1a905fab 100644 --- a/projects/resources/cuda/b5_default.cu +++ b/projects/resources/cuda/b5_default.cu @@ -99,7 +99,8 @@ int main(int argc, char *argv[]) { int N = options.N; int block_size = options.block_size_1d; - int num_blocks = 64; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; int M = 10; @@ -109,6 +110,8 @@ int main(int argc, char *argv[]) { std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); @@ -164,7 +167,7 @@ int main(int argc, char *argv[]) { end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - tot += tmp; + if (i >= skip_iterations) tot += tmp; if (debug) { std::cout << " gpu result=["; @@ -180,5 +183,5 @@ int main(int argc, char *argv[]) { // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b5_sync.cu b/projects/resources/cuda/b5_sync.cu index be03adec..08d4e84d 100644 --- a/projects/resources/cuda/b5_sync.cu +++ b/projects/resources/cuda/b5_sync.cu @@ -97,7 +97,8 @@ int main(int argc, char *argv[]) { int N = options.N; int block_size = options.block_size_1d; - int num_blocks = 64; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; int M = 10; @@ -107,6 +108,8 @@ int main(int argc, char *argv[]) { std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); @@ -151,7 +154,7 @@ int main(int argc, char *argv[]) { end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - tot += tmp; + if (i >= skip_iterations) tot += tmp; if (debug) { std::cout << " gpu result=["; @@ -167,5 +170,5 @@ int main(int argc, char *argv[]) { // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b6_default.cu b/projects/resources/cuda/b6_default.cu index 41923637..044a0965 100644 --- a/projects/resources/cuda/b6_default.cu +++ b/projects/resources/cuda/b6_default.cu @@ -143,17 +143,20 @@ int main(int argc, char *argv[]) { int N = options.N; int block_size = options.block_size_1d; - int num_blocks = 64; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; int num_features = 200; - int num_classes = 5; + int num_classes = 10; if (debug) { std::cout << "running b6 dag" << std::endl; std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); @@ -249,7 +252,7 @@ int main(int argc, char *argv[]) { end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - tot += tmp; + if (i >= skip_iterations) tot += tmp; if (debug) { std::cout << " gpu result=["; @@ -265,5 +268,5 @@ int main(int argc, char *argv[]) { // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b6_sync.cu b/projects/resources/cuda/b6_sync.cu index f3724718..1e0a3fc3 100644 --- a/projects/resources/cuda/b6_sync.cu +++ b/projects/resources/cuda/b6_sync.cu @@ -143,17 +143,20 @@ int main(int argc, char *argv[]) { int N = options.N; int block_size = options.block_size_1d; - int num_blocks = 64; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; int num_features = 200; - int num_classes = 5; + int num_classes = 10; if (debug) { std::cout << "running b6 sync" << std::endl; std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); @@ -246,7 +249,7 @@ int main(int argc, char *argv[]) { end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - tot += tmp; + if (i >= skip_iterations) tot += tmp; if (debug) { std::cout << " gpu result=["; @@ -262,5 +265,5 @@ int main(int argc, char *argv[]) { // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b7_default.cu b/projects/resources/cuda/b7_default.cu index 034f6ae8..24765b8a 100644 --- a/projects/resources/cuda/b7_default.cu +++ b/projects/resources/cuda/b7_default.cu @@ -97,7 +97,8 @@ int main(int argc, char *argv[]) { int iterations = 10; int block_size = options.block_size_1d; - int num_blocks = 32; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; int nnz = degree * N; @@ -107,6 +108,8 @@ int main(int argc, char *argv[]) { std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); @@ -196,7 +199,7 @@ int main(int argc, char *argv[]) { end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - tot += tmp; + if (i >= skip_iterations) tot += tmp; if (debug) { std::cout << " gpu result=["; @@ -212,5 +215,5 @@ int main(int argc, char *argv[]) { // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b7_sync.cu b/projects/resources/cuda/b7_sync.cu index 38f66b1d..7f4bc8f6 100644 --- a/projects/resources/cuda/b7_sync.cu +++ b/projects/resources/cuda/b7_sync.cu @@ -97,7 +97,8 @@ int main(int argc, char *argv[]) { int iterations = 10; int block_size = options.block_size_1d; - int num_blocks = 32; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; int nnz = degree * N; @@ -107,6 +108,8 @@ int main(int argc, char *argv[]) { std::cout << "N=" << N << std::endl; std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); @@ -186,7 +189,7 @@ int main(int argc, char *argv[]) { end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - tot += tmp; + if (i >= skip_iterations) tot += tmp; if (debug) { std::cout << " gpu result=["; @@ -202,5 +205,5 @@ int main(int argc, char *argv[]) { // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b8_default.cu b/projects/resources/cuda/b8_default.cu index f4a0775f..9a714e79 100644 --- a/projects/resources/cuda/b8_default.cu +++ b/projects/resources/cuda/b8_default.cu @@ -221,7 +221,8 @@ int main(int argc, char *argv[]) { int block_size_1d = options.block_size_1d; int block_size_2d = options.block_size_2d; - int num_blocks = 64; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; if (debug) { @@ -230,6 +231,8 @@ int main(int argc, char *argv[]) { std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size_1d << std::endl; std::cout << "block size 2d=" << block_size_2d << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); @@ -291,7 +294,8 @@ int main(int argc, char *argv[]) { dim3 block_size_2d_dim(block_size_2d, block_size_2d); dim3 grid_size(num_blocks, num_blocks); - dim3 grid_size_2(num_blocks / 2, num_blocks / 2); + int nb = 32; + dim3 grid_size_2(nb, nb); start = clock_type::now(); @@ -337,7 +341,7 @@ int main(int argc, char *argv[]) { cudaStreamSynchronize(s1); end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); - tot += tmp; + if (i >= skip_iterations) tot += tmp; if (debug) { std::cout << " gpu result=["; @@ -353,5 +357,5 @@ int main(int argc, char *argv[]) { // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b8_sync.cu b/projects/resources/cuda/b8_sync.cu index d08900f6..41dfdb73 100644 --- a/projects/resources/cuda/b8_sync.cu +++ b/projects/resources/cuda/b8_sync.cu @@ -221,7 +221,8 @@ int main(int argc, char *argv[]) { int block_size_1d = options.block_size_1d; int block_size_2d = options.block_size_2d; - int num_blocks = 64; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; int err = 0; if (debug) { @@ -230,6 +231,8 @@ int main(int argc, char *argv[]) { std::cout << "num executions=" << num_executions << std::endl; std::cout << "block size 1d=" << block_size_1d << std::endl; std::cout << "block size 2d=" << block_size_2d << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; } auto start = clock_type::now(); diff --git a/projects/resources/cuda/options.hpp b/projects/resources/cuda/options.hpp index 1f00cc86..a0a4909a 100644 --- a/projects/resources/cuda/options.hpp +++ b/projects/resources/cuda/options.hpp @@ -11,6 +11,8 @@ #define NUM_ITER 30 #define DEFAULT_BLOCK_SIZE_1D 32 #define DEFAULT_BLOCK_SIZE_2D 8 +#define DEFAULT_NUM_BLOCKS 64 +#define DEFAULT_SKIP 3 ////////////////////////////// ////////////////////////////// @@ -22,7 +24,9 @@ struct Options { int debug = DEBUG; int block_size_1d = DEFAULT_BLOCK_SIZE_1D; int block_size_2d = DEFAULT_BLOCK_SIZE_2D; + int num_blocks = DEFAULT_NUM_BLOCKS; int N = 0; + int skip_iterations = DEFAULT_SKIP; ////////////////////////////// ////////////////////////////// @@ -34,11 +38,13 @@ struct Options { {"N", required_argument, 0, 'n'}, {"block_size_1d", required_argument, 0, 'b'}, {"block_size_2d", required_argument, 0, 'c'}, + {"num_blocks", required_argument, 0, 'g'}, + {"skip_first", required_argument, 0, 's'}, {0, 0, 0, 0}}; // getopt_long stores the option index here; int option_index = 0; - while ((opt = getopt_long(argc, argv, "dt:n:b:c:", long_options, &option_index)) != EOF) { + while ((opt = getopt_long(argc, argv, "dt:n:b:c:g:s:", long_options, &option_index)) != EOF) { switch (opt) { case 'd': debug = true; @@ -55,6 +61,12 @@ struct Options { case 'c': block_size_2d = atoi(optarg); break; + case 'g': + num_blocks = atoi(optarg); + break; + case 's': + skip_iterations = atoi(optarg); + break; default: break; } diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index bb93561c..90fa5ba2 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -180,7 +180,7 @@ def __init__(self, benchmark: BenchmarkResult): self.nb_l = None self.num_features = 200 # self.nb_feat_log_prob_np.shape[1] - self.num_classes = 5 # self.nb_feat_log_prob_np.shape[0] + self.num_classes = 10 # self.nb_feat_log_prob_np.shape[0] self.num_blocks_size = 64 self.num_blocks_feat = 64 diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index e0cb9ca3..6d340b36 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -12,21 +12,21 @@ # Benchmark settings; benchmarks = [ - "b1", + # "b1", # "b4", # "b5", - # "b6", + "b6", # "b7", # "b8", ] num_elem = { - "b1": [2000000],# , 5000000, 10000000, 20000000, 40000000], - "b4": [2000000],# , 5000000, 10000000, 20000000, 40000000], - "b5": [2000000],#, 5000000, 10000000, 15000000, 20000000], - "b6": [20000],#, 50000, 200000, 500000, 800000], - "b7": [50000],#, 100000, 150000, 200000, 250000], - "b8": [800],#, 1600, 2400, 4000, 4800], + "b1": [2000000, 5000000, 10000000, 20000000, 40000000], + "b4": [2000000, 5000000, 10000000, 20000000, 40000000], + "b5": [2000000, 5000000, 10000000, 15000000, 20000000], + "b6": [20000, 50000, 200000, 500000, 800000], + "b7": [50000, 100000, 150000, 200000, 250000], + "b8": [800, 1600, 2400, 4000, 4800], } exec_policies = ["default", "sync"] @@ -37,8 +37,8 @@ dependency_policies = ["with-const"] -block_sizes_1d = [32]#, 128, 256, 1024] -block_sizes_2d = [8]#, 8, 16, 32] +block_sizes_1d = [32, 128, 256, 1024] +block_sizes_2d = [8, 8, 16, 32] ############################## ############################## diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index a88de32c..a0c70449 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,8 +21,8 @@ from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot -INPUT_DATE = "2020_07_03_10_48_22_grcuda" -OUTPUT_DATE = "2020_07_032" +INPUT_DATE = "2020_07_06_13_21_07_grcuda" +OUTPUT_DATE = "2020_07_06" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index e3c869e9..58cbf8b5 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -26,9 +26,9 @@ ############################## -INPUT_DATE_GRCUDA = "2020_07_03_10_48_22_grcuda" -INPUT_DATE_CUDA = "2020_07_03_09_37_24_cuda" -OUTPUT_DATE = "2020_07_032" +INPUT_DATE_GRCUDA = "2020_07_06_13_21_07_grcuda" +INPUT_DATE_CUDA = "2020_07_06_19_25_26_cuda" +OUTPUT_DATE = "2020_07_06" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} From 2c4ac35ff0884d47d60c89bda60c207ca894c0e0 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 8 Jul 2020 10:08:41 +0200 Subject: [PATCH 115/236] added baseline times to 1-row plots --- .../python/plotting/plot_speedup_baseline.py | 16 ++++++++---- .../plotting/plot_speedup_grcuda_cuda.py | 16 ++++++++---- .../plotting/plot_theoretical_performance.py | 26 ++++++++++++++----- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index a0c70449..247ca90c 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -147,6 +147,12 @@ def build_exec_time_plot_1_row(data, gridspec, y): # Turn off tick lines; ax.xaxis.grid(False) + # Add baseline execution time annotations (median of execution time across blocks); + ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.2), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + for i, l in enumerate(labels): + baseline_median = np.median(data[data["size"] == int(l)]["baseline_time_sec"]) + ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.27), fontsize=9, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + # Legend; if y == 0: legend_labels = [f"1D={x.split(',')[0]}, 2D={x.split(',')[1]}" for x in data["block_size_str"].unique()] @@ -155,7 +161,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): for i in range(len(legend_labels))] leg = fig.legend(custom_lines, legend_labels, - bbox_to_anchor=(0.95, 1), fontsize=12, ncol=len(legend_labels) // 2, handletextpad=0.1) + bbox_to_anchor=(0.955, 0.94), fontsize=12, ncol=len(legend_labels), handletextpad=0.1) leg.set_title("Block size:") leg._legend_box.align = "left" @@ -215,11 +221,11 @@ def build_exec_time_plot_1_row(data, gridspec, y): benchmark_list = sorted(data["benchmark"].unique()) num_col = len(benchmark_list) num_row = 1 - fig = plt.figure(figsize=(2.7 * num_col, 4.2 * num_row)) + fig = plt.figure(figsize=(2.6 * num_col, 4.1 * num_row)) gs = gridspec.GridSpec(num_row, num_col) plt.subplots_adjust(top=0.65, - bottom=0.18, - left=0.12, + bottom=0.21, + left=0.1, right=0.95, hspace=1.1, wspace=0.15) @@ -231,7 +237,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") plt.annotate("Speedup over\nserial scheduling", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Execution time speedup\nover serial kernel scheduling", fontsize=20, x=.05, y=0.98, ha="left") + plt.suptitle("Execution time speedup\nover serial kernel scheduling", fontsize=20, x=.05, y=0.92, ha="left") save_plot(PLOT_DIR, "speedup_baseline_1_row_{}.{}", OUTPUT_DATE) diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 58cbf8b5..a492b2dc 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -182,6 +182,12 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): # Turn off tick lines; ax.xaxis.grid(False) + # Add baseline execution time annotations (median of execution time across blocks); + ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.22), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + for i, l in enumerate(labels): + baseline_median = np.median(data[data["size"] == int(l)]["baseline_time_sec_cuda"]) + ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.29), fontsize=9, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + # Legend; if x == 0 and y == 0: legend_labels = [f"1D={x.split(',')[0]}, 2D={x.split(',')[1]}" for x in data["block_size_str"].unique()] @@ -245,7 +251,7 @@ def ridgeplot(data): # Fix the horizontal axes so that they are between 0.5 and 1.25; def set_x_width(label="", color="#2f2f2f"): ax = plt.gca() - ax.set_xlim(left=0, right=2) + ax.set_xlim(left=0.8, right=1.2) g.map(set_x_width) # Titles and labels; @@ -346,11 +352,11 @@ def major_formatter(x, pos): num_row = len(policy_list) fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.75, - bottom=0.1, - left=0.12, + plt.subplots_adjust(top=0.8, + bottom=0.14, + left=0.1, right=0.95, - hspace=0.7, + hspace=0.8, wspace=0.15) exec_time_axes = [] diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index a5d8af51..ce775393 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -28,7 +28,7 @@ DEFAULT_RES_DIR = "../../../../data/results" INPUT_DATE_GRCUDA = "2020_07_02_19_13_55_grcuda" -OUTPUT_DATE = "2020_07_03" +OUTPUT_DATE = "2020_07_06" PLOT_DIR = "../../../../data/plots" B5_ITER = 10 @@ -178,7 +178,7 @@ def build_theoretical_time_plot(data, gridspec, x, y): return ax -def build_theoretical_time_plot_compact(data, gridspec, x, y): +def build_theoretical_time_plot_compact(data, gridspec, x, y, baseline_labels=None): data["size_str"] = data["size"].astype(str) @@ -235,6 +235,13 @@ def build_theoretical_time_plot_compact(data, gridspec, x, y): # Turn off tick lines; ax.xaxis.grid(False) + # Add baseline execution time annotations (median of execution time across blocks); + if baseline_labels: + ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.22), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + for i, l in enumerate(labels): + baseline_median = baseline_labels[i] + ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.29), fontsize=9, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + # Legend; if x == 0 and y == 0: legend_labels = [f"1D={x.split(',')[0]}, 2D={x.split(',')[1]}" for x in data["block_size_str"].unique()] @@ -330,18 +337,23 @@ def build_theoretical_time_plot_compact(data, gridspec, x, y): num_row = len(policy_list) fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.75, - bottom=0.1, - left=0.12, + plt.subplots_adjust(top=0.8, + bottom=0.14, + left=0.1, right=0.95, - hspace=0.7, + hspace=0.8, wspace=0.15) exec_time_axes = [] for b_i, b in enumerate(benchmark_list): + baselines = [] + tmp_data = data[(data["exec_policy"] == "sync") & (data["benchmark"] == b)] + labels = sorted(tmp_data["size"].unique()) + for i, l in enumerate(labels): + baselines += [np.median(tmp_data[tmp_data["size"] == int(l)]["theoretical_time_sec"])] for p_i, p in enumerate(policy_list): curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) - exec_time_axes += [build_theoretical_time_plot_compact(curr_res, gs, p_i, b_i)] + exec_time_axes += [build_theoretical_time_plot_compact(curr_res, gs, p_i, b_i, baseline_labels=baselines)] plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") From c2a996d31a15cfd4d8d1f6933c43577d8d39061c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 10 Jul 2020 16:53:44 +0200 Subject: [PATCH 116/236] updated results for b7 and b8 --- RESULTS.md | 18 +- projects/resources/cuda/b7_default.cu | 157 ++++++- projects/resources/cuda/b7_sync.cu | 156 ++++++- projects/resources/cuda/b8_default.cu | 18 +- projects/resources/cuda/b8_sync.cu | 12 +- .../python/benchmark/bench/bench_7.py | 31 +- .../python/benchmark/bench/bench_72.py | 391 ++++++++++++++++++ .../python/benchmark/bench/bench_8.py | 10 +- .../python/benchmark/benchmark_main.py | 2 +- .../python/benchmark/benchmark_wrapper.py | 8 +- .../resources/python/plotting/load_data.py | 5 +- .../python/plotting/plot_speedup_baseline.py | 9 +- .../plotting/plot_speedup_grcuda_cuda.py | 6 +- 13 files changed, 760 insertions(+), 63 deletions(-) create mode 100644 projects/resources/python/benchmark/bench/bench_72.py diff --git a/RESULTS.md b/RESULTS.md index bcf1c263..d33a046d 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -34,12 +34,14 @@ A: x^2 ──┐ B: x^2 ──┘ ``` + ### Machine Learning Ensemble (bench_6) @@ -69,12 +71,14 @@ NB-4: exponential, element-wise (...) -> NB-3(const R1,const AMAX,L) ─> NB-4(R1,const L) ─> SOFTMAX(R2) ──┘ ``` + ### HITS (bench_7) @@ -98,7 +102,7 @@ Structure of the computation (read-only parameters that do not influence the DAG └─> SPMV(const A1,H2) ┴─> SUM(const H2,H_norm) ┴─> DIVIDE(H1,const H2,const H_norm) ─> CPU: H_norm=0 ─> (repeat) ``` - + ### Image Processing Pipeline (bench_8) @@ -127,17 +132,18 @@ BLUR(image,blur2) ─> SOBEL(blur2,mask2) ┬─> MAX(mask2) ──┬─> EXTEN SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ────────────────────┴─> COMBINE(sharpened,blur2,mask2,image2) ┴─> COMBINE(image2,blur1,mask1,image3) ``` + ## Plots -![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_1_row_2020_07_06.png) +![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_1_row_2020_07_10.png) In general, **DAG scheduling allows better GPU resource usage**: when the data-set size does not fill the GPU computational resources, DAG scheduling provides speedups close to the theoretical optimum. As expected, the speedup is less significant as the data-set size increases, as each kernel can fully use the GPU resources by itself. @@ -147,7 +153,7 @@ In general, **DAG scheduling allows better GPU resource usage**: when the data-s As rule of thumb, **smaller blocks provide better speedup**: this is likely connected to the GPU architecture being better at parallelizing smaller blocks. In general, small blocks almost always provide better absolute performance, for similar reasons. Kernels in the benchmarks leverage grid-striding, meaning that the number of blocks is independent from the size of data to be processed and each thread becomes more computationally intensive as the data-size increases (instead of being constant). Currently, kernels do not use shared memory whose size depends on block size; if that was the case, bigger blocks might have an advantage. -![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_2020_07_06.png) +![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_2020_07_10.png) Performance of serial and DAG GrCUDA scheduling has been compared to the same benchmarks implemented directly in C++ and CUDA. The experimental setup and the kernels are exactly the same. In the case of CUDA asynchronous kernel execution, dependendencies and synchronization points have been computed by hand, instead of automatically. This provides a **comparison of how the overhead introduced by GrCUDA impacts the total execution time** compared to lower-level kernel scheduling. @@ -155,6 +161,6 @@ In the case of serial execution, CUDA is sligthly faster than GrCUDA, as expecte As for asynchronous DAG scheduling, we see how GrCUDA is actually **faster** than CUDA in most cases. It is not clear how GrCUDA is actually faster than CUDA. The only difference is that GrCUDA uses `nvrtc` (Nvidia runtime compilation library), instead of `nvcc`. Whether this provides faster kernel launches, or generates faster code, is yet to be checked. It is likely that `nvrtc` uses the same routines as `nvcc` for compilation, although kernel launches might be faster. -![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_grcuda_cuda_compact_2020_07_06.png) +![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_grcuda_cuda_compact_2020_07_10.png) -![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_grcuda_cuda_2020_07_06.png) +![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_grcuda_cuda_2020_07_10.png) diff --git a/projects/resources/cuda/b7_default.cu b/projects/resources/cuda/b7_default.cu index 24765b8a..6f84dab2 100644 --- a/projects/resources/cuda/b7_default.cu +++ b/projects/resources/cuda/b7_default.cu @@ -13,6 +13,10 @@ namespace chrono = std::chrono; using clock_type = chrono::high_resolution_clock; +#define WARP_SIZE 32 +#define THREADS_PER_VECTOR 4 +#define MAX_NUM_VECTORS_PER_BLOCK (1024 / THREADS_PER_VECTOR) + ///////////////////////////// ///////////////////////////// @@ -27,6 +31,118 @@ extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, } } +extern "C" __global__ void spmv2(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { + // Thread ID in block + int t = threadIdx.x; + + // Thread ID in warp + int lane = t & (WARP_SIZE - 1); + + // Number of warps per block + int warpsPerBlock = blockDim.x / WARP_SIZE; + + // One row per warp + int row = (blockIdx.x * warpsPerBlock) + (t / WARP_SIZE); + + extern __shared__ volatile float vals[]; + + if (row < num_rows) { + int rowStart = ptr[row]; + int rowEnd = ptr[row+1]; + float sum = 0; + + // Use all threads in a warp accumulate multiplied elements + for (int j = rowStart + lane; j < rowEnd; j += WARP_SIZE) { + int col = idx[j]; + sum += val[j] * vec[col]; + } + vals[t] = sum; + __syncthreads(); + + // Reduce partial sums + if (lane < 16) vals[t] += vals[t + 16]; + if (lane < 8) vals[t] += vals[t + 8]; + if (lane < 4) vals[t] += vals[t + 4]; + if (lane < 2) vals[t] += vals[t + 2]; + if (lane < 1) vals[t] += vals[t + 1]; + __syncthreads(); + + // Write result + if (lane == 0) { + res[row] = vals[t]; + } + } +} + +extern "C" __global__ void spmv3(int* cudaRowCounter, int* d_ptr, int* d_cols, int* d_val, float* d_vector, float* d_out, int N) { + int i; + float sum; + int row; + int rowStart, rowEnd; + int laneId = threadIdx.x % THREADS_PER_VECTOR; //lane index in the vector + int vectorId = threadIdx.x / THREADS_PER_VECTOR; //vector index in the thread block + int warpLaneId = threadIdx.x & 31; //lane index in the warp + int warpVectorId = warpLaneId / THREADS_PER_VECTOR; //vector index in the warp + + __shared__ volatile int space[MAX_NUM_VECTORS_PER_BLOCK][2]; + + // Get the row index + if (warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / THREADS_PER_VECTOR); + } + // Broadcast the value to other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff, row, 0) + warpVectorId; + + while (row < N) { + + // Use two threads to fetch the row offset + if (laneId < 2) { + space[vectorId][laneId] = d_ptr[row + laneId]; + } + rowStart = space[vectorId][0]; + rowEnd = space[vectorId][1]; + + sum = 0; + // Compute dot product + if (THREADS_PER_VECTOR == 32) { + + // Ensure aligned memory access + i = rowStart - (rowStart & (THREADS_PER_VECTOR - 1)) + laneId; + + // Process the unaligned part + if (i >= rowStart && i < rowEnd) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + + // Process the aligned part + for (i += THREADS_PER_VECTOR; i < rowEnd; i += THREADS_PER_VECTOR) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } else { + for (i = rowStart + laneId; i < rowEnd; i += THREADS_PER_VECTOR) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } + // Intra-vector reduction + for (i = THREADS_PER_VECTOR >> 1; i > 0; i >>= 1) { + sum += __shfl_down_sync(0xffffffff,sum, i); + } + + // Save the results + if (laneId == 0) { + d_out[row] = sum; + } + + // Get a new row index + if(warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / THREADS_PER_VECTOR); + } + // Broadcast the row index to the other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff,row, 0) + warpVectorId; + } +} + + __inline__ __device__ float warp_reduce(float val) { int warp_size = 32; for (int offset = warp_size / 2; offset > 0; offset /= 2) @@ -69,7 +185,7 @@ void random_coo(int* x, int *y, int *val, int N, int degree) { } } -void reset(float *auth1, float *auth2, float *hub1, float* hub2, float *auth_norm, float *hub_norm, int N) { +void reset(float *auth1, float *auth2, float *hub1, float* hub2, float *auth_norm, float *hub_norm, int N, cudaStream_t s1, cudaStream_t s2) { for (int i = 0; i < N; i++) { auth1[i] = 1; auth2[i] = 1; @@ -78,6 +194,14 @@ void reset(float *auth1, float *auth2, float *hub1, float* hub2, float *auth_nor } auth_norm[0] = 0; hub_norm[0] = 0; + + // cudaMemPrefetchAsync(auth1, N * sizeof(int), 0, s2); + // cudaMemPrefetchAsync(auth2, N * sizeof(int), 0, s1); + // cudaMemPrefetchAsync(hub1, N * sizeof(int), 0, s1); + // cudaMemPrefetchAsync(hub2, N * sizeof(int), 0, s2); + // cudaMemPrefetchAsync(auth_norm, sizeof(float), 0); + // cudaMemPrefetchAsync(hub_norm, sizeof(float), 0); + // cudaDeviceSynchronize(); } ///////////////////////////// @@ -93,11 +217,11 @@ int main(int argc, char *argv[]) { int num_executions = options.num_iter; int N = options.N; - int degree = 50; + int degree = 3; int iterations = 10; int block_size = options.block_size_1d; - int num_blocks = options.num_blocks; + int num_blocks = 32; //options.num_blocks; int skip_iterations = options.skip_iterations; int err = 0; @@ -113,7 +237,7 @@ int main(int argc, char *argv[]) { } auto start = clock_type::now(); - int *ptr, *idx, *val, *ptr2, *idx2, *val2; + int *ptr, *idx, *val, *ptr2, *idx2, *val2, *rowCounter1, *rowCounter2; float *auth1, *auth2, *hub1, *hub2, *auth_norm, *hub_norm; err = cudaMallocManaged(&ptr, sizeof(int) * (N + 1)); @@ -122,6 +246,8 @@ int main(int argc, char *argv[]) { err = cudaMallocManaged(&idx2, sizeof(int) * nnz); err = cudaMallocManaged(&val, sizeof(int) * nnz); err = cudaMallocManaged(&val2, sizeof(int) * nnz); + err = cudaMallocManaged(&rowCounter1, sizeof(int)); + err = cudaMallocManaged(&rowCounter2, sizeof(int)); err = cudaMallocManaged(&auth1, sizeof(float) * N); err = cudaMallocManaged(&auth2, sizeof(float) * N); @@ -160,7 +286,9 @@ int main(int argc, char *argv[]) { for (int i = 0; i < num_executions; i++) { if (debug) std::cout << "\n-- iter=" << i << std::endl; auto start_tmp = clock_type::now(); - reset(auth1, auth2, hub1, hub2, auth_norm, hub_norm, N); + reset(auth1, auth2, hub1, hub2, auth_norm, hub_norm, N, s1, s2); + rowCounter1[0] = 0; + rowCounter2[0] = 0; auto end_tmp = clock_type::now(); auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; @@ -168,13 +296,25 @@ int main(int argc, char *argv[]) { start = clock_type::now(); for (int iter = 0; iter < iterations; iter++) { + + // cudaMemPrefetchAsync(auth1, N * sizeof(float), 0, s2); + // cudaMemPrefetchAsync(auth2, N * sizeof(float), 0, s1); + // cudaMemPrefetchAsync(hub1, N * sizeof(float), 0, s1); + // cudaMemPrefetchAsync(hub2, N * sizeof(float), 0, s2); + // cudaMemPrefetchAsync(auth_norm, sizeof(float), 0, s1); + // cudaMemPrefetchAsync(hub_norm, sizeof(float), 0, s2); + cudaEvent_t e1, e2; cudaEventCreate(&e1); cudaEventCreate(&e2); - spmv<<>>(ptr2, idx2, val2, hub1, auth2, N, nnz); + int nb = ceil(N / ((float) block_size)); + + // spmv<<>>(ptr2, idx2, val2, hub1, auth2, N, nnz); + spmv3<<>>(rowCounter1, ptr2, idx2, val2, hub1, auth2, N); err = cudaEventRecord(e1, s1); - spmv<<>>(ptr, idx, val, auth1, hub2, N, nnz); + // spmv<<>>(ptr, idx, val, auth1, hub2, N, nnz); + spmv3<<>>(rowCounter2, ptr, idx, val, auth1, hub2, N); err = cudaEventRecord(e2, s2); sum<<>>(auth2, auth_norm, N); @@ -191,8 +331,9 @@ int main(int argc, char *argv[]) { err = cudaStreamSynchronize(s1); err = cudaStreamSynchronize(s2); auth_norm[0] = 0; - hub_norm[0] = 0; + rowCounter1[0] = 0; + rowCounter2[0] = 0; if (debug && err) std::cout << err << std::endl; } diff --git a/projects/resources/cuda/b7_sync.cu b/projects/resources/cuda/b7_sync.cu index 7f4bc8f6..870a13f1 100644 --- a/projects/resources/cuda/b7_sync.cu +++ b/projects/resources/cuda/b7_sync.cu @@ -13,6 +13,10 @@ namespace chrono = std::chrono; using clock_type = chrono::high_resolution_clock; +#define WARP_SIZE 32 +#define THREADS_PER_VECTOR 4 +#define MAX_NUM_VECTORS_PER_BLOCK (1024 / THREADS_PER_VECTOR) + ///////////////////////////// ///////////////////////////// @@ -27,6 +31,119 @@ extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, } } + +extern "C" __global__ void spmv2(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { + // Thread ID in block + int t = threadIdx.x; + + // Thread ID in warp + int lane = t & (WARP_SIZE - 1); + + // Number of warps per block + int warpsPerBlock = blockDim.x / WARP_SIZE; + + // One row per warp + int row = (blockIdx.x * warpsPerBlock) + (t / WARP_SIZE); + + extern __shared__ volatile float vals[]; + + if (row < num_rows) { + int rowStart = ptr[row]; + int rowEnd = ptr[row+1]; + float sum = 0; + + // Use all threads in a warp accumulate multiplied elements + for (int j = rowStart + lane; j < rowEnd; j += WARP_SIZE) { + int col = idx[j]; + sum += val[j] * vec[col]; + } + vals[t] = sum; + __syncthreads(); + + // Reduce partial sums + if (lane < 16) vals[t] += vals[t + 16]; + if (lane < 8) vals[t] += vals[t + 8]; + if (lane < 4) vals[t] += vals[t + 4]; + if (lane < 2) vals[t] += vals[t + 2]; + if (lane < 1) vals[t] += vals[t + 1]; + __syncthreads(); + + // Write result + if (lane == 0) { + res[row] = vals[t]; + } + } +} + +extern "C" __global__ void spmv3(int* cudaRowCounter, int* d_ptr, int* d_cols, int* d_val, float* d_vector, float* d_out, int N) { + int i; + float sum; + int row; + int rowStart, rowEnd; + int laneId = threadIdx.x % THREADS_PER_VECTOR; //lane index in the vector + int vectorId = threadIdx.x / THREADS_PER_VECTOR; //vector index in the thread block + int warpLaneId = threadIdx.x & 31; //lane index in the warp + int warpVectorId = warpLaneId / THREADS_PER_VECTOR; //vector index in the warp + + __shared__ volatile int space[MAX_NUM_VECTORS_PER_BLOCK][2]; + + // Get the row index + if (warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / THREADS_PER_VECTOR); + } + // Broadcast the value to other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff, row, 0) + warpVectorId; + + while (row < N) { + + // Use two threads to fetch the row offset + if (laneId < 2) { + space[vectorId][laneId] = d_ptr[row + laneId]; + } + rowStart = space[vectorId][0]; + rowEnd = space[vectorId][1]; + + sum = 0; + // Compute dot product + if (THREADS_PER_VECTOR == 32) { + + // Ensure aligned memory access + i = rowStart - (rowStart & (THREADS_PER_VECTOR - 1)) + laneId; + + // Process the unaligned part + if (i >= rowStart && i < rowEnd) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + + // Process the aligned part + for (i += THREADS_PER_VECTOR; i < rowEnd; i += THREADS_PER_VECTOR) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } else { + for (i = rowStart + laneId; i < rowEnd; i += THREADS_PER_VECTOR) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } + // Intra-vector reduction + for (i = THREADS_PER_VECTOR >> 1; i > 0; i >>= 1) { + sum += __shfl_down_sync(0xffffffff,sum, i); + } + + // Save the results + if (laneId == 0) { + d_out[row] = sum; + } + + // Get a new row index + if(warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / THREADS_PER_VECTOR); + } + // Broadcast the row index to the other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff,row, 0) + warpVectorId; + } +} + + __inline__ __device__ float warp_reduce(float val) { int warp_size = 32; for (int offset = warp_size / 2; offset > 0; offset /= 2) @@ -46,8 +163,9 @@ extern "C" __global__ void sum(const float *x, float* z, int N) { } extern "C" __global__ void divide(const float* x, float *y, float *val, int n) { + float v = val[0]; for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { - y[i] = x[i] / val[0]; + y[i] = x[i] / v; } } @@ -78,6 +196,14 @@ void reset(float *auth1, float *auth2, float *hub1, float* hub2, float *auth_nor } auth_norm[0] = 0; hub_norm[0] = 0; + + // cudaMemPrefetchAsync(auth1, N * sizeof(float), 0); + // cudaMemPrefetchAsync(auth2, N * sizeof(float), 0); + // cudaMemPrefetchAsync(hub1, N * sizeof(float), 0); + // cudaMemPrefetchAsync(hub2, N * sizeof(float), 0); + // cudaMemPrefetchAsync(auth_norm, sizeof(float), 0); + // cudaMemPrefetchAsync(hub_norm, sizeof(float), 0); + // cudaDeviceSynchronize(); } ///////////////////////////// @@ -93,11 +219,11 @@ int main(int argc, char *argv[]) { int num_executions = options.num_iter; int N = options.N; - int degree = 50; + int degree = 3; int iterations = 10; int block_size = options.block_size_1d; - int num_blocks = options.num_blocks; + int num_blocks = 32; // options.num_blocks; int skip_iterations = options.skip_iterations; int err = 0; @@ -113,7 +239,7 @@ int main(int argc, char *argv[]) { } auto start = clock_type::now(); - int *ptr, *idx, *val, *ptr2, *idx2, *val2; + int *ptr, *idx, *val, *ptr2, *idx2, *val2, *rowCounter1, *rowCounter2; float *auth1, *auth2, *hub1, *hub2, *auth_norm, *hub_norm; err = cudaMallocManaged(&ptr, sizeof(int) * (N + 1)); @@ -122,6 +248,8 @@ int main(int argc, char *argv[]) { err = cudaMallocManaged(&idx2, sizeof(int) * nnz); err = cudaMallocManaged(&val, sizeof(int) * nnz); err = cudaMallocManaged(&val2, sizeof(int) * nnz); + err = cudaMallocManaged(&rowCounter1, sizeof(int)); + err = cudaMallocManaged(&rowCounter2, sizeof(int)); err = cudaMallocManaged(&auth1, sizeof(float) * N); err = cudaMallocManaged(&auth2, sizeof(float) * N); @@ -155,6 +283,8 @@ int main(int argc, char *argv[]) { if (debug) std::cout << "\n-- iter=" << i << std::endl; auto start_tmp = clock_type::now(); reset(auth1, auth2, hub1, hub2, auth_norm, hub_norm, N); + rowCounter1[0] = 0; + rowCounter2[0] = 0; auto end_tmp = clock_type::now(); auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; @@ -163,10 +293,22 @@ int main(int argc, char *argv[]) { for (int iter = 0; iter < iterations; iter++) { - spmv<<>>(ptr2, idx2, val2, hub1, auth2, N, nnz); + // cudaMemPrefetchAsync(auth1, N * sizeof(float), 0); + // cudaMemPrefetchAsync(auth2, N * sizeof(float), 0); + // cudaMemPrefetchAsync(hub1, N * sizeof(float), 0); + // cudaMemPrefetchAsync(hub2, N * sizeof(float), 0); + // cudaMemPrefetchAsync(auth_norm, sizeof(float), 0); + // cudaMemPrefetchAsync(hub_norm, sizeof(float), 0); + // cudaDeviceSynchronize(); + + int nb = ceil(N / ((float) block_size)); + + // spmv<<>>(ptr2, idx2, val2, hub1, auth2, N, nnz); + spmv3<<>>(rowCounter1, ptr2, idx2, val2, hub1, auth2, N); err = cudaDeviceSynchronize(); - spmv<<>>(ptr, idx, val, auth1, hub2, N, nnz); + // spmv<<>>(ptr, idx, val, auth1, hub2, N, nnz); + spmv3<<>>(rowCounter2, ptr, idx, val, auth1, hub2, N); err = cudaDeviceSynchronize(); sum<<>>(auth2, auth_norm, N); @@ -183,6 +325,8 @@ int main(int argc, char *argv[]) { auth_norm[0] = 0; hub_norm[0] = 0; + rowCounter1[0] = 0; + rowCounter2[0] = 0; if (debug && err) std::cout << err << std::endl; } diff --git a/projects/resources/cuda/b8_default.cu b/projects/resources/cuda/b8_default.cu index 9a714e79..954c7e5d 100644 --- a/projects/resources/cuda/b8_default.cu +++ b/projects/resources/cuda/b8_default.cu @@ -217,11 +217,11 @@ int main(int argc, char *argv[]) { int kernel_small_diameter = 3; int kernel_large_diameter = 5; - int kernel_unsharpen_diameter = 5; + int kernel_unsharpen_diameter = 3; int block_size_1d = options.block_size_1d; int block_size_2d = options.block_size_2d; - int num_blocks = options.num_blocks; + int num_blocks = 16; // options.num_blocks; int skip_iterations = options.skip_iterations; int err = 0; @@ -294,7 +294,7 @@ int main(int argc, char *argv[]) { dim3 block_size_2d_dim(block_size_2d, block_size_2d); dim3 grid_size(num_blocks, num_blocks); - int nb = 32; + int nb = num_blocks / 2; dim3 grid_size_2(nb, nb); start = clock_type::now(); @@ -305,9 +305,9 @@ int main(int argc, char *argv[]) { gaussian_blur<<>>(image, blurred_unsharpen, N, N, kernel_unsharpen, kernel_unsharpen_diameter); - sobel<<>>(blurred_small, mask_small, N, N); + sobel<<>>(blurred_small, mask_small, N, N); - sobel<<>>(blurred_large, mask_large, N, N); + sobel<<>>(blurred_large, mask_large, N, N); cudaEvent_t e1, e2, e3, e4, e5; cudaEventCreate(&e1); @@ -338,6 +338,14 @@ int main(int argc, char *argv[]) { cudaEventRecord(e4, s2); cudaStreamWaitEvent(s1, e4, 0); combine<<>>(image2, blurred_small, mask_small, image3, N * N); + + // Extra + // cudaEventRecord(e1, s2); + // cudaEventRecord(e2, s3); + // cudaStreamWaitEvent(s1, e1, 0); + // cudaStreamWaitEvent(s1, e2, 0); + // combine<<>>(blurred_small, blurred_large, blurred_unsharpen, image3, N * N); + cudaStreamSynchronize(s1); end = clock_type::now(); auto tmp = chrono::duration_cast(end - start).count(); diff --git a/projects/resources/cuda/b8_sync.cu b/projects/resources/cuda/b8_sync.cu index 41dfdb73..7b7e935f 100644 --- a/projects/resources/cuda/b8_sync.cu +++ b/projects/resources/cuda/b8_sync.cu @@ -217,11 +217,11 @@ int main(int argc, char *argv[]) { int kernel_small_diameter = 3; int kernel_large_diameter = 5; - int kernel_unsharpen_diameter = 5; + int kernel_unsharpen_diameter = 3; int block_size_1d = options.block_size_1d; int block_size_2d = options.block_size_2d; - int num_blocks = options.num_blocks; + int num_blocks = 16; // options.num_blocks; int skip_iterations = options.skip_iterations; int err = 0; @@ -298,10 +298,10 @@ int main(int argc, char *argv[]) { gaussian_blur<<>>(image, blurred_unsharpen, N, N, kernel_unsharpen, kernel_unsharpen_diameter); cudaDeviceSynchronize(); - sobel<<>>(blurred_small, mask_small, N, N); + sobel<<>>(blurred_small, mask_small, N, N); cudaDeviceSynchronize(); - sobel<<>>(blurred_large, mask_large, N, N); + sobel<<>>(blurred_large, mask_large, N, N); cudaDeviceSynchronize(); maximum_kernel<<>>(mask_large, maximum, N * N); @@ -320,6 +320,10 @@ int main(int argc, char *argv[]) { cudaDeviceSynchronize(); combine<<>>(image2, blurred_small, mask_small, image3, N * N); + + // Extra + // combine<<>>(blurred_small, blurred_large, blurred_unsharpen, image3, N * N); + cudaDeviceSynchronize(); end = clock_type::now(); diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index ec39cb1e..c6859e8d 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -74,7 +74,7 @@ def __init__(self, benchmark: BenchmarkResult): super().__init__("b7", benchmark) self.size = 0 self.num_nnz = 0 - self.max_degree = 50 # Each vertex has 10 edges; + self.max_degree = 3 # Each vertex has 3 edges; self.num_iterations = 10 self.ptr = None self.idx = None @@ -140,16 +140,17 @@ def alloc(self, size: int, block_size: dict = None) -> None: def init(self): def create_csr_from_coo(x_in, y_in, val_in, size, degree=None): - ptr_out = np.zeros(size + 1, dtype=np.int32) - if degree: - ptr_out[1:] = degree + ptr_out = [degree] * (size + 1) + ptr_out[0] = 0 else: - values, count = np.unique(x_in, return_counts=True) - for v, c in zip(values, count): - ptr_out[v + 1] = c - - ptr_out = np.cumsum(ptr_out, dtype=np.int32) + # values, count = np.unique(x_in, return_counts=True) + ptr_out = [0] * (size + 1) + for x in x_in: + ptr_out[x] += 1 + for i in range(len(ptr_out) - 1): + ptr_out[i + 1] += ptr_out[i] + # ptr_out = np.cumsum(ptr_out, dtype=np.int32) return ptr_out, y_in, val_in self.random_seed = randint(0, 10000000) @@ -179,13 +180,13 @@ def create_csr_from_coo(x_in, y_in, val_in, size, degree=None): # self.val.copyFrom(int(np.int64(self.val_cpu.ctypes.data)), len(self.val)) # self.val2.copyFrom(int(np.int64(self.val2_cpu.ctypes.data)), len(self.val2)) for i in range(len(self.ptr_cpu)): - self.ptr[i] = int(self.ptr_cpu[i]) - self.ptr2[i] = int(self.ptr2_cpu[i]) + self.ptr[i] = self.ptr_cpu[i] + self.ptr2[i] = self.ptr2_cpu[i] for i in range(len(self.idx_cpu)): - self.idx[i] = int(self.idx_cpu[i]) - self.idx2[i] = int(self.idx2_cpu[i]) - self.val[i] = int(self.val_cpu[i]) - self.val2[i] = int(self.val2_cpu[i]) + self.idx[i] = self.idx_cpu[i] + self.idx2[i] = self.idx2_cpu[i] + self.val[i] = self.val_cpu[i] + self.val2[i] = self.val2_cpu[i] @time_phase("reset_result") def reset_result(self) -> None: diff --git a/projects/resources/python/benchmark/bench/bench_72.py b/projects/resources/python/benchmark/bench/bench_72.py new file mode 100644 index 00000000..0e108706 --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_72.py @@ -0,0 +1,391 @@ +# coding=utf-8 +import polyglot +from java.lang import System +import numpy as np +from random import random, randint, seed, sample + +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_THREADS_PER_BLOCK = 32 +THREADS_PER_VECTOR = 4 +MAX_NUM_VECTORS_PER_BLOCK = 1024 / THREADS_PER_VECTOR + +SPMV_KERNEL = """ +extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { + + for(int n = blockIdx.x * blockDim.x + threadIdx.x; n < num_rows; n += blockDim.x * gridDim.x) { + float sum = 0; + for (int i = ptr[n]; i < ptr[n + 1]; i++) { + sum += val[i] * vec[idx[i]]; + } + res[n] = sum; + } +} + +extern "C" __global__ void spmv3(int* cudaRowCounter, int* d_ptr, int* d_cols, int* d_val, float* d_vector, float* d_out, int N) { + int i; + int thread_per_vector = %d; + float sum; + int row; + int rowStart, rowEnd; + int laneId = threadIdx.x %% thread_per_vector; //lane index in the vector + int vectorId = threadIdx.x / thread_per_vector; //vector index in the thread block + int warpLaneId = threadIdx.x & 31; //lane index in the warp + int warpVectorId = warpLaneId / thread_per_vector; //vector index in the warp + + __shared__ volatile int space[%d][2]; + + // Get the row index + if (warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the value to other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff, row, 0) + warpVectorId; + + while (row < N) { + + // Use two threads to fetch the row offset + if (laneId < 2) { + space[vectorId][laneId] = d_ptr[row + laneId]; + } + rowStart = space[vectorId][0]; + rowEnd = space[vectorId][1]; + + sum = 0; + // Compute dot product + if (thread_per_vector == 32) { + + // Ensure aligned memory access + i = rowStart - (rowStart & (thread_per_vector - 1)) + laneId; + + // Process the unaligned part + if (i >= rowStart && i < rowEnd) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + + // Process the aligned part + for (i += thread_per_vector; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } else { + for (i = rowStart + laneId; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } + // Intra-vector reduction + for (i = thread_per_vector >> 1; i > 0; i >>= 1) { + sum += __shfl_down_sync(0xffffffff,sum, i); + } + + // Save the results + if (laneId == 0) { + d_out[row] = sum; + } + + // Get a new row index + if(warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the row index to the other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff,row, 0) + warpVectorId; + } +} +""" % (THREADS_PER_VECTOR, MAX_NUM_VECTORS_PER_BLOCK) + + +SUM_KERNEL = """ +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +extern "C" __global__ void sum(const float *x, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} +""" + +DIVIDE_KERNEL = """ +extern "C" __global__ void divide(const float* x, float *y, float *val, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = x[i] / val[0]; + } +} +""" + + +############################## +############################## + + +class Benchmark7(Benchmark): + """ + Compute the HITS algorithm on a graph. The algorithm is composed of repeated sparse matrix-vector multiplications + computed on a matrix and its transpose (outgoing and ingoing edges of a graph). The 2 matrix multiplications, + for each iteration, can be computed in parallel; + + ┌─> SPMV(const H1,A2) ┬─> SUM(const A2,A_norm) ┬─> DIVIDE(A1,const A2,const A_norm) ─> CPU: A_norm=0 ─> (repeat) + │ └─────────┐ │ + ─┤ ┌─────────│──────────────┘ + │ │ └──────────────┐ + └─> SPMV(const A1,H2) ┴─> SUM(const H2,H_norm) ┴─> DIVIDE(H1,const H2,const H_norm) ─> CPU: H_norm=0 ─> (repeat) + """ + + def __init__(self, benchmark: BenchmarkResult): + super().__init__("b7", benchmark) + self.size = 0 + self.num_nnz = 0 + self.max_degree = 3 # Each vertex has 3 edges; + self.num_iterations = 10 + self.ptr = None + self.idx = None + self.val = None + self.ptr2 = None + self.idx2 = None + self.val2 = None + self.auth1 = None + self.auth2 = None + self.hub1 = None + self.hub2 = None + self.auth_norm = None + self.hub_norm = None + self.row_cnt_1 = None + self.row_cnt_2 = None + + self.ptr_cpu = None + self.idx_cpu = None + self.val_cpu = None + self.ptr2_cpu = None + self.idx2_cpu = None + self.val2_cpu = None + + self.cpu_result = None + self.gpu_result = None + + self.num_blocks_size = 32 + self.block_size = None + + self.spmv_kernel = None + self.sum_kernel = None + self.divide_kernel = None + + @time_phase("allocation") + def alloc(self, size: int, block_size: dict = None) -> None: + self.size = size + self.num_nnz = size * self.max_degree + self.block_size = block_size["block_size_1d"] + + self.gpu_result = np.zeros(self.size) + + # Allocate vectors; + self.ptr = polyglot.eval(language="grcuda", string=f"int[{size + 1}]") + self.ptr2 = polyglot.eval(language="grcuda", string=f"int[{size + 1}]") + self.idx = polyglot.eval(language="grcuda", string=f"int[{self.num_nnz}]") + self.idx2 = polyglot.eval(language="grcuda", string=f"int[{self.num_nnz}]") + self.val = polyglot.eval(language="grcuda", string=f"int[{self.num_nnz}]") + self.val2 = polyglot.eval(language="grcuda", string=f"int[{self.num_nnz}]") + + self.auth1 = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.auth2 = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.hub1 = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.hub2 = polyglot.eval(language="grcuda", string=f"float[{size}]") + + self.auth_norm = polyglot.eval(language="grcuda", string=f"float[1]") + self.hub_norm = polyglot.eval(language="grcuda", string=f"float[1]") + + self.row_cnt_1 = polyglot.eval(language="grcuda", string=f"int[1]") + self.row_cnt_2 = polyglot.eval(language="grcuda", string=f"int[1]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + self.spmv_kernel = build_kernel(SPMV_KERNEL, "spmv3", + "pointer, const pointer, const pointer, const pointer, const pointer, pointer, sint32") + self.sum_kernel = build_kernel(SUM_KERNEL, "sum", "const pointer, pointer, sint32") + self.divide_kernel = build_kernel(DIVIDE_KERNEL, "divide", "const pointer, pointer, pointer, sint32") + + @time_phase("initialization") + def init(self): + + def create_csr_from_coo(x_in, y_in, val_in, size, degree=None): + if degree: + ptr_out = [degree] * (size + 1) + ptr_out[0] = 0 + else: + # values, count = np.unique(x_in, return_counts=True) + ptr_out = [0] * (size + 1) + for x in x_in: + ptr_out[x] += 1 + for i in range(len(ptr_out) - 1): + ptr_out[i + 1] += ptr_out[i] + # ptr_out = np.cumsum(ptr_out, dtype=np.int32) + return ptr_out, y_in, val_in + + self.random_seed = randint(0, 10000000) + seed(self.random_seed) + + # Create a random COO graph; + x = [0] * self.size * self.max_degree + y = [0] * self.size * self.max_degree + val = [1] * self.size * self.max_degree + for i in range(self.size): + # Create max_degree random edges; + edges = sorted(sample(range(self.size), self.max_degree)) + for j, e in enumerate(edges): + x[i * self.max_degree + j] = i + y[i * self.max_degree + j] = e + + # Turn the COO into CSR and CSC representations; + self.ptr_cpu, self.idx_cpu, self.val_cpu = create_csr_from_coo(x, y, val, self.size, degree=self.max_degree) + x2, y2 = zip(*sorted(zip(y, x))) + self.ptr2_cpu, self.idx2_cpu, self.val2_cpu = create_csr_from_coo(x2, y2, val, self.size) + + # Low-level copies from numpy array, they are faster but require slow casting to numpy arrays; + # self.ptr.copyFrom(int(np.int64(self.ptr_cpu.ctypes.data)), len(self.ptr)) + # self.ptr2.copyFrom(int(np.int64(self.ptr2_cpu.ctypes.data)), len(self.ptr2)) + # self.idx.copyFrom(int(np.int64(self.idx_cpu.ctypes.data)), len(self.idx)) + # self.idx2.copyFrom(int(np.int64(self.idx2_cpu.ctypes.data)), len(self.idx2)) + # self.val.copyFrom(int(np.int64(self.val_cpu.ctypes.data)), len(self.val)) + # self.val2.copyFrom(int(np.int64(self.val2_cpu.ctypes.data)), len(self.val2)) + for i in range(len(self.ptr_cpu)): + self.ptr[i] = self.ptr_cpu[i] + self.ptr2[i] = self.ptr2_cpu[i] + for i in range(len(self.idx_cpu)): + self.idx[i] = self.idx_cpu[i] + self.idx2[i] = self.idx2_cpu[i] + self.val[i] = self.val_cpu[i] + self.val2[i] = self.val2_cpu[i] + + @time_phase("reset_result") + def reset_result(self) -> None: + for i in range(self.size): + self.auth1[i] = 1.0 + self.auth2[i] = 1.0 + self.hub1[i] = 1.0 + self.hub2[i] = 1.0 + self.auth_norm[0] = 0.0 + self.hub_norm[0] = 0.0 + self.row_cnt_1[0] = 0 + self.row_cnt_2[0] = 0 + + def execute(self) -> object: + + num_blocks_spmv = int(np.ceil(self.size / self.block_size)) + + start_comp = System.nanoTime() + start = 0 + + for i in range(self.num_iterations): + # Authorities; + self.execute_phase(f"spmv_a_{i}", self.spmv_kernel(num_blocks_spmv, self.block_size, 4 * self.block_size), self.row_cnt_1, self.ptr2, + self.idx2, self.val2, self.hub1, self.auth2, self.size) + + # Hubs; + self.execute_phase(f"spmv_h_{i}", self.spmv_kernel(num_blocks_spmv, self.block_size, 4 * self.block_size), self.row_cnt_2, self.ptr, + self.idx, self.val, self.auth1, self.hub2, self.size) + + # Normalize authorities; + self.execute_phase(f"sum_a_{i}", self.sum_kernel(self.num_blocks_size, self.block_size), self.auth2, + self.auth_norm, self.size) + + # Normalize hubs; + self.execute_phase(f"sum_h_{i}", self.sum_kernel(self.num_blocks_size, self.block_size), self.hub2, + self.hub_norm, self.size) + + self.execute_phase(f"divide_a_{i}", self.divide_kernel(self.num_blocks_size, self.block_size), self.auth2, + self.auth1, self.auth_norm, self.size) + + self.execute_phase(f"divide_h_{i}", self.divide_kernel(self.num_blocks_size, self.block_size), self.hub2, + self.hub1, self.hub_norm, self.size) + + if self.time_phases: + start = System.nanoTime() + self.auth_norm[0] = 0.0 + self.hub_norm[0] = 0.0 + self.row_cnt_1[0] = 0.0 + self.row_cnt_2[0] = 0.0 + if self.time_phases: + end = System.nanoTime() + self.benchmark.add_phase({"name": f"norm_reset_{i}", "time_sec": (end - start) / 1_000_000_000}) + + # Add a final sync step to measure the real computation time; + if self.time_phases: + start = System.nanoTime() + tmp1 = self.auth1[0] + tmp2 = self.hub1[0] + end = System.nanoTime() + if self.time_phases: + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + self.benchmark.add_computation_time((end - start_comp) / 1_000_000_000) + # Compute GPU result; + for i in range(self.size): + self.gpu_result[i] = self.auth1[i] + self.hub1[i] + + self.benchmark.add_to_benchmark("gpu_result", 0) + if self.benchmark.debug: + BenchmarkResult.log_message( + f"\tgpu result: [" + ", ".join([f"{x:.4f}" for x in self.gpu_result[:10]]) + "...]") + + return self.gpu_result + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + + def spmv(ptr, idx, val, vec): + res = np.zeros(len(ptr) - 1) + for i in range(len(ptr) - 1): + curr_sum = 0 + start = int(ptr[i]) + end = int(ptr[i + 1]) + for j in range(start, end): + curr_sum += val[j] * vec[idx[j]] + res[i] = curr_sum + return res + + # Recompute the CPU result only if necessary; + start = System.nanoTime() + if self.current_iter == 0 or reinit: + # Re-initialize the random number generator with the same seed as the GPU to generate the same values; + seed(self.random_seed) + # Initialize the support device arrays; + N = self.size + + auth1 = np.ones(N) + hub1 = np.ones(N) + + # Main iteration; + for i in range(self.num_iterations): + # Authority; + auth2 = spmv(self.ptr2_cpu, self.idx2_cpu, self.val2_cpu, hub1) + auth2 = auth2 / np.sum(auth2) + # Hubs + hub2 = spmv(self.ptr_cpu, self.idx_cpu, self.val_cpu, auth1) + hub2 = hub2 / np.sum(hub2) + + auth1 = auth2 + hub1 = hub2 + self.cpu_result = hub1 + auth1 + + cpu_time = System.nanoTime() - start + + # Compare GPU and CPU results; + difference = 0 + for i in range(self.size): + difference += np.abs(self.cpu_result[i] - gpu_result[i]) + + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", str(difference)) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tcpu result: [" + ", ".join([f"{x:.4f}" for x in self.cpu_result[:10]]) + + "...]; " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index 1be1b0a4..45ddbbd7 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -226,7 +226,7 @@ def __init__(self, benchmark: BenchmarkResult): self.blurred_unsharpen = None self.image_unsharpen = None self.kernel_unsharpen = None - self.kernel_unsharpen_diameter = 5 + self.kernel_unsharpen_diameter = 3 self.kernel_unsharpen_variance = 5 self.unsharpen_amount = 0.5 @@ -238,7 +238,7 @@ def __init__(self, benchmark: BenchmarkResult): self.cpu_result = None self.gpu_result = None - self.num_blocks_per_processor = 64 # i.e. 8 * number of SM on the GTX960 + self.num_blocks_per_processor = 16 # i.e. 2 * number of SM on the GTX960 self.block_size_1d = DEFAULT_BLOCK_SIZE_1D self.block_size_2d = DEFAULT_BLOCK_SIZE_2D @@ -339,7 +339,7 @@ def execute(self) -> object: start = 0 # Blur - Small; - a = 32 + a = self.num_blocks_per_processor / 2 self.execute_phase("blur_small", self.gaussian_blur_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kernel_small_diameter**2), self.image, self.blurred_small, self.size, self.size, self.kernel_small, self.kernel_small_diameter) @@ -356,11 +356,11 @@ def execute(self) -> object: # Sobel filter (edge detection); self.execute_phase("sobel_small", - self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (self.block_size_2d, self.block_size_2d)), + self.sobel_kernel((a, a), (self.block_size_2d, self.block_size_2d)), self.blurred_small, self.mask_small, self.size, self.size) self.execute_phase("sobel_large", - self.sobel_kernel((self.num_blocks_per_processor, self.num_blocks_per_processor), (self.block_size_2d, self.block_size_2d)), + self.sobel_kernel((a, a), (self.block_size_2d, self.block_size_2d)), self.blurred_large, self.mask_large, self.size, self.size) # Extend large edge detection mask; diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index 5626b616..4d2580e1 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -7,7 +7,7 @@ from bench.bench_4 import Benchmark4 from bench.bench_5 import Benchmark5 from bench.bench_6 import Benchmark6 -from bench.bench_7 import Benchmark7 +from bench.bench_72 import Benchmark7 from bench.bench_8 import Benchmark8 from benchmark_result import BenchmarkResult diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 6d340b36..70644167 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -15,9 +15,9 @@ # "b1", # "b4", # "b5", - "b6", + # "b6", # "b7", - # "b8", + "b8", ] num_elem = { @@ -25,7 +25,7 @@ "b4": [2000000, 5000000, 10000000, 20000000, 40000000], "b5": [2000000, 5000000, 10000000, 15000000, 20000000], "b6": [20000, 50000, 200000, 500000, 800000], - "b7": [50000, 100000, 150000, 200000, 250000], + "b7": [2_000_000, 5_000_000, 7_500_000, 10_000_000, 15_000_000], "b8": [800, 1600, 2400, 4000, 4800], } @@ -38,7 +38,7 @@ dependency_policies = ["with-const"] block_sizes_1d = [32, 128, 256, 1024] -block_sizes_2d = [8, 8, 16, 32] +block_sizes_2d = [8, 8, 8, 8] ############################## ############################## diff --git a/projects/resources/python/plotting/load_data.py b/projects/resources/python/plotting/load_data.py index 065decc1..dba170ee 100755 --- a/projects/resources/python/plotting/load_data.py +++ b/projects/resources/python/plotting/load_data.py @@ -43,7 +43,8 @@ def load_data(input_date: str, skip_iter=0, remove_inf=True, remove_time_zero=Tr row = [] # Parse filename; benchmark, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, _, block_size_1d, block_size_2d = k.split("_")[6:-1] - row += [benchmark, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, int(block_size_1d), int(block_size_2d), block_size_1d + "," + block_size_2d] + block_size_str = block_size_1d + ",8" # block_size_1d + "," + block_size_2d] + row += [benchmark, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, int(block_size_1d), int(block_size_2d), block_size_str] # Retrieve other information; total_iterations = v["num_iterations"] @@ -124,7 +125,7 @@ def load_data_cuda(input_date: str, skip_iter=0, remove_inf=True, remove_time_ze tmp_data["size"] = int(size) tmp_data["block_size_1d"] = int(block_size_1d) tmp_data["block_size_2d"] = int(block_size_2d) - tmp_data["block_size_str"] = block_size_1d + "," + block_size_2d + tmp_data["block_size_str"] = block_size_1d + ",8" # block_size_1d + "," + block_size_2d tmp_data["total_iterations"] = int(total_iterations) data_tmp += [tmp_data] diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 247ca90c..2860eb11 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,8 +21,8 @@ from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot -INPUT_DATE = "2020_07_06_13_21_07_grcuda" -OUTPUT_DATE = "2020_07_06" +INPUT_DATE = "2020_07_10_15_42_44_grcuda" +OUTPUT_DATE = "2020_07_10" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} @@ -118,7 +118,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): labels_str = [str(x) for x in labels] # Set the same y limits in each plot; - ax.set_ylim((0, 3)) + ax.set_ylim((0.8, 1.5)) # Add a horizontal line to denote speedup = 1x; ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) @@ -128,7 +128,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) ax.tick_params(labelcolor="black") # Set the y ticks; - ax.yaxis.set_major_locator(plt.LinearLocator(7)) + ax.yaxis.set_major_locator(plt.LinearLocator(8)) if y == 0: ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) else: @@ -184,6 +184,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): # Lists of benchmarks and block sizes; benchmark_list = sorted(data["benchmark"].unique()) block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) + num_col = len(benchmark_list) num_row = len(block_size_list) fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index a492b2dc..d871f2d5 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -26,9 +26,9 @@ ############################## -INPUT_DATE_GRCUDA = "2020_07_06_13_21_07_grcuda" -INPUT_DATE_CUDA = "2020_07_06_19_25_26_cuda" -OUTPUT_DATE = "2020_07_06" +INPUT_DATE_GRCUDA = "2020_07_10_15_42_44_grcuda" +INPUT_DATE_CUDA = "2020_07_10_16_18_02_cuda" +OUTPUT_DATE = "2020_07_10" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} From fbd6a489895e2a30ac1173ad1ba3942467c2bf41 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Fri, 10 Jul 2020 16:54:31 +0200 Subject: [PATCH 117/236] Update RESULTS.md --- RESULTS.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index d33a046d..1a62e2e7 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -143,7 +143,7 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── ## Plots -![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_1_row_2020_07_10.png) +![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_10/speedup_baseline_1_row_2020_07_10.png) In general, **DAG scheduling allows better GPU resource usage**: when the data-set size does not fill the GPU computational resources, DAG scheduling provides speedups close to the theoretical optimum. As expected, the speedup is less significant as the data-set size increases, as each kernel can fully use the GPU resources by itself. @@ -153,7 +153,7 @@ In general, **DAG scheduling allows better GPU resource usage**: when the data-s As rule of thumb, **smaller blocks provide better speedup**: this is likely connected to the GPU architecture being better at parallelizing smaller blocks. In general, small blocks almost always provide better absolute performance, for similar reasons. Kernels in the benchmarks leverage grid-striding, meaning that the number of blocks is independent from the size of data to be processed and each thread becomes more computationally intensive as the data-size increases (instead of being constant). Currently, kernels do not use shared memory whose size depends on block size; if that was the case, bigger blocks might have an advantage. -![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_2020_07_10.png) +![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_10/speedup_baseline_2020_07_10.png) Performance of serial and DAG GrCUDA scheduling has been compared to the same benchmarks implemented directly in C++ and CUDA. The experimental setup and the kernels are exactly the same. In the case of CUDA asynchronous kernel execution, dependendencies and synchronization points have been computed by hand, instead of automatically. This provides a **comparison of how the overhead introduced by GrCUDA impacts the total execution time** compared to lower-level kernel scheduling. @@ -161,6 +161,6 @@ In the case of serial execution, CUDA is sligthly faster than GrCUDA, as expecte As for asynchronous DAG scheduling, we see how GrCUDA is actually **faster** than CUDA in most cases. It is not clear how GrCUDA is actually faster than CUDA. The only difference is that GrCUDA uses `nvrtc` (Nvidia runtime compilation library), instead of `nvcc`. Whether this provides faster kernel launches, or generates faster code, is yet to be checked. It is likely that `nvrtc` uses the same routines as `nvcc` for compilation, although kernel launches might be faster. -![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_grcuda_cuda_compact_2020_07_10.png) +![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_10/speedup_baseline_grcuda_cuda_compact_2020_07_10.png) -![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_grcuda_cuda_2020_07_10.png) +![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_10/speedup_baseline_grcuda_cuda_2020_07_10.png) From 4f68351e5dbfd62feacde06a0925205a6744e428 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 14 Jul 2020 17:29:06 +0200 Subject: [PATCH 118/236] updated test for b1 and b5, fixed with-const policy non being applied correctly, using new-stream for benchmarks --- README.md | 2 +- RESULTS.md | 8 +- ...ecutionContextWithConstDependencyTest.java | 10 +- .../src/com/nvidia/grcuda/GrCUDAContext.java | 4 + .../com/nvidia/grcuda/gpu/CUDARuntime.java | 4 +- projects/resources/cuda/b1_default.cu | 24 ++- .../resources/cuda/b1_default_nomanaged.cu | 175 ++++++++++++++++ projects/resources/cuda/b1_sync.cu | 13 +- projects/resources/cuda/b1_sync_nomanaged.cu | 150 ++++++++++++++ projects/resources/cuda/b5_default.cu | 16 +- .../resources/cuda/b5_default_nomanaged.cu | 189 ++++++++++++++++++ projects/resources/cuda/b5_sync.cu | 13 +- projects/resources/cuda/b5_sync_nomanaged.cu | 172 ++++++++++++++++ .../python/benchmark/bench/bench_1.py | 15 +- .../python/benchmark/bench/bench_5.py | 13 +- .../python/benchmark/benchmark_result.py | 2 +- .../python/benchmark/benchmark_wrapper.py | 23 ++- .../resources/python/plotting/load_data.py | 5 +- .../python/plotting/plot_speedup_baseline.py | 60 +++--- .../plotting/plot_speedup_grcuda_cuda.py | 6 +- 20 files changed, 822 insertions(+), 82 deletions(-) create mode 100644 projects/resources/cuda/b1_default_nomanaged.cu create mode 100644 projects/resources/cuda/b1_sync_nomanaged.cu create mode 100644 projects/resources/cuda/b5_default_nomanaged.cu create mode 100644 projects/resources/cuda/b5_sync_nomanaged.cu diff --git a/README.md b/README.md index 49fc7728..2c4f1fde 100644 --- a/README.md +++ b/README.md @@ -278,7 +278,7 @@ graalpython --jvm --polyglot --WithThread benchmark_main.py -d -i 5 -n 1000 Run a specific benchmark with custom settings ``` -graalpython --jvm --polyglot --WithThread --grcuda.RetrieveNewStreamPolicy=fifo --grcuda.ExecutionPolicy=default --grcuda.DependencyPolicy=with_const --grcuda.RetrieveParentStreamPolicy=disjoint benchmark_main.py -d -i 10 -n 100 --no_cpu_validation --reinit false --realloc false -b b7 +graalpython --jvm --polyglot --WithThread --grcuda.RetrieveNewStreamPolicy=fifo --grcuda.ExecutionPolicy=default --grcuda.DependencyPolicy=with-const --grcuda.RetrieveParentStreamPolicy=disjoint benchmark_main.py -d -i 10 -n 100 --no_cpu_validation --reinit false --realloc false -b b7 ``` * Benchmarks are defined in the `projects/resources/python/benchmark/bench` folder, diff --git a/RESULTS.md b/RESULTS.md index d33a046d..5d847066 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -143,7 +143,7 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── ## Plots -![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_1_row_2020_07_10.png) +![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_14/speedup_baseline_1_row_2020_07_10.png) In general, **DAG scheduling allows better GPU resource usage**: when the data-set size does not fill the GPU computational resources, DAG scheduling provides speedups close to the theoretical optimum. As expected, the speedup is less significant as the data-set size increases, as each kernel can fully use the GPU resources by itself. @@ -153,7 +153,7 @@ In general, **DAG scheduling allows better GPU resource usage**: when the data-s As rule of thumb, **smaller blocks provide better speedup**: this is likely connected to the GPU architecture being better at parallelizing smaller blocks. In general, small blocks almost always provide better absolute performance, for similar reasons. Kernels in the benchmarks leverage grid-striding, meaning that the number of blocks is independent from the size of data to be processed and each thread becomes more computationally intensive as the data-size increases (instead of being constant). Currently, kernels do not use shared memory whose size depends on block size; if that was the case, bigger blocks might have an advantage. -![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_2020_07_10.png) +![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_14/speedup_baseline_2020_07_10.png) Performance of serial and DAG GrCUDA scheduling has been compared to the same benchmarks implemented directly in C++ and CUDA. The experimental setup and the kernels are exactly the same. In the case of CUDA asynchronous kernel execution, dependendencies and synchronization points have been computed by hand, instead of automatically. This provides a **comparison of how the overhead introduced by GrCUDA impacts the total execution time** compared to lower-level kernel scheduling. @@ -161,6 +161,6 @@ In the case of serial execution, CUDA is sligthly faster than GrCUDA, as expecte As for asynchronous DAG scheduling, we see how GrCUDA is actually **faster** than CUDA in most cases. It is not clear how GrCUDA is actually faster than CUDA. The only difference is that GrCUDA uses `nvrtc` (Nvidia runtime compilation library), instead of `nvcc`. Whether this provides faster kernel launches, or generates faster code, is yet to be checked. It is likely that `nvrtc` uses the same routines as `nvcc` for compilation, although kernel launches might be faster. -![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_grcuda_cuda_compact_2020_07_10.png) +![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_14/speedup_baseline_grcuda_cuda_compact_2020_07_10.png) -![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_06/speedup_baseline_grcuda_cuda_2020_07_10.png) +![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_14/speedup_baseline_grcuda_cuda_2020_07_10.png) diff --git a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextWithConstDependencyTest.java b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextWithConstDependencyTest.java index 6080c641..85aec495 100644 --- a/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextWithConstDependencyTest.java +++ b/projects/com.nvidia.grcuda.test/src/com/nvidia/grcuda/test/gpu/executioncontext/GrCUDAExecutionContextWithConstDependencyTest.java @@ -67,7 +67,7 @@ public class GrCUDAExecutionContextWithConstDependencyTest { @Test public void dependencyPipelineSimpleTest() { - try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with-const").allowAllAccess(true).build()) { final int numElements = 10; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; @@ -101,7 +101,7 @@ public void dependencyPipelineSimpleTest() { @Test public void dependencyPipelineReadXTest() { - try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with-const").allowAllAccess(true).build()) { final int numElements = 100; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; @@ -141,7 +141,7 @@ public void dependencyPipelineReadXTest() { public void dependencyPipelineSplitComputationTest() { // Test a computation of form A(1) --> B(1r, 2) // \-> C(1r, 3) - try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with-const").allowAllAccess(true).build()) { final int numElements = 10; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; @@ -182,7 +182,7 @@ public void dependencyPipelineSplitComputationTest() { public void dependencyPipelineDiamondTest() { // Test a computation of form A(1) --> B(1r, 2) -> D(1) // \-> C(1r, 3) -/ - try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with-const").allowAllAccess(true).build()) { final int numElements = 10; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; @@ -224,7 +224,7 @@ public void dependencyPipelineDiamondTest() { @Test public void dependencyPipelineSimple2Test() { - try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with_const").allowAllAccess(true).build()) { + try (Context context = Context.newBuilder().option("grcuda.DependencyPolicy", "with-const").allowAllAccess(true).build()) { final int numElements = 10000; final int numBlocks = (numElements + NUM_THREADS_PER_BLOCK - 1) / NUM_THREADS_PER_BLOCK; diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index 6daf74ec..e7e08869 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -205,6 +205,7 @@ private static ExecutionPolicyEnum parseExecutionPolicy(String policyString) { case "default": return ExecutionPolicyEnum.DEFAULT; default: + System.out.println("Warning: unknown execution policy=" + policyString + "; using default=" + GrCUDAContext.DEFAULT_EXECUTION_POLICY); return GrCUDAContext.DEFAULT_EXECUTION_POLICY; } } @@ -217,6 +218,7 @@ private static DependencyPolicyEnum parseDependencyPolicy(String policyString) { case "default": return DependencyPolicyEnum.DEFAULT; default: + System.out.println("Warning: unknown dependency policy=" + policyString + "; using default=" + GrCUDAContext.DEFAULT_DEPENDENCY_POLICY); return GrCUDAContext.DEFAULT_DEPENDENCY_POLICY; } } @@ -229,6 +231,7 @@ private static RetrieveNewStreamPolicyEnum parseRetrieveStreamPolicy(String poli case "always-new": return RetrieveNewStreamPolicyEnum.ALWAYS_NEW; default: + System.out.println("Warning: unknown new stream retrieval policy=" + policyString + "; using default=" + GrCUDAContext.DEFAULT_RETRIEVE_STREAM_POLICY); return GrCUDAContext.DEFAULT_RETRIEVE_STREAM_POLICY; } } @@ -240,6 +243,7 @@ private static RetrieveParentStreamPolicyEnum parseParentStreamPolicy(String pol case "default": return RetrieveParentStreamPolicyEnum.DEFAULT; default: + System.out.println("Warning: unknown parent stream retrieval policy=" + policyString + "; using default=" + GrCUDAContext.DEFAULT_PARENT_STREAM_POLICY); return GrCUDAContext.DEFAULT_PARENT_STREAM_POLICY; } } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 4934dfff..f1ea05c8 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -385,18 +385,18 @@ public void cudaStreamDestroy(CUDAStream stream) { @TruffleBoundary public void cudaStreamAttachMemAsync(CUDAStream stream, AbstractArray array) { -// System.out.println("\t* attach array=" + System.identityHashCode(array) + " to " + stream); final int MEM_ATTACH_SINGLE = 0x04; final int MEM_ATTACH_GLOBAL = 0x01; try { Object callable = CUDARuntimeFunction.CUDA_STREAMATTACHMEMASYNC.getSymbol(this); int flag = stream.isDefaultStream() ? MEM_ATTACH_GLOBAL : MEM_ATTACH_SINGLE; +// System.out.println("\t* attach array=" + System.identityHashCode(array) + " to " + stream + "; flag=" + flag); // Book-keeping of the stream attachment within the array; array.setStreamMapping(stream); - Object result = INTEROP.execute(callable, stream.getRawPointer(), array.getPointer(), 0, flag); + Object result = INTEROP.execute(callable, stream.getRawPointer(), array.getPointer(), array.getSizeBytes(), flag); checkCUDAReturnCode(result, "cudaStreamAttachMemAsync"); } catch (InteropException e) { throw new GrCUDAException(e); diff --git a/projects/resources/cuda/b1_default.cu b/projects/resources/cuda/b1_default.cu index 93ea752e..54133dc9 100644 --- a/projects/resources/cuda/b1_default.cu +++ b/projects/resources/cuda/b1_default.cu @@ -17,13 +17,13 @@ using clock_type = chrono::high_resolution_clock; extern "C" __global__ void square(const float* x, float* y, int n) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { - float tmp = x[i]; - float sum = 0; + // float tmp = x[i]; + // float sum = 0; // for (int j = 0; j < 4; j++) { // sum += tmp + j; // } - y[i] = tmp + tmp * tmp / 2 + tmp * tmp * tmp / 6; + y[i] = x[i] * x[i]; // tmp + tmp * tmp / 2 + tmp * tmp * tmp / 6; } } @@ -65,7 +65,11 @@ void init(float *x, float *y, int N) { } } -void reset(float *res) { +void reset(float *res, float *x, float *y, int N) { + for (int i = 0; i < N; i++) { + x[i] = 1.0 / (i + 1); + y[i] = 2.0 / (i + 1); + } res[0] = 0.0; } @@ -114,6 +118,8 @@ int main(int argc, char *argv[]) { // Initialze arrays; init(x, y, N); + + auto end = clock_type::now(); if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; @@ -124,13 +130,21 @@ int main(int argc, char *argv[]) { for (int i = 0; i < num_executions; i++) { if (debug) std::cout << "\n-- iter=" << i << std::endl; auto start_tmp = clock_type::now(); - reset(res); + reset(res, x, y, N); auto end_tmp = clock_type::now(); auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; start = clock_type::now(); + cudaStreamAttachMemAsync(s1, x, sizeof(float) * N); + cudaStreamAttachMemAsync(s1, x1, sizeof(float) * N); + cudaStreamAttachMemAsync(s2, y, sizeof(float) * N); + cudaStreamAttachMemAsync(s2, y1, sizeof(float) * N); + + // cudaMemPrefetchAsync(x, sizeof(float) * N, 0, s1); + // cudaMemPrefetchAsync(y, sizeof(float) * N, 0, s2); + square<<>>(x, x1, N); square<<>>(y, y1, N); diff --git a/projects/resources/cuda/b1_default_nomanaged.cu b/projects/resources/cuda/b1_default_nomanaged.cu new file mode 100644 index 00000000..93f7256c --- /dev/null +++ b/projects/resources/cuda/b1_default_nomanaged.cu @@ -0,0 +1,175 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void square(const float* x, float* y, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + // float tmp = x[i]; + // float sum = 0; + // for (int j = 0; j < 4; j++) { + // sum += tmp + j; + // } + + y[i] = x[i]; // tmp + tmp * tmp / 2 + tmp * tmp * tmp / 6; + } +} + +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +// __device__ float atomicAddDouble(float* address, float val) { +// unsigned long long int* address_as_ull = (unsigned long long int*) address; +// unsigned long long int old = *address_as_ull, assumed; +// do { +// assumed = old; +// old = atomicCAS(address_as_ull, assumed, __float_as_longlong(val + __longlong_as_float(assumed))); +// } while (assumed != old); +// return __longlong_as_float(old); +// } + +__global__ void reduce(const float *x, const float *y, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] - y[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +///////////////////////////// +///////////////////////////// + +void init(float *x, float *y, int N) { + for (int i = 0; i < N; i++) { + x[i] = 1.0 / (i + 1); + y[i] = 2.0 / (i + 1); + } +} + +void reset(float *res, float *res_d) { + res[0] = 0.0; + cudaMemcpy(res_d, res, sizeof(float), cudaMemcpyHostToDevice); +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; + int err = 0; + + if (debug) { + std::cout << "running b1 dag" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; + } + + auto start = clock_type::now(); + float *x_d, *y_d, *x1_d, *y1_d, *res_d, *x, *y, *res; + x = (float*) malloc(sizeof(float) * N); + y = (float*) malloc(sizeof(float) * N); + res = (float*) malloc(sizeof(float)); + err = cudaMalloc(&x_d, sizeof(float) * N); + err = cudaMalloc(&y_d, sizeof(float) * N); + err = cudaMalloc(&x1_d, sizeof(float) * N); + err = cudaMalloc(&y1_d, sizeof(float) * N); + err = cudaMalloc(&res_d, sizeof(float)); + if (debug && err) std::cout << err << std::endl; + + cudaHostRegister(x, sizeof(float) * N, 0); + cudaHostRegister(y, sizeof(float) * N, 0); + cudaHostRegister(res, sizeof(float), 0); + + // Create streams; + cudaStream_t s1, s2; + err = cudaStreamCreate(&s1); + err = cudaStreamCreate(&s2); + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + init(x, y, N); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(res, res_d); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + cudaMemcpyAsync(x_d, x, sizeof(float) * N, cudaMemcpyHostToDevice, s1); + cudaMemcpyAsync(y_d, y, sizeof(float) * N, cudaMemcpyHostToDevice, s2); + + square<<>>(x_d, x1_d, N); + square<<>>(y_d, y1_d, N); + + // Stream 1 waits stream 2; + cudaEvent_t e1; + cudaEventCreate(&e1); + cudaEventRecord(e1, s2); + cudaStreamWaitEvent(s1, e1, 0); + + reduce<<>>(x1_d, y1_d, res_d, N); + cudaMemcpyAsync(res, res_d, sizeof(float), cudaMemcpyDeviceToHost, s1); + cudaStreamSynchronize(s1); + + if (debug && err) std::cout << err << std::endl; + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + if (i >= skip_iterations) tot += tmp; + + if (debug) { + std::cout << " gpu result=" << res[0] << "; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << res[0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b1_sync.cu b/projects/resources/cuda/b1_sync.cu index f97c1f9a..1e7c8fa7 100644 --- a/projects/resources/cuda/b1_sync.cu +++ b/projects/resources/cuda/b1_sync.cu @@ -17,12 +17,13 @@ using clock_type = chrono::high_resolution_clock; extern "C" __global__ void square(const float* x, float* y, int n) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { - float tmp = x[i]; + // float tmp = x[i]; // float sum = 0; // for (int j = 0; j < 4; j++) { // sum += tmp + j; // } - y[i] = tmp + tmp * tmp / 2 + tmp * tmp * tmp / 6; + + y[i] = x[i] * x[i]; // tmp + tmp * tmp / 2 + tmp * tmp * tmp / 6; } } @@ -64,7 +65,11 @@ void init(float *x, float *y, int N) { } } -void reset(float *res) { +void reset(float *res, float *x, float *y, int N) { + for (int i = 0; i < N; i++) { + x[i] = 1.0 / (i + 1); + y[i] = 2.0 / (i + 1); + } res[0] = 0.0; } @@ -117,7 +122,7 @@ int main(int argc, char *argv[]) { for (int i = 0; i < num_executions; i++) { if (debug) std::cout << "\n-- iter=" << i << std::endl; auto start_tmp = clock_type::now(); - reset(res); + reset(res, x, y, N); auto end_tmp = clock_type::now(); auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; diff --git a/projects/resources/cuda/b1_sync_nomanaged.cu b/projects/resources/cuda/b1_sync_nomanaged.cu new file mode 100644 index 00000000..9792ebd1 --- /dev/null +++ b/projects/resources/cuda/b1_sync_nomanaged.cu @@ -0,0 +1,150 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +extern "C" __global__ void square(const float* x, float* y, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + // float tmp = x[i]; + // float sum = 0; + // for (int j = 0; j < 4; j++) { + // sum += tmp + j; + // } + y[i] = x[i]; // + tmp * tmp / 2 + tmp * tmp * tmp / 6; + } +} + +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +// __device__ float atomicAddDouble(float* address, float val) { +// unsigned long long int* address_as_ull = (unsigned long long int*) address; +// unsigned long long int old = *address_as_ull, assumed; +// do { +// assumed = old; +// old = atomicCAS(address_as_ull, assumed, __float_as_longlong(val + __longlong_as_float(assumed))); +// } while (assumed != old); +// return __longlong_as_float(old); +// } + +__global__ void reduce(const float *x, const float *y, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] - y[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +///////////////////////////// +///////////////////////////// + +void init(float *x, float *y, int N) { + for (int i = 0; i < N; i++) { + x[i] = 1.0 / (i + 1); + y[i] = 2.0 / (i + 1); + } +} + +void reset(float *res) { + res[0] = 0.0; +} + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; + int err = 0; + + if (debug) { + std::cout << "running b1 sync" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; + } + + auto start = clock_type::now(); + float *x, *y, *x1, *y1, *res; + err = cudaMallocManaged(&x, sizeof(float) * N); + err = cudaMallocManaged(&y, sizeof(float) * N); + err = cudaMallocManaged(&x1, sizeof(float) * N); + err = cudaMallocManaged(&y1, sizeof(float) * N); + err = cudaMallocManaged(&res, sizeof(float)); + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + init(x, y, N); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(res); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + square<<>>(x, x1, N); + err = cudaDeviceSynchronize(); + square<<>>(y, y1, N); + err = cudaDeviceSynchronize(); + reduce<<>>(x1, y1, res, N); + err = cudaDeviceSynchronize(); + if (debug && err) std::cout << err << std::endl; + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + if (i >= skip_iterations) tot += tmp; + + if (debug) { + std::cout << " gpu result=" << res[0] << "; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << res[0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b5_default.cu b/projects/resources/cuda/b5_default.cu index 1a905fab..78973abe 100644 --- a/projects/resources/cuda/b5_default.cu +++ b/projects/resources/cuda/b5_default.cu @@ -20,8 +20,7 @@ float V = 0.3; float T = 1.0; float K = 60.0; -__device__ inline float cndGPU(float d) -{ +__device__ inline float cndGPU(float d) { const float A1 = 0.31938153f; const float A2 = -0.356563782f; const float A3 = 1.781477937f; @@ -42,7 +41,7 @@ __device__ inline float cndGPU(float d) return cnd; } -extern "C" __global__ void bs(float *x, float *y, int N, float R, float V, float T, float K) { +extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, float T, float K) { float sqrtT = __fdividef(1.0F, rsqrtf(T)); for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { @@ -68,7 +67,7 @@ void init(float **x, float **y, float* tmp_x, int N, int K) { tmp_x[j] = 60 - 0.5 + (float) rand() / RAND_MAX; for (int i = 0; i < K; i++) { x[i][j] = tmp_x[j]; - y[i][j] = 0; + // y[i][j] = 0; } } } @@ -76,12 +75,14 @@ void init(float **x, float **y, float* tmp_x, int N, int K) { void reset(float **x, float* y, int N, int K, cudaStream_t *s) { for (int i = 0; i < K; i++) { // memcpy(x[i], y, sizeof(int) * N); - cudaMemcpy(x[i], y, sizeof(int) * N, cudaMemcpyDefault); + cudaMemcpy(x[i], y, sizeof(float) * N, cudaMemcpyDefault); + // cudaMemcpyAsync(x[i], y, sizeof(int) * N, cudaMemcpyHostToDevice, s[i]); // for (int j = 0; j < N; j++) { // x[i][j] = y[j]; // } } + // cudaMemPrefetchAsync(x[0], sizeof(float) * N, 0, s[0]); } @@ -156,9 +157,14 @@ int main(int argc, char *argv[]) { start = clock_type::now(); for (int j = 0; j < M; j++) { + // if (j > 0) cudaMemPrefetchAsync(y[j - 1], sizeof(float) * N, cudaCpuDeviceId, s[j - 1]); bs<<>>(x[j], y[j], N, R, V, T, K); + // if (j < M - 1) cudaMemPrefetchAsync(x[j + 1], sizeof(float) * N, 0, s[j + 1]); } + // Last tile; + // cudaMemPrefetchAsync(y[M - 1], sizeof(float) * N, cudaCpuDeviceId, s[M - 1]); + for (int j = 0; j < M; j++) { err = cudaStreamSynchronize(s[j]); } diff --git a/projects/resources/cuda/b5_default_nomanaged.cu b/projects/resources/cuda/b5_default_nomanaged.cu new file mode 100644 index 00000000..d29357d4 --- /dev/null +++ b/projects/resources/cuda/b5_default_nomanaged.cu @@ -0,0 +1,189 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +float R = 0.08; +float V = 0.3; +float T = 1.0; +float K = 60.0; + +__device__ inline float cndGPU(float d) { + const float A1 = 0.31938153f; + const float A2 = -0.356563782f; + const float A3 = 1.781477937f; + const float A4 = -1.821255978f; + const float A5 = 1.330274429f; + const float RSQRT2PI = 0.39894228040143267793994605993438f; + + float + K = __fdividef(1.0f, (1.0f + 0.2316419f * fabsf(d))); + + float + cnd = RSQRT2PI * __expf(- 0.5f * d * d) * + (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); + + if (d > 0) + cnd = 1.0f - cnd; + + return cnd; +} + +extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, float T, float K) { + + float sqrtT = __fdividef(1.0F, rsqrtf(T)); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + float expRT; + float d1, d2, CNDD1, CNDD2; + d1 = __fdividef(__logf(x[i] / K) + (R + 0.5f * V * V) * T, V * sqrtT); + d2 = d1 - V * sqrtT; + + CNDD1 = cndGPU(d1); + CNDD2 = cndGPU(d2); + + //Calculate Call and Put simultaneously + expRT = __expf(-R * T); + y[i] = x[i] * CNDD1 - K * expRT * CNDD2; + } +} + +///////////////////////////// +///////////////////////////// + +void init(float **y, float** x, int N, int K) { + for (int i = 0; i < K; i++) { + for (int j = 0; j < N; j++) { + x[i][j] = 60 - 0.5 + (float) rand() / RAND_MAX; + } + } +} + +void reset(float *x, float** x_d, int N, int K, cudaStream_t *s) { + // Copy just the first vector; + cudaMemcpyAsync(x_d[0], x, sizeof(float) * N, cudaMemcpyHostToDevice, s[0]); +} + + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; + int err = 0; + + int M = 10; + + if (debug) { + std::cout << "running b5 default" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; + } + + auto start = clock_type::now(); + + float **x = (float **) malloc(sizeof(float*) * M); + float **x_d = (float **) malloc(sizeof(float*) * M); + float **y = (float **) malloc(sizeof(float*) * M); + float **y_d = (float **) malloc(sizeof(float*) * M); + // float *tmp_x = (float *) malloc(sizeof(float) * N); + // cudaHostRegister(tmp_x, sizeof(float) * N, 0); + + for (int i = 0; i < M; i++) { + x[i] = (float *) malloc(sizeof(float) * N); + y[i] = (float *) malloc(sizeof(float) * N); + cudaMalloc(&x_d[i], sizeof(float) * N); + cudaMalloc(&y_d[i], sizeof(float) * N); + cudaHostRegister(x[i], sizeof(float) * N, 0); + } + if (debug && err) std::cout << err << std::endl; + + // Create streams; + cudaStream_t *s = (cudaStream_t *) malloc(sizeof(cudaStream_t) * M); + for (int i = 0; i < M; i++) { + err = cudaStreamCreate(&s[i]); + } + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + init(y, x, N, M); + + if (debug) std::cout << "x[0][0]=" << x[0][0] << std::endl; + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + // reset(x[0], x_d, N, M, s); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + for (int j = 0; j < M; j++) { + if (j < M - 1) cudaMemcpyAsync(x_d[j + 1], x[j + 1], sizeof(float) * N, cudaMemcpyHostToDevice, s[j + 1]); + bs<<>>(x_d[j], y_d[j], N, R, V, T, K); + if (j > 0) cudaMemcpyAsync(y[j - 1], y_d[j - 1], sizeof(float) * N, cudaMemcpyDeviceToHost, s[j - 1]); + } + + // Copy last piece; + cudaMemcpyAsync(y[M - 1], y_d[M - 1], sizeof(float) * N, cudaMemcpyDeviceToHost, s[M - 1]); + + for (int j = 0; j < M; j++) { + err = cudaStreamSynchronize(s[j]); + } + + if (debug && err) std::cout << err << std::endl; + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + if (i >= skip_iterations) tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < M; j++) { + std::cout << y[j][0] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << y[0][0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b5_sync.cu b/projects/resources/cuda/b5_sync.cu index 08d4e84d..b5d28f8d 100644 --- a/projects/resources/cuda/b5_sync.cu +++ b/projects/resources/cuda/b5_sync.cu @@ -20,8 +20,7 @@ float V = 0.3; float T = 1.0; float K = 60.0; -__device__ inline float cndGPU(float d) -{ +__device__ inline float cndGPU(float d) { const float A1 = 0.31938153f; const float A2 = -0.356563782f; const float A3 = 1.781477937f; @@ -42,7 +41,7 @@ __device__ inline float cndGPU(float d) return cnd; } -extern "C" __global__ void bs(float *x, float *y, int N, float R, float V, float T, float K) { +extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, float T, float K) { float sqrtT = __fdividef(1.0F, rsqrtf(T)); for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { @@ -68,7 +67,7 @@ void init(float **x, float **y, float* tmp_x, int N, int K) { tmp_x[j] = 60 - 0.5 + (float) rand() / RAND_MAX; for (int i = 0; i < K; i++) { x[i][j] = tmp_x[j]; - y[i][j] = 0; + // y[i][j] = 0; } } } @@ -76,10 +75,10 @@ void init(float **x, float **y, float* tmp_x, int N, int K) { void reset(float **x, float* y, int N, int K) { for (int i = 0; i < K; i++) { // memcpy(x[i], y, sizeof(int) * N); - cudaMemcpy(x[i], y, sizeof(int) * N, cudaMemcpyDefault); + cudaMemcpy(x[i], y, sizeof(float) * N, cudaMemcpyDefault); // cudaMemcpyAsync(x[i], y, sizeof(int) * N, cudaMemcpyHostToDevice, s[i]); // for (int j = 0; j < N; j++) { - // x[i][j] = y[j]; + // x[i][j] = y[j]; // } } } @@ -116,7 +115,7 @@ int main(int argc, char *argv[]) { float **x = (float **) malloc(sizeof(float*) * M); float **y = (float **) malloc(sizeof(float*) * M); float *tmp_x = (float *) malloc(sizeof(float) * N); - // cudaHostRegister(tmp_x, sizeof(float) * N, 0); + cudaHostRegister(tmp_x, sizeof(float) * N, 0); for (int i = 0; i < M; i++) { cudaMallocManaged(&x[i], sizeof(float) * N); diff --git a/projects/resources/cuda/b5_sync_nomanaged.cu b/projects/resources/cuda/b5_sync_nomanaged.cu new file mode 100644 index 00000000..e55bf70e --- /dev/null +++ b/projects/resources/cuda/b5_sync_nomanaged.cu @@ -0,0 +1,172 @@ +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +float R = 0.08; +float V = 0.3; +float T = 1.0; +float K = 60.0; + +__device__ inline float cndGPU(float d) { + const float A1 = 0.31938153f; + const float A2 = -0.356563782f; + const float A3 = 1.781477937f; + const float A4 = -1.821255978f; + const float A5 = 1.330274429f; + const float RSQRT2PI = 0.39894228040143267793994605993438f; + + float + K = __fdividef(1.0f, (1.0f + 0.2316419f * fabsf(d))); + + float + cnd = RSQRT2PI * __expf(- 0.5f * d * d) * + (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); + + if (d > 0) + cnd = 1.0f - cnd; + + return cnd; +} + +extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, float T, float K) { + + float sqrtT = __fdividef(1.0F, rsqrtf(T)); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + float expRT; + float d1, d2, CNDD1, CNDD2; + d1 = __fdividef(__logf(x[i] / K) + (R + 0.5f * V * V) * T, V * sqrtT); + d2 = d1 - V * sqrtT; + + CNDD1 = cndGPU(d1); + CNDD2 = cndGPU(d2); + + //Calculate Call and Put simultaneously + expRT = __expf(-R * T); + y[i] = x[i] * CNDD1 - K * expRT * CNDD2; + } +} + +///////////////////////////// +///////////////////////////// + +void init(float **y, float* tmp_x, int N, int K) { + for (int j = 0; j < N; j++) { + tmp_x[j] = 60 - 0.5 + (float) rand() / RAND_MAX; + } +} + +void reset(float *x, float** x_d, int N, int K) { + // Copy just the first vector; + cudaMemcpy(x_d[0], x, sizeof(float) * N, cudaMemcpyHostToDevice); +} + + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int block_size = options.block_size_1d; + int num_blocks = options.num_blocks; + int skip_iterations = options.skip_iterations; + int err = 0; + + int M = 10; + + if (debug) { + std::cout << "running b5 default" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; + } + + auto start = clock_type::now(); + float **y = (float **) malloc(sizeof(float*) * M); + float **x_d = (float **) malloc(sizeof(float*) * M); + float **y_d = (float **) malloc(sizeof(float*) * M); + float *tmp_x = (float *) malloc(sizeof(float) * N); + // cudaHostRegister(tmp_x, sizeof(float) * N, 0); + + for (int i = 0; i < M; i++) { + y[i] = (float *) malloc(sizeof(float) * N); + cudaMalloc(&x_d[i], sizeof(float) * N); + cudaMalloc(&y_d[i], sizeof(float) * N); + } + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + init(y, tmp_x, N, M); + + if (debug) std::cout << "x[0][0]=" << tmp_x[0] << std::endl; + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(tmp_x, x_d, N, M); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + for (int j = 0; j < M; j++) { + if (j < M - 1) cudaMemcpy(x_d[j + 1], tmp_x, sizeof(float) * N, cudaMemcpyHostToDevice); + bs<<>>(x_d[j], y_d[j], N, R, V, T, K); + if (j > 0) cudaMemcpy(y[j - 1], y_d[j - 1], sizeof(float) * N, cudaMemcpyDeviceToHost); + } + + // Copy last piece; + cudaMemcpy(y[M - 1], y_d[M - 1], sizeof(float) * N, cudaMemcpyDeviceToHost); + + if (debug && err) std::cout << err << std::endl; + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + if (i >= skip_iterations) tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < M; j++) { + std::cout << y[j][0] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << y[0][0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; +} diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index 7cba3e53..8c0c8d58 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -11,7 +11,7 @@ ############################## SQUARE_KERNEL = """ -extern "C" __global__ void square(const float* x, float* y, int n) { +extern "C" __global__ void square(float* x, float* y, int n) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { y[i] = x[i] * x[i]; } @@ -37,7 +37,7 @@ return val; } -__global__ void reduce(const float *x, const float *y, float* z, int N) { +__global__ void reduce(float *x, float *y, float* z, int N) { int warp_size = 32; float sum = float(0); for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { @@ -95,7 +95,7 @@ def alloc(self, size: int, block_size: dict = None) -> None: # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") - self.square_kernel = build_kernel(SQUARE_KERNEL, "square", "const pointer, pointer, sint32") + self.square_kernel = build_kernel(SQUARE_KERNEL, "square", "pointer, pointer, sint32") self.reduce_kernel = build_kernel(REDUCE_KERNEL, "reduce", "const pointer, const pointer, pointer, sint32") @time_phase("initialization") @@ -112,6 +112,15 @@ def init(self): @time_phase("reset_result") def reset_result(self) -> None: + if self.benchmark.random_init: + seed(self.random_seed) + for i in range(self.size): + self.x[i] = random() + self.y[i] = 2 * random() + else: + for i in range(self.size): + self.x[i] = 1 / (i + 1) + self.y[i] = 2 / (i + 1) self.res[0] = 0.0 def execute(self) -> object: diff --git a/projects/resources/python/benchmark/bench/bench_5.py b/projects/resources/python/benchmark/bench/bench_5.py index cf60fed2..0d455671 100644 --- a/projects/resources/python/benchmark/bench/bench_5.py +++ b/projects/resources/python/benchmark/bench/bench_5.py @@ -71,7 +71,7 @@ def __init__(self, benchmark: BenchmarkResult): super().__init__("b5", benchmark) self.size = 0 - self.num_blocks = 64 + self.num_blocks = 32 self.sum_kernel = None self.cpu_result = 0 self.block_size = DEFAULT_BLOCK_SIZE_1D @@ -107,12 +107,11 @@ def init(self): self.x_tmp = np.random.uniform(-0.5, 0.5, self.size).astype(np.float32) + K else: self.x_tmp = np.zeros(self.size, dtype=np.float32) + K - - # for i in range(self.size): - # if self.benchmark.random_init: - # self.x_tmp[i] = random() + K - 0.5 - # else: - # self.x_tmp[i] = K + # seed(self.random_seed) + # self.x_tmp = [K] * self.size + # if self.benchmark.random_init: + # for i in range(len(self.x_tmp)): + # self.x_tmp[i] = random() - 0.5 + K @time_phase("reset_result") def reset_result(self) -> None: diff --git a/projects/resources/python/benchmark/benchmark_result.py b/projects/resources/python/benchmark/benchmark_result.py index 4e08f21d..728b3660 100644 --- a/projects/resources/python/benchmark/benchmark_result.py +++ b/projects/resources/python/benchmark/benchmark_result.py @@ -11,7 +11,7 @@ class BenchmarkResult: DEFAULT_CPU_VALIDATION = True DEFAULT_REALLOC = False DEFAULT_REINIT = True - DEFAULT_RANDOM_INIT = True + DEFAULT_RANDOM_INIT = False def __init__(self, num_iterations: int = DEFAULT_NUM_ITER, diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 70644167..07f9af96 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -10,18 +10,20 @@ ############################## ############################## +DEFAULT_NUM_BLOCKS = 64 + # Benchmark settings; benchmarks = [ - # "b1", + "b1", # "b4", # "b5", # "b6", # "b7", - "b8", + # "b8", ] num_elem = { - "b1": [2000000, 5000000, 10000000, 20000000, 40000000], + "b1": [10_000_000, 20_000_000, 40_000_000, 60_000_000, 80_000_000], "b4": [2000000, 5000000, 10000000, 20000000, 40000000], "b5": [2000000, 5000000, 10000000, 15000000, 20000000], "b6": [20000, 50000, 200000, 500000, 800000], @@ -31,7 +33,7 @@ exec_policies = ["default", "sync"] -new_stream_policies = ["fifo"] +new_stream_policies = ["always-new"] parent_stream_policies = ["disjoint"] @@ -43,10 +45,10 @@ ############################## ############################## -CUDA_CMD = "./{}_{} -n {} -b {} -c {} -t {} | tee {}" +CUDA_CMD = "./{}_{} -n {} -b {} -c {} -t {} -g {} | tee {}" -def execute_cuda_benchmark(benchmark, size, block_size, exec_policy, num_iter, debug, output_date=None): +def execute_cuda_benchmark(benchmark, size, block_size, exec_policy, num_iter, debug, num_blocks=DEFAULT_NUM_BLOCKS, output_date=None): if debug: BenchmarkResult.log_message("") BenchmarkResult.log_message("") @@ -61,7 +63,7 @@ def execute_cuda_benchmark(benchmark, size, block_size, exec_policy, num_iter, d if not output_date: output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") - file_name = f"cuda_{output_date}_{benchmark}_{exec_policy}_{size}_{block_size['block_size_1d']}_{block_size['block_size_2d']}_{num_iter}.csv" + file_name = f"cuda_{output_date}_{benchmark}_{exec_policy}_{size}_{block_size['block_size_1d']}_{block_size['block_size_2d']}_{num_iter}_{num_blocks}.csv" # Create a folder if it doesn't exist; output_folder_path = os.path.join(BenchmarkResult.DEFAULT_RES_FOLDER, output_date + "_cuda") if not os.path.exists(output_folder_path): @@ -71,7 +73,7 @@ def execute_cuda_benchmark(benchmark, size, block_size, exec_policy, num_iter, d output_path = os.path.join(output_folder_path, file_name) benchmark_cmd = CUDA_CMD.format(benchmark, exec_policy, size, block_size["block_size_1d"], - block_size["block_size_2d"], num_iter, output_path) + block_size["block_size_2d"], num_iter, num_blocks, output_path) start = System.nanoTime() result = subprocess.run(benchmark_cmd, shell=True, @@ -149,6 +151,8 @@ def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_strea help="If present, run performance tests using CUDA") parser.add_argument("-i", "--num_iter", metavar="N", type=int, default=BenchmarkResult.DEFAULT_NUM_ITER, help="Number of times each benchmark is executed") + parser.add_argument("-g", "--num_blocks", metavar="N", type=int, default=DEFAULT_NUM_BLOCKS, + help="Number of blocks in each kernel, when applicable") parser.add_argument("-p", "--time_phases", action="store_true", help="Measure the execution time of each phase of the benchmark;" " note that this introduces overheads, and might influence the total execution time") @@ -160,6 +164,7 @@ def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_strea num_iter = args.num_iter if args.num_iter else BenchmarkResult.DEFAULT_NUM_ITER use_cuda = args.cuda_test time_phases = args.time_phases + num_blocks = args.num_blocks # Setup the block size for each benchmark; block_sizes = create_block_size_list(block_sizes_1d, block_sizes_2d) @@ -187,7 +192,7 @@ def tot_benchmark_count(): for exec_policy in exec_policies: # CUDA Benchmarks; if use_cuda: - execute_cuda_benchmark(b, n, block_size, exec_policy, num_iter, debug, output_date=output_date) + execute_cuda_benchmark(b, n, block_size, exec_policy, num_iter, debug, num_blocks=num_blocks, output_date=output_date) i += 1 # GrCUDA Benchmarks; else: diff --git a/projects/resources/python/plotting/load_data.py b/projects/resources/python/plotting/load_data.py index dba170ee..18a262a3 100755 --- a/projects/resources/python/plotting/load_data.py +++ b/projects/resources/python/plotting/load_data.py @@ -113,7 +113,10 @@ def load_data_cuda(input_date: str, skip_iter=0, remove_inf=True, remove_time_ze data_tmp = [] for f in os.listdir(input_path): # Parse filename; - benchmark, exec_policy, size, block_size_1d, block_size_2d, total_iterations = os.path.splitext(f)[0].split("_")[7:] + try: + benchmark, exec_policy, size, block_size_1d, block_size_2d, total_iterations, num_blocks = os.path.splitext(f)[0].split("_")[7:] + except ValueError: + benchmark, exec_policy, size, block_size_1d, block_size_2d, total_iterations, num_blocks = os.path.splitext(f)[0].split("_")[7:] + [64] tmp_data = pd.read_csv(os.path.join(input_path, f)) # Skip first lines; diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 2860eb11..300839bd 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,8 +21,8 @@ from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot -INPUT_DATE = "2020_07_10_15_42_44_grcuda" -OUTPUT_DATE = "2020_07_10" +INPUT_DATE = "2020_07_14_16_39_21_grcuda" +OUTPUT_DATE = "2020_07_14" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} @@ -55,8 +55,11 @@ def build_exec_time_plot(data, gridspec, x, y): pc = PatchCollection(rectangles, facecolor="white", edgecolor="#2f2f2f", linewidth=0.5, zorder=3, clip_on=True, alpha=0.7) ax.add_collection(pc) - # Set the same y limits in each plot; - ax.set_ylim((0, 3)) + # Top y-lim is depends on the benchmark, and is multiple of 1.5; + max_y_val = np.max(data.groupby(["block_size_str", "size_str"])["computation_speedup"].median()) + fixed_max_y_val = np.ceil(max_y_val / 1.5) * 1.5 + + ax.set_ylim((0.8, fixed_max_y_val)) # Add a horizontal line to denote speedup = 1x; ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) @@ -66,15 +69,17 @@ def build_exec_time_plot(data, gridspec, x, y): ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=45, ha="right", fontsize=9, rotation_mode="anchor") ax.tick_params(labelcolor="black") # Set the y ticks; - ax.yaxis.set_major_locator(plt.LinearLocator(7)) - if y == 0: - ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) - else: - ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) - # Hide tick markers; - for tic in ax.yaxis.get_major_ticks(): - tic.tick1line.set_visible(False) - tic.tick2line.set_visible(False) + ax.yaxis.set_major_locator(plt.LinearLocator(8)) + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=9) + + # if y == 0: + # ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) + # else: + # ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # # Hide tick markers; + # for tic in ax.yaxis.get_major_ticks(): + # tic.tick1line.set_visible(False) + # tic.tick2line.set_visible(False) ax.set_ylabel(None) ax.set_xlabel(None) @@ -117,8 +122,11 @@ def build_exec_time_plot_1_row(data, gridspec, y): labels = sorted(data["size"].unique()) labels_str = [str(x) for x in labels] - # Set the same y limits in each plot; - ax.set_ylim((0.8, 1.5)) + # Top y-lim is depends on the benchmark, and is multiple of 1.5; + max_y_val = np.max(data.groupby(["block_size_str", "size_str"])["computation_speedup"].median()) + fixed_max_y_val = np.ceil(max_y_val / 1.5) * 1.5 + + ax.set_ylim((0.8, fixed_max_y_val)) # Add a horizontal line to denote speedup = 1x; ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) @@ -129,14 +137,16 @@ def build_exec_time_plot_1_row(data, gridspec, y): ax.tick_params(labelcolor="black") # Set the y ticks; ax.yaxis.set_major_locator(plt.LinearLocator(8)) - if y == 0: - ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) - else: - ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) - # Hide tick markers; - for tic in ax.yaxis.get_major_ticks(): - tic.tick1line.set_visible(False) - tic.tick2line.set_visible(False) + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=9) + + # if y == 0: + # ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=12) + # else: + # ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # # Hide tick markers; + # for tic in ax.yaxis.get_major_ticks(): + # tic.tick1line.set_visible(False) + # tic.tick2line.set_visible(False) ax.set_ylabel(None) ax.set_xlabel(None) @@ -194,7 +204,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): left=0.2, right=0.90, hspace=1.1, - wspace=0.15) + wspace=0.3) exec_time_axes = [] for b_i, b in enumerate(benchmark_list): @@ -229,7 +239,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): left=0.1, right=0.95, hspace=1.1, - wspace=0.15) + wspace=0.3) exec_time_axes = [] for b_i, b in enumerate(benchmark_list): diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index d871f2d5..f4ba6702 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -26,9 +26,9 @@ ############################## -INPUT_DATE_GRCUDA = "2020_07_10_15_42_44_grcuda" -INPUT_DATE_CUDA = "2020_07_10_16_18_02_cuda" -OUTPUT_DATE = "2020_07_10" +INPUT_DATE_GRCUDA = "2020_07_14_16_39_21_grcuda" +INPUT_DATE_CUDA = "2020_07_14_17_17_57_cuda" +OUTPUT_DATE = "2020_07_14" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} From 57ee19c7cab78c93c18ddf9d569f170bba0866b0 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 16 Jul 2020 10:58:30 +0200 Subject: [PATCH 119/236] updated results --- RESULTS.md | 60 ++++-- projects/resources/cuda/b5_default.cu | 142 ++++++++----- projects/resources/cuda/b5_sync.cu | 132 ++++++++---- projects/resources/cuda/b6_default.cu | 9 + projects/resources/cuda/b7_default.cu | 42 +++- projects/resources/cuda/b7_sync.cu | 27 ++- projects/resources/cuda/b8_default.cu | 11 + .../python/benchmark/bench/bench_5.py | 70 +++--- .../python/benchmark/bench/bench_6.py | 47 +++-- .../python/benchmark/bench/bench_72.py | 27 ++- .../python/benchmark/bench/bench_8.py | 16 +- .../python/benchmark/benchmark_wrapper.py | 10 +- .../python/plotting/plot_speedup_baseline.py | 4 +- .../plotting/plot_speedup_grcuda_cuda.py | 199 ++++++++++-------- 14 files changed, 516 insertions(+), 280 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index 1d305a67..d0f7aa9e 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -10,21 +10,25 @@ This document contains some performance results obtained running Graalpython ben * **DRAM**: 32 GB, DDR4 * Execution time measures the total amount of time spent by GPU execution, from the first kernel scheduling until all GPU kernels have finished executing * Each benchmark is executed for **30 iterations**, and the average time skips the first 3 to allow the performance of GraalVM to stabilize +* Parameters that have been kept fixed (such as the number of blocks for kernels whose number of blocks is not a function of data-size) have been optimized to provide the best performance for synchronous execution, +and provide a more realistic performance comparison. ## Results * **Sync time** is the baseline, it measures synchronous GPU kernel scheduling. In this case, dependencies between kernels are not computed, making GrCUDA overheads even smaller. * **DAG** is the computation time when using GrCUDA DAG kernel scheduling, performing transparent GPU resource-sharing. -* The field **Threads** is the number of threads for each block, in CUDA; this number ranges from 32 to 1024. A higher number implies bigger blocks, and possibly less GPU occupation +* The field **Threads** is the number of threads for each block, in CUDA; this number ranges from 32 to 1024. A higher number implies bigger blocks, and possibly fewer concurrent blocks running in parallel. + Blocks can also be 2-dimensional: we left 2D blocks with size 8x8 as bigger blocks always resulted in strictly longer execution times, for all scheduling policies. * The field **Size** is the number of elements in the input. Depending on the benchmark it could be the size of a vector, the number of rows in a square matrix, the number of vertices of a graph; more information are provided for each benchmark -### Benchmark 1 (bench_1) +### Vector Squares (bench_1) Compute the sum of difference of squares of 2 vectors, using multiple GrCUDA kernels. It's a fairly artificial benchmark that measures a simple case of parallelism. Most of the execution time is spent in the reduction computation, limiting the amount of parallelism available, especially on large input data. +Speedups are achievable by overlapping data-transfer and computations, although the data-transfer takes about 4x-5x longer than the square computation, limiting the maximum achievable speedup. Structure of the computation: @@ -43,6 +47,21 @@ B: x^2 ──┘ | | 20000000 | 0.0074 | 0.0037 | 2x | --> +### Black & Scholes (bench_5) + +Compute the Black & Scholes equation for European call options, for 10 different underlying types of stocks, and for each stock a vector of prices at time 0. +The main computation is taken from Nvidia's CUDA code samples ([link](http://mercury.pr.erau.edu/~siewerts/extra/code/digital-media/CUDA/cuda_work/samples/4_Finance/BlackScholes/BlackScholes_kernel.cuh)), +and adapted to use double precision arithmetic to create a more computationally intensive kernel. +The idea of this benchmark is to simulate a streaming computation in which data-transfer and computation of multiple kernels can be overlapped efficiently, +without data-dependencies between kernels. +To the contrary of `bench_1`, computation, and not data transfer, is the main limiting factor for parallel execution. + +Structure of the computation: + +``` +BS(x[1]) -> ... -> BS(x[10]) +``` + ### Machine Learning Ensemble (bench_6) Compute an ensemble of Categorical Naive Bayes and Ridge Regression classifiers. @@ -52,7 +71,6 @@ In the DAG below, input arguments that are not involved in the computation of de The size of the benchmark is the number of rows in the matrix (each representing a document with 1000 features). Predictions are done by choosing among 5 classes. The Ridge Regression classifier takes about 2x the time of the Categorical Naive Bayes classifier. -Speedups are especially noticeable for small input size, as for larger data the Ridge-Regression classifiers bottlenecks the overall computation and results in high GPU occupation. Structure of the computation: @@ -86,11 +104,10 @@ Compute the HITS algorithm on a graph. The algorithm is composed of repeated spa on a matrix and its transpose (outgoing and ingoing edges of a graph). The 2 matrix multiplications, for each iteration, can be computed in parallel, and take most of the total computation time. -The input graph has **size** vertices, degree 10 and uniform distribution. Each execution of this algorithm is composed of 10 iterations. -Kernel computations are very fast, and the speedup increases for larger input graphs: most likely, this is the effect of having 2 SpMV running concurrently, -which makes better use of the available memory bandwidth. The number of blocks is kept constant at 32, as higher block count resulted in worse overall performance. +The input graph has **size** vertices, degree 3 and uniform distribution. Each execution of this algorithm is composed of 5 iterations. +The number of blocks is kept constant at 32, as higher block count resulted in worse overall performance. -As the benchmark is composed of 2 independent branches, the **maximum theoretical speedup is 2x**. +As the benchmark is composed of 2 independent branches, the **maximum theoretical speedup is 2x**, although realistic speedup will be lower and mostly achieved through transfer-computation overlapping. Structure of the computation (read-only parameters that do not influence the DAG are omitted): @@ -143,25 +160,34 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── ## Plots -![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_14/speedup_baseline_1_row_2020_07_14.png) +![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_1_row_2020_07_15.png) -In general, **DAG scheduling allows better GPU resource usage**: when the data-set size does not fill the GPU computational resources, DAG scheduling provides speedups close to the theoretical optimum. As expected, the speedup is less significant as the data-set size increases, as each kernel can fully use the GPU resources by itself. +In general, **DAG scheduling allows better GPU resource usage**: in many benchmarks (such as `bench_1` and `bench_5`) we observe how overlapping data-transfer and computation enables faster total execution time. + In other cases (`bench_6` and `bench_7`) speedups are also provided by computation overlap. DAG schedling provides **speedups from 10% to 50%**, while being completely transparent to the programmer. -**Even for large data-sets** (enough to saturate the GPU memory), **the DAG scheduling speedup stays above 1**: even if kernels fill the GPU resources, it is still possible to achieve a small degree of parallelism by overlapping data transfer with execution of different kernels, or possibly by overlapping execution of kernels with different bottlenecks. +**Speedup stays constant with data-set size. even for large data-sets** (enough to saturate the GPU memory): even if kernels fill the GPU resources, + it is still possible to achieve a large degree of parallelism by overlapping data transfer with execution of different kernels, or possibly by overlapping execution of kernels with different bottlenecks. **DAG scheduling is never worse than serial scheduling**, meaning that users do not have to think about which scheduling policy would be better for them, but can always leverage DAG scheduling. -As rule of thumb, **smaller blocks provide better speedup**: this is likely connected to the GPU architecture being better at parallelizing smaller blocks. In general, small blocks almost always provide better absolute performance, for similar reasons. Kernels in the benchmarks leverage grid-striding, meaning that the number of blocks is independent from the size of data to be processed and each thread becomes more computationally intensive as the data-size increases (instead of being constant). Currently, kernels do not use shared memory whose size depends on block size; if that was the case, bigger blocks might have an advantage. +As rule of thumb, **DAG scheduling is more robust to kernel configuration**: in many cases, using `block_size=32` results in higher speedup, but similar absolute execution time compared to larger block size. + In the case of serial synchronous scheduling, using small blocks results in underutilization of the GPU resources, while using DAG scheduling provides better resource utilization by scheduling multiple kernels in parallel. + This is an extremely useful advantage of DAG scheduling, as it means that programmers have to spend less time profiling their code to find the optimal kernel configuration. + +![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_2020_07_15.png) + +Performance of serial and DAG GrCUDA scheduling has been compared to the same benchmarks implemented directly in C++ and CUDA. The experimental setup and the kernels are exactly the same. In the case of CUDA asynchronous kernel execution, dependencies and synchronization points have been computed by hand, instead of automatically. This provides a **comparison of how the overhead introduced by GrCUDA impacts the total execution time** compared to lower-level kernel scheduling. -![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_14/speedup_baseline_2020_07_14.png) +In all cases, the gap between CUDA and GrCUDA is minimal, and converges to 0 as the data-set size increases. It can be safely stated that in any realistic computation using serial GrCUDA scheduling will not decrease performance. +The only situation with a visible difference is `bench_8`, when processing very small images (`800x800` pixels), as the computation lasts only for a couple of milliseconds. -Performance of serial and DAG GrCUDA scheduling has been compared to the same benchmarks implemented directly in C++ and CUDA. The experimental setup and the kernels are exactly the same. In the case of CUDA asynchronous kernel execution, dependendencies and synchronization points have been computed by hand, instead of automatically. This provides a **comparison of how the overhead introduced by GrCUDA impacts the total execution time** compared to lower-level kernel scheduling. +![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_grcuda_cuda_compact_2020_07_15.png) -In the case of serial execution, CUDA is sligthly faster than GrCUDA, as expected; however, the performance difference is negligible and converges to 0 as the data-set size increases. It can be safely stated that in any realistic computation using serial GrCUDA scheduling will not decrease performance. +![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_grcuda_cuda_2020_07_15.png) -As for asynchronous DAG scheduling, we see how GrCUDA is actually **faster** than CUDA in most cases. It is not clear how GrCUDA is actually faster than CUDA. The only difference is that GrCUDA uses `nvrtc` (Nvidia runtime compilation library), instead of `nvcc`. Whether this provides faster kernel launches, or generates faster code, is yet to be checked. It is likely that `nvrtc` uses the same routines as `nvcc` for compilation, although kernel launches might be faster. +These results are further reaffirmed by looking at the execution time distributions (for example, using the largest data-sets and `block_size=256`, to evaluate an average case). + In a couple of cases (e.g `bench_1`) it can be seen how the CUDA implementation might be sligthly faster (around 5%), although the same is true for GrCUDA in `bench_8`, while other benchmarks show very similar distributions. -![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_14/speedup_baseline_grcuda_cuda_compact_2020_07_14.png) +![Relative exec. time w.r.t. CUDA, distribution](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_grcuda_cuda_ridgeplot_2020_07_15.png) -![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_14/speedup_baseline_grcuda_cuda_2020_07_14.png) diff --git a/projects/resources/cuda/b5_default.cu b/projects/resources/cuda/b5_default.cu index 78973abe..6ae8296a 100644 --- a/projects/resources/cuda/b5_default.cu +++ b/projects/resources/cuda/b5_default.cu @@ -15,46 +15,90 @@ using clock_type = chrono::high_resolution_clock; ///////////////////////////// ///////////////////////////// -float R = 0.08; -float V = 0.3; -float T = 1.0; -float K = 60.0; - -__device__ inline float cndGPU(float d) { - const float A1 = 0.31938153f; - const float A2 = -0.356563782f; - const float A3 = 1.781477937f; - const float A4 = -1.821255978f; - const float A5 = 1.330274429f; - const float RSQRT2PI = 0.39894228040143267793994605993438f; - - float - K = __fdividef(1.0f, (1.0f + 0.2316419f * fabsf(d))); - - float - cnd = RSQRT2PI * __expf(- 0.5f * d * d) * +// float R = 0.08; +// float V = 0.3; +// float T = 1.0; +// float K = 60.0; + +// __device__ inline float cndGPU(float d) { +// const float A1 = 0.31938153f; +// const float A2 = -0.356563782f; +// const float A3 = 1.781477937f; +// const float A4 = -1.821255978f; +// const float A5 = 1.330274429f; +// const float RSQRT2PI = 0.39894228040143267793994605993438f; + +// float +// K = __fdividef(1.0f, (1.0f + 0.2316419f * fabsf(d))); + +// float +// cnd = RSQRT2PI * __expf(- 0.5f * d * d) * +// (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); + +// if (d > 0) +// cnd = 1.0f - cnd; + +// return cnd; +// } + +// extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, float T, float K) { + +// float sqrtT = __fdividef(1.0F, rsqrtf(T)); +// for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { +// float expRT; +// float d1, d2, CNDD1, CNDD2; +// d1 = __fdividef(__logf(x[i] / K) + (R + 0.5f * V * V) * T, V * sqrtT); +// d2 = d1 - V * sqrtT; + +// CNDD1 = cndGPU(d1); +// CNDD2 = cndGPU(d2); + +// //Calculate Call and Put simultaneously +// expRT = __expf(-R * T); +// y[i] = x[i] * CNDD1 - K * expRT * CNDD2; +// } +// } + +double R = 0.08; +double V = 0.3; +double T = 1.0; +double K = 60.0; + +__device__ inline double cndGPU(double d) { + const double A1 = 0.31938153f; + const double A2 = -0.356563782f; + const double A3 = 1.781477937f; + const double A4 = -1.821255978f; + const double A5 = 1.330274429f; + const double RSQRT2PI = 0.39894228040143267793994605993438f; + + double + K = 1.0 / (1.0 + 0.2316419 * fabs(d)); + + double + cnd = RSQRT2PI * exp(- 0.5f * d * d) * (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); if (d > 0) - cnd = 1.0f - cnd; + cnd = 1.0 - cnd; return cnd; } -extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, float T, float K) { +extern "C" __global__ void bs(const double *x, double *y, int N, double R, double V, double T, double K) { - float sqrtT = __fdividef(1.0F, rsqrtf(T)); + double sqrtT = 1.0 / rsqrt(T); for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { - float expRT; - float d1, d2, CNDD1, CNDD2; - d1 = __fdividef(__logf(x[i] / K) + (R + 0.5f * V * V) * T, V * sqrtT); + double expRT; + double d1, d2, CNDD1, CNDD2; + d1 = (log(x[i] / K) + (R + 0.5 * V * V) * T) / (V * sqrtT); d2 = d1 - V * sqrtT; CNDD1 = cndGPU(d1); CNDD2 = cndGPU(d2); //Calculate Call and Put simultaneously - expRT = __expf(-R * T); + expRT = exp(-R * T); y[i] = x[i] * CNDD1 - K * expRT * CNDD2; } } @@ -62,9 +106,9 @@ extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, ///////////////////////////// ///////////////////////////// -void init(float **x, float **y, float* tmp_x, int N, int K) { +void init(double **x, double **y, double* tmp_x, int N, int K) { for (int j = 0; j < N; j++) { - tmp_x[j] = 60 - 0.5 + (float) rand() / RAND_MAX; + tmp_x[j] = 60 - 0.5 + (double) rand() / RAND_MAX; for (int i = 0; i < K; i++) { x[i][j] = tmp_x[j]; // y[i][j] = 0; @@ -72,17 +116,17 @@ void init(float **x, float **y, float* tmp_x, int N, int K) { } } -void reset(float **x, float* y, int N, int K, cudaStream_t *s) { +void reset(double **x, double* y, int N, int K, cudaStream_t *s) { for (int i = 0; i < K; i++) { // memcpy(x[i], y, sizeof(int) * N); - cudaMemcpy(x[i], y, sizeof(float) * N, cudaMemcpyDefault); + // cudaMemcpy(x[i], y, sizeof(double) * N, cudaMemcpyDefault); // cudaMemcpyAsync(x[i], y, sizeof(int) * N, cudaMemcpyHostToDevice, s[i]); - // for (int j = 0; j < N; j++) { - // x[i][j] = y[j]; - // } + for (int j = 0; j < N; j++) { + x[i][j] = y[j]; + } } - // cudaMemPrefetchAsync(x[0], sizeof(float) * N, 0, s[0]); + // cudaMemPrefetchAsync(x[0], sizeof(double) * N, 0, s[0]); } @@ -116,14 +160,14 @@ int main(int argc, char *argv[]) { } auto start = clock_type::now(); - float **x = (float **) malloc(sizeof(float*) * M); - float **y = (float **) malloc(sizeof(float*) * M); - float *tmp_x = (float *) malloc(sizeof(float) * N); - // cudaHostRegister(tmp_x, sizeof(float) * N, 0); + double **x = (double **) malloc(sizeof(double*) * M); + double **y = (double **) malloc(sizeof(double*) * M); + double *tmp_x = (double *) malloc(sizeof(double) * N); + // cudaHostRegister(tmp_x, sizeof(double) * N, 0); for (int i = 0; i < M; i++) { - cudaMallocManaged(&x[i], sizeof(float) * N); - cudaMallocManaged(&y[i], sizeof(float) * N); + cudaMallocManaged(&x[i], sizeof(double) * N); + cudaMallocManaged(&y[i], sizeof(double) * N); } if (debug && err) std::cout << err << std::endl; @@ -140,30 +184,32 @@ int main(int argc, char *argv[]) { if (debug) std::cout << "x[0][0]=" << tmp_x[0] << std::endl; auto end = clock_type::now(); - if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + if (debug) std::cout << "init=" << (double) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; // Print header; if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; - float tot = 0; + double tot = 0; for (int i = 0; i < num_executions; i++) { if (debug) std::cout << "\n-- iter=" << i << std::endl; auto start_tmp = clock_type::now(); reset(x, tmp_x, N, M, s); auto end_tmp = clock_type::now(); auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); - if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + if (debug) std::cout << " reset=" << (double) reset_time / 1000 << " ms" << std::endl; start = clock_type::now(); for (int j = 0; j < M; j++) { - // if (j > 0) cudaMemPrefetchAsync(y[j - 1], sizeof(float) * N, cudaCpuDeviceId, s[j - 1]); + cudaStreamAttachMemAsync(s[j], x[j], sizeof(double) * N); + cudaStreamAttachMemAsync(s[j], y[j], sizeof(double) * N); + // if (j > 0) cudaMemPrefetchAsync(y[j - 1], sizeof(double) * N, cudaCpuDeviceId, s[j - 1]); bs<<>>(x[j], y[j], N, R, V, T, K); - // if (j < M - 1) cudaMemPrefetchAsync(x[j + 1], sizeof(float) * N, 0, s[j + 1]); + // if (j < M - 1) cudaMemPrefetchAsync(x[j + 1], sizeof(double) * N, 0, s[j + 1]); } // Last tile; - // cudaMemPrefetchAsync(y[M - 1], sizeof(float) * N, cudaCpuDeviceId, s[M - 1]); + // cudaMemPrefetchAsync(y[M - 1], sizeof(double) * N, cudaCpuDeviceId, s[M - 1]); for (int j = 0; j < M; j++) { err = cudaStreamSynchronize(s[j]); @@ -180,14 +226,14 @@ int main(int argc, char *argv[]) { for (int j = 0; j < M; j++) { std::cout << y[j][0] << ", "; } - std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + std::cout << ", ...]; time=" << (double) tmp / 1000 << " ms" << std::endl; } else { - std::cout << i << "," << y[0][0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + std::cout << i << "," << y[0][0] << "," << (double) (reset_time + tmp) / 1e6 << "," << (double) reset_time / 1e6 << "," << (double) tmp / 1e6 << std::endl; } } // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (double) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b5_sync.cu b/projects/resources/cuda/b5_sync.cu index b5d28f8d..7f6d9dbb 100644 --- a/projects/resources/cuda/b5_sync.cu +++ b/projects/resources/cuda/b5_sync.cu @@ -15,46 +15,90 @@ using clock_type = chrono::high_resolution_clock; ///////////////////////////// ///////////////////////////// -float R = 0.08; -float V = 0.3; -float T = 1.0; -float K = 60.0; - -__device__ inline float cndGPU(float d) { - const float A1 = 0.31938153f; - const float A2 = -0.356563782f; - const float A3 = 1.781477937f; - const float A4 = -1.821255978f; - const float A5 = 1.330274429f; - const float RSQRT2PI = 0.39894228040143267793994605993438f; - - float - K = __fdividef(1.0f, (1.0f + 0.2316419f * fabsf(d))); - - float - cnd = RSQRT2PI * __expf(- 0.5f * d * d) * +// float R = 0.08; +// float V = 0.3; +// float T = 1.0; +// float K = 60.0; + +// __device__ inline float cndGPU(float d) { +// const float A1 = 0.31938153f; +// const float A2 = -0.356563782f; +// const float A3 = 1.781477937f; +// const float A4 = -1.821255978f; +// const float A5 = 1.330274429f; +// const float RSQRT2PI = 0.39894228040143267793994605993438f; + +// float +// K = __fdividef(1.0f, (1.0f + 0.2316419f * fabsf(d))); + +// float +// cnd = RSQRT2PI * __expf(- 0.5f * d * d) * +// (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); + +// if (d > 0) +// cnd = 1.0f - cnd; + +// return cnd; +// } + +// extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, float T, float K) { + +// float sqrtT = __fdividef(1.0F, rsqrtf(T)); +// for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { +// float expRT; +// float d1, d2, CNDD1, CNDD2; +// d1 = __fdividef(__logf(x[i] / K) + (R + 0.5f * V * V) * T, V * sqrtT); +// d2 = d1 - V * sqrtT; + +// CNDD1 = cndGPU(d1); +// CNDD2 = cndGPU(d2); + +// //Calculate Call and Put simultaneously +// expRT = __expf(-R * T); +// y[i] = x[i] * CNDD1 - K * expRT * CNDD2; +// } +// } + +double R = 0.08; +double V = 0.3; +double T = 1.0; +double K = 60.0; + +__device__ inline double cndGPU(double d) { + const double A1 = 0.31938153f; + const double A2 = -0.356563782f; + const double A3 = 1.781477937f; + const double A4 = -1.821255978f; + const double A5 = 1.330274429f; + const double RSQRT2PI = 0.39894228040143267793994605993438f; + + double + K = 1.0 / (1.0 + 0.2316419 * fabs(d)); + + double + cnd = RSQRT2PI * exp(- 0.5f * d * d) * (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); if (d > 0) - cnd = 1.0f - cnd; + cnd = 1.0 - cnd; return cnd; } -extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, float T, float K) { +extern "C" __global__ void bs(const double *x, double *y, int N, double R, double V, double T, double K) { - float sqrtT = __fdividef(1.0F, rsqrtf(T)); + double sqrtT = 1.0 / rsqrt(T); for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { - float expRT; - float d1, d2, CNDD1, CNDD2; - d1 = __fdividef(__logf(x[i] / K) + (R + 0.5f * V * V) * T, V * sqrtT); + double expRT; + double d1, d2, CNDD1, CNDD2; + d1 = (log(x[i] / K) + (R + 0.5 * V * V) * T) / (V * sqrtT); d2 = d1 - V * sqrtT; CNDD1 = cndGPU(d1); CNDD2 = cndGPU(d2); //Calculate Call and Put simultaneously - expRT = __expf(-R * T); + expRT = exp(-R * T); y[i] = x[i] * CNDD1 - K * expRT * CNDD2; } } @@ -62,9 +106,9 @@ extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, ///////////////////////////// ///////////////////////////// -void init(float **x, float **y, float* tmp_x, int N, int K) { +void init(double **x, double **y, double* tmp_x, int N, int K) { for (int j = 0; j < N; j++) { - tmp_x[j] = 60 - 0.5 + (float) rand() / RAND_MAX; + tmp_x[j] = 60 - 0.5 + (double) rand() / RAND_MAX; for (int i = 0; i < K; i++) { x[i][j] = tmp_x[j]; // y[i][j] = 0; @@ -72,14 +116,14 @@ void init(float **x, float **y, float* tmp_x, int N, int K) { } } -void reset(float **x, float* y, int N, int K) { +void reset(double **x, double* y, int N, int K) { for (int i = 0; i < K; i++) { // memcpy(x[i], y, sizeof(int) * N); - cudaMemcpy(x[i], y, sizeof(float) * N, cudaMemcpyDefault); + // cudaMemcpy(x[i], y, sizeof(double) * N, cudaMemcpyDefault); // cudaMemcpyAsync(x[i], y, sizeof(int) * N, cudaMemcpyHostToDevice, s[i]); - // for (int j = 0; j < N; j++) { - // x[i][j] = y[j]; - // } + for (int j = 0; j < N; j++) { + x[i][j] = y[j]; + } } } ///////////////////////////// @@ -112,14 +156,14 @@ int main(int argc, char *argv[]) { } auto start = clock_type::now(); - float **x = (float **) malloc(sizeof(float*) * M); - float **y = (float **) malloc(sizeof(float*) * M); - float *tmp_x = (float *) malloc(sizeof(float) * N); - cudaHostRegister(tmp_x, sizeof(float) * N, 0); + double **x = (double **) malloc(sizeof(double*) * M); + double **y = (double **) malloc(sizeof(double*) * M); + double *tmp_x = (double *) malloc(sizeof(double) * N); + cudaHostRegister(tmp_x, sizeof(double) * N, 0); for (int i = 0; i < M; i++) { - cudaMallocManaged(&x[i], sizeof(float) * N); - cudaMallocManaged(&y[i], sizeof(float) * N); + cudaMallocManaged(&x[i], sizeof(double) * N); + cudaMallocManaged(&y[i], sizeof(double) * N); } if (debug && err) std::cout << err << std::endl; @@ -129,19 +173,19 @@ int main(int argc, char *argv[]) { if (debug) std::cout << "x[0][0]=" << tmp_x[0] << std::endl; auto end = clock_type::now(); - if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + if (debug) std::cout << "init=" << (double) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; // Print header; if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; - float tot = 0; + double tot = 0; for (int i = 0; i < num_executions; i++) { if (debug) std::cout << "\n-- iter=" << i << std::endl; auto start_tmp = clock_type::now(); reset(x, tmp_x, N, M); auto end_tmp = clock_type::now(); auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); - if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + if (debug) std::cout << " reset=" << (double) reset_time / 1000 << " ms" << std::endl; start = clock_type::now(); for (int j = 0; j < M; j++) { @@ -160,14 +204,14 @@ int main(int argc, char *argv[]) { for (int j = 0; j < M; j++) { std::cout << y[j][0] << ", "; } - std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + std::cout << ", ...]; time=" << (double) tmp / 1000 << " ms" << std::endl; } else { - std::cout << i << "," << y[0][0] << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + std::cout << i << "," << y[0][0] << "," << (double) (reset_time + tmp) / 1e6 << "," << (double) reset_time / 1e6 << "," << (double) tmp / 1e6 << std::endl; } } // Print; cudaDeviceSynchronize(); - if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; + if (debug) std::cout << "\nmean exec time=" << (double) tot / (1000 * (num_executions - skip_iterations)) << " ms" << std::endl; } diff --git a/projects/resources/cuda/b6_default.cu b/projects/resources/cuda/b6_default.cu index 044a0965..ce689932 100644 --- a/projects/resources/cuda/b6_default.cu +++ b/projects/resources/cuda/b6_default.cu @@ -223,6 +223,15 @@ int main(int argc, char *argv[]) { start = clock_type::now(); + cudaStreamAttachMemAsync(s1, z, 0); + cudaStreamAttachMemAsync(s2, nb_feat_log_prob, 0); + cudaStreamAttachMemAsync(s2, r1, 0); + cudaStreamAttachMemAsync(s1, ridge_coeff, 0); + cudaStreamAttachMemAsync(s1, r2, 0); + cudaStreamAttachMemAsync(s2, nb_amax, 0); + cudaStreamAttachMemAsync(s2, nb_l, 0); + cudaStreamAttachMemAsync(s1, ridge_intercept, 0); + rr_1<<>>(x, z, N, num_features); nb_1<<>>(x, nb_feat_log_prob, r1, N, num_features, num_classes); diff --git a/projects/resources/cuda/b7_default.cu b/projects/resources/cuda/b7_default.cu index 6f84dab2..d624c90c 100644 --- a/projects/resources/cuda/b7_default.cu +++ b/projects/resources/cuda/b7_default.cu @@ -218,7 +218,7 @@ int main(int argc, char *argv[]) { int N = options.N; int degree = 3; - int iterations = 10; + int iterations = 5; int block_size = options.block_size_1d; int num_blocks = 32; //options.num_blocks; @@ -238,8 +238,19 @@ int main(int argc, char *argv[]) { auto start = clock_type::now(); int *ptr, *idx, *val, *ptr2, *idx2, *val2, *rowCounter1, *rowCounter2; + + int *ptr_tmp, *idx_tmp, *val_tmp, *ptr2_tmp, *idx2_tmp, *val2_tmp; + float *auth1, *auth2, *hub1, *hub2, *auth_norm, *hub_norm; + // Use temporary CPU vectors to simplify reinitialization at each benchmark execution; + ptr_tmp = (int *) malloc(sizeof(int) * (N + 1)); + ptr2_tmp = (int *) malloc(sizeof(int) * (N + 1)); + idx_tmp = (int *) malloc(sizeof(int) * nnz); + idx2_tmp = (int *) malloc(sizeof(int) * nnz); + val_tmp = (int *) malloc(sizeof(int) * nnz); + val2_tmp = (int *) malloc(sizeof(int) * nnz); + err = cudaMallocManaged(&ptr, sizeof(int) * (N + 1)); err = cudaMallocManaged(&ptr2, sizeof(int) * (N + 1)); err = cudaMallocManaged(&idx, sizeof(int) * nnz); @@ -273,8 +284,8 @@ int main(int argc, char *argv[]) { random_coo(x, y, v, N, degree); // Create a CSR; - coo2csr(ptr, idx, val, x, y, v, N, N, nnz); - coo2csr(ptr2, idx2, val2, y, x, v, N, N, nnz); + coo2csr(ptr_tmp, idx_tmp, val_tmp, x, y, v, N, N, nnz); + coo2csr(ptr2_tmp, idx2_tmp, val2_tmp, y, x, v, N, N, nnz); auto end = clock_type::now(); if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; @@ -284,8 +295,19 @@ int main(int argc, char *argv[]) { float tot = 0; for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; auto start_tmp = clock_type::now(); + for (int j = 0; j < nnz; j++) { + idx[j] = idx_tmp[j]; + idx2[j] = idx2_tmp[j]; + val[j] = val_tmp[j]; + val2[j] = val2_tmp[j]; + } + for (int j = 0; j < N + 1; j++) { + ptr[j] = ptr_tmp[j]; + ptr2[j] = ptr2_tmp[j]; + } reset(auth1, auth2, hub1, hub2, auth_norm, hub_norm, N, s1, s2); rowCounter1[0] = 0; rowCounter2[0] = 0; @@ -304,6 +326,18 @@ int main(int argc, char *argv[]) { // cudaMemPrefetchAsync(auth_norm, sizeof(float), 0, s1); // cudaMemPrefetchAsync(hub_norm, sizeof(float), 0, s2); + cudaStreamAttachMemAsync(s1, ptr2, 0); + cudaStreamAttachMemAsync(s1, idx2, 0); + cudaStreamAttachMemAsync(s1, val2, 0); + cudaStreamAttachMemAsync(s1, hub1, 0); + cudaStreamAttachMemAsync(s1, auth2, 0); + + cudaStreamAttachMemAsync(s2, ptr, 0); + cudaStreamAttachMemAsync(s2, idx, 0); + cudaStreamAttachMemAsync(s2, val, 0); + cudaStreamAttachMemAsync(s2, auth1, 0); + cudaStreamAttachMemAsync(s2, hub2, 0); + cudaEvent_t e1, e2; cudaEventCreate(&e1); cudaEventCreate(&e2); @@ -323,9 +357,11 @@ int main(int argc, char *argv[]) { // Stream 1 waits stream 2; err = cudaStreamWaitEvent(s1, e2, 0); + cudaStreamAttachMemAsync(s1, auth1, 0); divide<<>>(auth2, auth1, auth_norm, N); // Stream 2 waits stream 1; err = cudaStreamWaitEvent(s2, e1, 0); + cudaStreamAttachMemAsync(s2, hub1, 0); divide<<>>(hub2, hub1, hub_norm, N); err = cudaStreamSynchronize(s1); diff --git a/projects/resources/cuda/b7_sync.cu b/projects/resources/cuda/b7_sync.cu index 870a13f1..5e76ec8a 100644 --- a/projects/resources/cuda/b7_sync.cu +++ b/projects/resources/cuda/b7_sync.cu @@ -220,7 +220,7 @@ int main(int argc, char *argv[]) { int N = options.N; int degree = 3; - int iterations = 10; + int iterations = 5; int block_size = options.block_size_1d; int num_blocks = 32; // options.num_blocks; @@ -240,8 +240,18 @@ int main(int argc, char *argv[]) { auto start = clock_type::now(); int *ptr, *idx, *val, *ptr2, *idx2, *val2, *rowCounter1, *rowCounter2; + int *ptr_tmp, *idx_tmp, *val_tmp, *ptr2_tmp, *idx2_tmp, *val2_tmp; + float *auth1, *auth2, *hub1, *hub2, *auth_norm, *hub_norm; + // Use temporary CPU vectors to simplify reinitialization at each benchmark execution; + ptr_tmp = (int *) malloc(sizeof(int) * (N + 1)); + ptr2_tmp = (int *) malloc(sizeof(int) * (N + 1)); + idx_tmp = (int *) malloc(sizeof(int) * nnz); + idx2_tmp = (int *) malloc(sizeof(int) * nnz); + val_tmp = (int *) malloc(sizeof(int) * nnz); + val2_tmp = (int *) malloc(sizeof(int) * nnz); + err = cudaMallocManaged(&ptr, sizeof(int) * (N + 1)); err = cudaMallocManaged(&ptr2, sizeof(int) * (N + 1)); err = cudaMallocManaged(&idx, sizeof(int) * nnz); @@ -269,8 +279,8 @@ int main(int argc, char *argv[]) { random_coo(x, y, v, N, degree); // Create a CSR; - coo2csr(ptr, idx, val, x, y, v, N, N, nnz); - coo2csr(ptr2, idx2, val2, y, x, v, N, N, nnz); + coo2csr(ptr_tmp, idx_tmp, val_tmp, x, y, v, N, N, nnz); + coo2csr(ptr2_tmp, idx2_tmp, val2_tmp, y, x, v, N, N, nnz); auto end = clock_type::now(); if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; @@ -280,8 +290,19 @@ int main(int argc, char *argv[]) { float tot = 0; for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; auto start_tmp = clock_type::now(); + for (int j = 0; j < nnz; j++) { + idx[j] = idx_tmp[j]; + idx2[j] = idx2_tmp[j]; + val[j] = val_tmp[j]; + val2[j] = val2_tmp[j]; + } + for (int j = 0; j < N + 1; j++) { + ptr[j] = ptr_tmp[j]; + ptr2[j] = ptr2_tmp[j]; + } reset(auth1, auth2, hub1, hub2, auth_norm, hub_norm, N); rowCounter1[0] = 0; rowCounter2[0] = 0; diff --git a/projects/resources/cuda/b8_default.cu b/projects/resources/cuda/b8_default.cu index 954c7e5d..22e4e401 100644 --- a/projects/resources/cuda/b8_default.cu +++ b/projects/resources/cuda/b8_default.cu @@ -299,6 +299,15 @@ int main(int argc, char *argv[]) { start = clock_type::now(); + cudaStreamAttachMemAsync(s1, blurred_small, 0); + cudaStreamAttachMemAsync(s1, mask_small, 0); + cudaStreamAttachMemAsync(s2, blurred_large, 0); + cudaStreamAttachMemAsync(s2, mask_large, 0); + cudaStreamAttachMemAsync(s3, blurred_unsharpen, 0); + cudaStreamAttachMemAsync(s3, image_unsharpen, 0); + cudaStreamAttachMemAsync(s2, image2, 0); + cudaStreamAttachMemAsync(s3, image3, 0); + gaussian_blur<<>>(image, blurred_small, N, N, kernel_small, kernel_small_diameter); gaussian_blur<<>>(image, blurred_large, N, N, kernel_large, kernel_large_diameter); @@ -337,6 +346,8 @@ int main(int argc, char *argv[]) { combine<<>>(image_unsharpen, blurred_large, mask_large, image2, N * N); cudaEventRecord(e4, s2); cudaStreamWaitEvent(s1, e4, 0); + cudaStreamAttachMemAsync(s1, image2, 0); + combine<<>>(image2, blurred_small, mask_small, image3, N * N); // Extra diff --git a/projects/resources/python/benchmark/bench/bench_5.py b/projects/resources/python/benchmark/bench/bench_5.py index 0d455671..0ecacfd1 100644 --- a/projects/resources/python/benchmark/bench/bench_5.py +++ b/projects/resources/python/benchmark/bench/bench_5.py @@ -18,41 +18,41 @@ K = 60.0 BS_KERNEL = """ -__device__ inline float cndGPU(float d) { - const float A1 = 0.31938153f; - const float A2 = -0.356563782f; - const float A3 = 1.781477937f; - const float A4 = -1.821255978f; - const float A5 = 1.330274429f; - const float RSQRT2PI = 0.39894228040143267793994605993438f; - - float - K = __fdividef(1.0f, (1.0f + 0.2316419f * fabsf(d))); - - float - cnd = RSQRT2PI * __expf(- 0.5f * d * d) * +__device__ inline double cndGPU(double d) { + const double A1 = 0.31938153f; + const double A2 = -0.356563782f; + const double A3 = 1.781477937f; + const double A4 = -1.821255978f; + const double A5 = 1.330274429f; + const double RSQRT2PI = 0.39894228040143267793994605993438f; + + double + K = 1.0 / (1.0 + 0.2316419 * fabs(d)); + + double + cnd = RSQRT2PI * exp(- 0.5f * d * d) * (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); if (d > 0) - cnd = 1.0f - cnd; + cnd = 1.0 - cnd; return cnd; } -extern "C" __global__ void bs(const float *x, float *y, int N, float R, float V, float T, float K) { +extern "C" __global__ void bs(double *x, double *y, int N, double R, double V, double T, double K) { - float sqrtT = __fdividef(1.0F, rsqrtf(T)); + double sqrtT = 1.0 / rsqrt(T); for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { - float expRT; - float d1, d2, CNDD1, CNDD2; - d1 = __fdividef(__logf(x[i] / K) + (R + 0.5f * V * V) * T, V * sqrtT); + double expRT; + double d1, d2, CNDD1, CNDD2; + d1 = (log(x[i] / K) + (R + 0.5 * V * V) * T) / (V * sqrtT); d2 = d1 - V * sqrtT; CNDD1 = cndGPU(d1); CNDD2 = cndGPU(d2); //Calculate Call and Put simultaneously - expRT = __expf(-R * T); + expRT = exp(-R * T); y[i] = x[i] * CNDD1 - K * expRT * CNDD2; } } @@ -71,7 +71,7 @@ def __init__(self, benchmark: BenchmarkResult): super().__init__("b5", benchmark) self.size = 0 - self.num_blocks = 32 + self.num_blocks = 64 self.sum_kernel = None self.cpu_result = 0 self.block_size = DEFAULT_BLOCK_SIZE_1D @@ -92,33 +92,33 @@ def alloc(self, size: int, block_size: dict = None) -> None: # Allocate vectors; for i in range(self.K): - self.x[i] = polyglot.eval(language="grcuda", string=f"float[{size}]") - self.y[i] = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.x[i] = polyglot.eval(language="grcuda", string=f"double[{size}]") + self.y[i] = polyglot.eval(language="grcuda", string=f"double[{size}]") # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") - self.bs_kernel = build_kernel(BS_KERNEL, "bs", "const pointer, pointer, sint32, float, float, float, float") + self.bs_kernel = build_kernel(BS_KERNEL, "bs", "pointer, pointer, sint32, double, double, double, double") @time_phase("initialization") def init(self): self.random_seed = randint(0, 10000000) - seed(self.random_seed) - if self.benchmark.random_init: - self.x_tmp = np.random.uniform(-0.5, 0.5, self.size).astype(np.float32) + K - else: - self.x_tmp = np.zeros(self.size, dtype=np.float32) + K # seed(self.random_seed) - # self.x_tmp = [K] * self.size # if self.benchmark.random_init: - # for i in range(len(self.x_tmp)): - # self.x_tmp[i] = random() - 0.5 + K + # self.x_tmp = np.random.uniform(-0.5, 0.5, self.size).astype(np.float64) + K + # else: + # self.x_tmp = np.zeros(self.size, dtype=np.float64) + K + seed(self.random_seed) + self.x_tmp = [K] * self.size + if self.benchmark.random_init: + for i in range(len(self.x_tmp)): + self.x_tmp[i] = random() - 0.5 + K @time_phase("reset_result") def reset_result(self) -> None: for i in range(self.K): - self.x[i].copyFrom(int(np.int64(self.x_tmp.ctypes.data)), self.size) - # for j in range(self.size): - # self.x[i][j] = self.x_tmp[j] + # self.x[i].copyFrom(int(np.int64(self.x_tmp.ctypes.data)), self.size) + for j in range(self.size): + self.x[i][j] = self.x_tmp[j] def execute(self) -> object: diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index 90fa5ba2..5b3cfe5b 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -12,7 +12,7 @@ ############################## NB_KERNEL = """ - extern "C" __global__ void nb_1(const int* x, const float* y, float* z, int size, int n_feat, int n_classes) { + extern "C" __global__ void nb_1(const int* x, float* y, float* z, int size, int n_feat, int n_classes) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) { for (int j = 0; j < n_classes; j++) { for (int q = 0; q < n_feat; q++) { @@ -22,7 +22,7 @@ } } - extern "C" __global__ void nb_2(const float* x, float* y, int n_row_x, int n_col_x) { + extern "C" __global__ void nb_2(float* x, float* y, int n_row_x, int n_col_x) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { float curr_max = x[i * n_col_x]; for (int j = 0; j < n_col_x; j++) { @@ -32,7 +32,7 @@ } } - extern "C" __global__ void nb_3(const float* x, const float* y, float* z, int n_row_x, int n_col_x) { + extern "C" __global__ void nb_3(float* x, float* y, float* z, int n_row_x, int n_col_x) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { float sum = 0; for (int j = 0; j < n_col_x; j++) { @@ -71,7 +71,7 @@ } } - extern "C" __global__ void rr_2(const float* x, const float* y, float* z, int size, int n_feat, int n_classes) { + extern "C" __global__ void rr_2(float* x, float* y, float* z, int size, int n_feat, int n_classes) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) { for (int j = 0; j < n_classes; j++) { for (int q = 0; q < n_feat; q++) { @@ -81,7 +81,7 @@ } } - extern "C" __global__ void rr_3(float* x, const float *y, int n_row_x, int n_col_x) { + extern "C" __global__ void rr_3(float* x, float *y, int n_row_x, int n_col_x) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { for (int j = 0; j < n_col_x; j++) { x[i * n_col_x + j] += y[j]; @@ -103,7 +103,7 @@ } } - extern "C" __global__ void argmax(const float *x, const float *y, int *z, int n_row_x, int n_col_x) { + extern "C" __global__ void argmax(float *x, float *y, int *z, int n_row_x, int n_col_x) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n_row_x; i += blockDim.x * gridDim.x) { int curr_best_index = 0; float curr_best = x[i * n_col_x] + y[i * n_col_x]; @@ -217,17 +217,17 @@ def alloc(self, size: int, block_size: dict = None) -> None: # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") - self.nb_1 = build_kernel(NB_KERNEL, "nb_1", "const pointer, const pointer, pointer, sint32, sint32, sint32") - self.nb_2 = build_kernel(NB_KERNEL, "nb_2", "const pointer, pointer, sint32, sint32") - self.nb_3 = build_kernel(NB_KERNEL, "nb_3", "const pointer, const pointer, pointer, sint32, sint32") - self.nb_4 = build_kernel(NB_KERNEL, "nb_4", "pointer, const pointer, sint32, sint32") + self.nb_1 = build_kernel(NB_KERNEL, "nb_1", "const pointer, pointer, pointer, sint32, sint32, sint32") + self.nb_2 = build_kernel(NB_KERNEL, "nb_2", "pointer, pointer, sint32, sint32") + self.nb_3 = build_kernel(NB_KERNEL, "nb_3", "pointer, pointer, pointer, sint32, sint32") + self.nb_4 = build_kernel(NB_KERNEL, "nb_4", "pointer, pointer, sint32, sint32") self.rr_1 = build_kernel(RR_KERNEL, "rr_1", "const pointer, pointer, sint32, sint32") - self.rr_2 = build_kernel(RR_KERNEL, "rr_2", "const pointer, const pointer, pointer, sint32, sint32, sint32") - self.rr_3 = build_kernel(RR_KERNEL, "rr_3", "pointer, const pointer, sint32, sint32") + self.rr_2 = build_kernel(RR_KERNEL, "rr_2", "pointer, pointer, pointer, sint32, sint32, sint32") + self.rr_3 = build_kernel(RR_KERNEL, "rr_3", "pointer, pointer, sint32, sint32") self.softmax = build_kernel(ENSEMBLE_KERNEL, "softmax", "pointer, sint32, sint32") - self.argmax = build_kernel(ENSEMBLE_KERNEL, "argmax", "const pointer, const pointer, pointer, sint32, sint32") + self.argmax = build_kernel(ENSEMBLE_KERNEL, "argmax", "pointer, pointer, pointer, sint32, sint32") @time_phase("initialization") def init(self): @@ -270,25 +270,32 @@ def execute(self) -> object: start = 0 # RR - 1. - self.execute_phase("rr_1", self.rr_1(self.num_blocks_feat, self.block_size), self.x, self.z, self.size, self.num_features) + self.execute_phase("rr_1", self.rr_1(self.num_blocks_feat, self.block_size), + self.x, self.z, self.size, self.num_features) # NB - 1. - self.execute_phase("nb_1", self.nb_1(self.num_blocks_size, self.block_size), self.x, self.nb_feat_log_prob, self.r1, self.size, self.num_features, self.num_classes) + self.execute_phase("nb_1", self.nb_1(self.num_blocks_size, self.block_size), + self.x, self.nb_feat_log_prob, self.r1, self.size, self.num_features, self.num_classes) # RR - 2. - self.execute_phase("rr_2", self.rr_2(self.num_blocks_size, self.block_size), self.z, self.ridge_coeff, self.r2, self.size, self.num_features, self.num_classes) + self.execute_phase("rr_2", self.rr_2(self.num_blocks_size, self.block_size), + self.z, self.ridge_coeff, self.r2, self.size, self.num_features, self.num_classes) # NB - 2. - self.execute_phase("nb_2", self.nb_2(self.num_blocks_size, self.block_size), self.r1, self.nb_amax, self.size, self.num_classes) + self.execute_phase("nb_2", self.nb_2(self.num_blocks_size, self.block_size), + self.r1, self.nb_amax, self.size, self.num_classes) # NB - 3. - self.execute_phase("nb_3", self.nb_3(self.num_blocks_size, self.block_size), self.r1, self.nb_amax, self.nb_l, self.size, self.num_classes) + self.execute_phase("nb_3", self.nb_3(self.num_blocks_size, self.block_size), + self.r1, self.nb_amax, self.nb_l, self.size, self.num_classes) # RR - 3. - self.execute_phase("rr_3", self.rr_3(self.num_blocks_size, self.block_size), self.r2, self.ridge_intercept, self.size, self.num_classes) + self.execute_phase("rr_3", self.rr_3(self.num_blocks_size, self.block_size), + self.r2, self.ridge_intercept, self.size, self.num_classes) # NB - 4. - self.execute_phase("nb_4", self.nb_4(self.num_blocks_size, self.block_size), self.r1, self.nb_l, self.size, self.num_classes) + self.execute_phase("nb_4", self.nb_4(self.num_blocks_size, self.block_size), + self.r1, self.nb_l, self.size, self.num_classes) # Ensemble results; diff --git a/projects/resources/python/benchmark/bench/bench_72.py b/projects/resources/python/benchmark/bench/bench_72.py index 0e108706..6aebab02 100644 --- a/projects/resources/python/benchmark/bench/bench_72.py +++ b/projects/resources/python/benchmark/bench/bench_72.py @@ -105,7 +105,7 @@ return val; } -extern "C" __global__ void sum(const float *x, float* z, int N) { +extern "C" __global__ void sum(float *x, float* z, int N) { int warp_size = 32; float sum = float(0); for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { @@ -118,7 +118,7 @@ """ DIVIDE_KERNEL = """ -extern "C" __global__ void divide(const float* x, float *y, float *val, int n) { +extern "C" __global__ void divide(float* x, float *y, float *val, int n) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { y[i] = x[i] / val[0]; } @@ -148,7 +148,7 @@ def __init__(self, benchmark: BenchmarkResult): self.size = 0 self.num_nnz = 0 self.max_degree = 3 # Each vertex has 3 edges; - self.num_iterations = 10 + self.num_iterations = 5 self.ptr = None self.idx = None self.val = None @@ -211,9 +211,9 @@ def alloc(self, size: int, block_size: dict = None) -> None: # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") self.spmv_kernel = build_kernel(SPMV_KERNEL, "spmv3", - "pointer, const pointer, const pointer, const pointer, const pointer, pointer, sint32") - self.sum_kernel = build_kernel(SUM_KERNEL, "sum", "const pointer, pointer, sint32") - self.divide_kernel = build_kernel(DIVIDE_KERNEL, "divide", "const pointer, pointer, pointer, sint32") + "pointer, pointer, pointer, pointer, pointer, pointer, sint32") + self.sum_kernel = build_kernel(SUM_KERNEL, "sum", "pointer, pointer, sint32") + self.divide_kernel = build_kernel(DIVIDE_KERNEL, "divide", "pointer, pointer, pointer, sint32") @time_phase("initialization") def init(self): @@ -258,6 +258,18 @@ def create_csr_from_coo(x_in, y_in, val_in, size, degree=None): # self.idx2.copyFrom(int(np.int64(self.idx2_cpu.ctypes.data)), len(self.idx2)) # self.val.copyFrom(int(np.int64(self.val_cpu.ctypes.data)), len(self.val)) # self.val2.copyFrom(int(np.int64(self.val2_cpu.ctypes.data)), len(self.val2)) + + # for i in range(len(self.ptr_cpu)): + # self.ptr[i] = self.ptr_cpu[i] + # self.ptr2[i] = self.ptr2_cpu[i] + # for i in range(len(self.idx_cpu)): + # self.idx[i] = self.idx_cpu[i] + # self.idx2[i] = self.idx2_cpu[i] + # self.val[i] = self.val_cpu[i] + # self.val2[i] = self.val2_cpu[i] + + @time_phase("reset_result") + def reset_result(self) -> None: for i in range(len(self.ptr_cpu)): self.ptr[i] = self.ptr_cpu[i] self.ptr2[i] = self.ptr2_cpu[i] @@ -266,9 +278,6 @@ def create_csr_from_coo(x_in, y_in, val_in, size, degree=None): self.idx2[i] = self.idx2_cpu[i] self.val[i] = self.val_cpu[i] self.val2[i] = self.val2_cpu[i] - - @time_phase("reset_result") - def reset_result(self) -> None: for i in range(self.size): self.auth1[i] = 1.0 self.auth2[i] = 1.0 diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index 45ddbbd7..84693ef9 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -46,7 +46,7 @@ SOBEL = """ -extern "C" __global__ void sobel(const float *image, float *result, int rows, int cols) { +extern "C" __global__ void sobel(float *image, float *result, int rows, int cols) { // int SOBEL_X[3][3] = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}}; // int SOBEL_Y[3][3] = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}}; __shared__ int SOBEL_X[9]; @@ -135,7 +135,7 @@ return val; } -extern "C" __global__ void maximum(const float *in, float* out, int N) { +extern "C" __global__ void maximum(float *in, float* out, int N) { int warp_size = 32; float maximum = -1000; for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { @@ -146,7 +146,7 @@ atomicMaxf(out, maximum); // The first thread in the warp updates the output; } -extern "C" __global__ void minimum(const float *in, float* out, int N) { +extern "C" __global__ void minimum(float *in, float* out, int N) { int warp_size = 32; float minimum = 1000; for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { @@ -166,7 +166,7 @@ """ UNSHARPEN = """ -extern "C" __global__ void unsharpen(const float *x, const float *y, float *res, float amount, int n) { +extern "C" __global__ void unsharpen(float *x, float *y, float *res, float amount, int n) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { float res_tmp = x[i] * (1 + amount) - y[i] * amount; res_tmp = res_tmp > 1 ? 1 : res_tmp; @@ -281,11 +281,11 @@ def alloc(self, size: int, block_size: dict = None) -> None: # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") self.gaussian_blur_kernel = build_kernel(GAUSSIAN_BLUR, "gaussian_blur", "const pointer, pointer, sint32, sint32, const pointer, sint32") - self.sobel_kernel = build_kernel(SOBEL, "sobel", "const pointer, pointer, sint32, sint32") + self.sobel_kernel = build_kernel(SOBEL, "sobel", "pointer, pointer, sint32, sint32") self.extend_kernel = build_kernel(EXTEND_MASK, "extend", "pointer, const pointer, const pointer, sint32") - self.maximum_kernel = build_kernel(EXTEND_MASK, "maximum", "const pointer, pointer, sint32") - self.minimum_kernel = build_kernel(EXTEND_MASK, "minimum", "const pointer, pointer, sint32") - self.unsharpen_kernel = build_kernel(UNSHARPEN, "unsharpen", "const pointer, const pointer, pointer, float, sint32") + self.maximum_kernel = build_kernel(EXTEND_MASK, "maximum", "pointer, pointer, sint32") + self.minimum_kernel = build_kernel(EXTEND_MASK, "minimum", "pointer, pointer, sint32") + self.unsharpen_kernel = build_kernel(UNSHARPEN, "unsharpen", "pointer, pointer, pointer, float, sint32") self.combine_mask_kernel = build_kernel(COMBINE, "combine", "const pointer, const pointer, const pointer, pointer, sint32") @time_phase("initialization") diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 07f9af96..ef67ac58 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -16,16 +16,16 @@ benchmarks = [ "b1", # "b4", - # "b5", - # "b6", - # "b7", - # "b8", + "b5", + "b6", + "b7", + "b8", ] num_elem = { "b1": [10_000_000, 20_000_000, 40_000_000, 60_000_000, 80_000_000], "b4": [2000000, 5000000, 10000000, 20000000, 40000000], - "b5": [2000000, 5000000, 10000000, 15000000, 20000000], + "b5": [2_000_000, 4_000_000, 6_000_000, 8_000_000, 10_000_000], "b6": [20000, 50000, 200000, 500000, 800000], "b7": [2_000_000, 5_000_000, 7_500_000, 10_000_000, 15_000_000], "b8": [800, 1600, 2400, 4000, 4800], diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 300839bd..f9dffcec 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,8 +21,8 @@ from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot -INPUT_DATE = "2020_07_14_16_39_21_grcuda" -OUTPUT_DATE = "2020_07_14" +INPUT_DATE = "2020_07_15_15_13_52_grcuda" +OUTPUT_DATE = "2020_07_15" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index f4ba6702..4e872720 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -26,9 +26,9 @@ ############################## -INPUT_DATE_GRCUDA = "2020_07_14_16_39_21_grcuda" -INPUT_DATE_CUDA = "2020_07_14_17_17_57_cuda" -OUTPUT_DATE = "2020_07_14" +INPUT_DATE_GRCUDA = "2020_07_15_15_13_52_grcuda" +INPUT_DATE_CUDA = "2020_07_15_22_29_46_cuda" +OUTPUT_DATE = "2020_07_15" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} @@ -217,30 +217,39 @@ def ridgeplot(data): plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] # Plot only some data, for now; - data = data[(data["benchmark"] == "b8") & (data["exec_policy"] == "default")].copy() + data = data[(data["block_size_1d"] == 256) & (data["exec_policy"] == "default")].copy() + # data = data[(data["exec_policy"] == "default")].copy() + + # For each benchmark, keep the data relative to the largest data size; + biggest_sizes = data.groupby(["benchmark"])["size"].max().to_dict() + data_filtered = [] + for k, v in biggest_sizes.items(): + data_filtered += [data[(data["benchmark"] == k) & (data["size"] == v)]] + data = pd.concat(data_filtered).reset_index(drop=True) # Normalize execution times so that the CUDA baseline has median 1; data["normalized_time_cuda"] = 1 data["normalized_time_grcuda"] = 1 - block_sizes = data["block_size_str"].unique() - sizes = data["size"].unique() - - grouped_data = data.groupby(["block_size_str", "size"], as_index=False) + # grouped_data = data.groupby(["benchmark", "size", "block_size_str"], as_index=False) + grouped_data = data.groupby(["benchmark"], as_index=False) for group_key, group in grouped_data: # Compute the median baseline computation time; median_baseline = np.median(group["computation_sec_cuda"]) # Compute the speedup for this group; data.loc[group.index, "normalized_time_cuda"] = group["computation_sec_cuda"].values / median_baseline data.loc[group.index, "normalized_time_grcuda"] = group["computation_sec_grcuda"].values / median_baseline + + benchmarks = data["benchmark"].unique() + block_sizes = data["block_size_str"].unique() + sizes = data["size"].unique() # Initialize the plot; - g = sns.FacetGrid(data, row="size", aspect=5, height=1, sharey=False, col="block_size_str") + g = sns.FacetGrid(data, row="benchmark", aspect=5, height=1.2, sharey=False, sharex=False,) # Plot a vertical line corresponding to speedup = 1; g.map(plt.axvline, x=1, lw=0.75, clip_on=True, zorder=0, linestyle="--", ymax=0.5) # Plot the densities. Plot them twice as the second time we plot just the white contour; - g.map(sns.kdeplot, "normalized_time_cuda", clip_on=False, shade=True, alpha=0.6, lw=1, color=COLORS["peach1"], zorder=2) g.map(sns.kdeplot, "normalized_time_grcuda", clip_on=False, shade=True, alpha=0.6, lw=1, color=COLORS["b8"], zorder=2) g.map(sns.kdeplot, "normalized_time_cuda", clip_on=False, color="w", lw=1.1, zorder=2) @@ -248,11 +257,33 @@ def ridgeplot(data): # Plot the horizontal line below the densities; g.map(plt.axhline, y=0, lw=0.75, clip_on=False, zorder=5, color="0.6") - # Fix the horizontal axes so that they are between 0.5 and 1.25; - def set_x_width(label="", color="#2f2f2f"): - ax = plt.gca() - ax.set_xlim(left=0.8, right=1.2) - g.map(set_x_width) + # Write the x-axis tick labels using percentages; + @ticker.FuncFormatter + def major_formatter(x, pos): + return f"{x:.2f}x" + # Fix the horizontal axes. + # For each benchmark, find the smallest and largest values; + offsets = { + "b1": [0.95, 1.02], + "b5": [0.95, 1.05], + "b6": [0.95, 1.05], + "b7": [0.99, 0.99], + "b8": [0.87, 1.13]} + # offsets = { + # "b1": [0.85, 1.15], + # "b5": [0.95, 1.05], + # "b6": [0.95, 1.05], + # "b7": [0.98, 1.02], + # "b8": [0.87, 1.13]} + + for i, ax in enumerate(g.axes[:, 0]): + b = benchmarks[i] + d = data[data["benchmark"] == b] + max_v = offsets[b][1] * max(d["normalized_time_grcuda"].max(), d["normalized_time_cuda"].max()) + min_v = offsets[b][0] * min(d["normalized_time_grcuda"].min(), d["normalized_time_cuda"].min()) + print(min_v, max_v) + ax.set_xlim(left=min_v, right=max_v) + ax.xaxis.set_major_formatter(major_formatter) # Titles and labels; g.set_titles("") @@ -260,23 +291,19 @@ def set_x_width(label="", color="#2f2f2f"): # Add block size labels; for i, ax in enumerate(g.axes[-1]): - ax.annotate("1D={}, 2D={}".format(*block_sizes[i].split(",")), xy=(0.5, -0.8), xycoords="axes fraction", ha="center", color="#2f2f2f", fontsize=14) + ax.annotate("1D={}, 2D={}".format(*block_sizes[i].split(",")), xy=(0.5, -0.8), xycoords="axes fraction", ha="center", color="#2f2f2f", fontsize=14) for i, ax in enumerate(g.axes[:, 0]): - ax.annotate(f"{get_exp_label(sizes[i])}", xy=(-0.1, 0.05), xycoords="axes fraction", ha="center", color="#2f2f2f", fontsize=14) - + # ax.annotate(f"{get_exp_label(sizes[i])}", xy=(-0.1, 0.05), xycoords="axes fraction", ha="center", color="#2f2f2f", fontsize=14) + ax.annotate(f"{BENCHMARK_NAMES[benchmarks[i]]}", xy=(0.0, 0.09), xycoords="axes fraction", ha="left", color="#2f2f2f", fontsize=12) + # Fix the borders. This must be done here as the previous operations update the default values; g.fig.subplots_adjust(top=0.83, bottom=0.15, right=0.95, left=0.05, - hspace=-0.20, + hspace=0.4, wspace=0.1) - # Write the x-axis tick labels using percentages; - @ticker.FuncFormatter - def major_formatter(x, pos): - return f"{x:.1f}x" - g.fig.get_axes()[-1].xaxis.set_major_formatter(major_formatter) g.set(yticks=[]) g.despine(bottom=True, left=True) @@ -284,13 +311,13 @@ def major_formatter(x, pos): custom_lines = [Patch(facecolor=COLORS["peach1"], edgecolor="#2f2f2f", label="CUDA"), Patch(facecolor=COLORS["b8"], edgecolor="#2f2f2f", label="GrCUDA"), ] - leg = g.fig.legend(custom_lines, ["CUDA", "GrCUDA"], bbox_to_anchor=(0.97, 0.98), fontsize=15) + leg = g.fig.legend(custom_lines, ["CUDA", "GrCUDA"], bbox_to_anchor=(0.97, 0.98), fontsize=12) leg.set_title(None) leg._legend_box.align = "left" leg.get_frame().set_facecolor('white') # Main plot title; - g.fig.suptitle("Relative Exec. Time Distribution,\nCUDA vs GrCUDA", ha="left", x=0.05, y=0.95, fontsize=18) + g.fig.suptitle("Exec. Time Distribution,\nCUDA vs GrCUDA", ha="left", x=0.05, y=0.95, fontsize=18) return g @@ -302,74 +329,74 @@ def major_formatter(x, pos): data_cuda = load_data_cuda(INPUT_DATE_CUDA, skip_iter=3) data = join_tables(data_grcuda, data_cuda) - sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - plt.rcParams["font.family"] = ["Latin Modern Roman"] - plt.rcParams['axes.titlepad'] = 20 - plt.rcParams['axes.labelpad'] = 10 - plt.rcParams['axes.titlesize'] = 22 - plt.rcParams['axes.labelsize'] = 14 - - # Lists of benchmarks and block sizes; - benchmark_list = sorted(data["benchmark"].unique()) - block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) - num_col = len(benchmark_list) - num_row = len(block_size_list) - fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) - gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.8, - bottom=0.15, - left=0.2, - right=0.90, - hspace=1.1, - wspace=0.15) + # sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + # plt.rcParams["font.family"] = ["Latin Modern Roman"] + # plt.rcParams['axes.titlepad'] = 20 + # plt.rcParams['axes.labelpad'] = 10 + # plt.rcParams['axes.titlesize'] = 22 + # plt.rcParams['axes.labelsize'] = 14 + + # # Lists of benchmarks and block sizes; + # benchmark_list = sorted(data["benchmark"].unique()) + # block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) + # num_col = len(benchmark_list) + # num_row = len(block_size_list) + # fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) + # gs = gridspec.GridSpec(num_row, num_col) + # plt.subplots_adjust(top=0.8, + # bottom=0.15, + # left=0.2, + # right=0.90, + # hspace=1.1, + # wspace=0.15) - exec_time_axes = [] - for b_i, b in enumerate(benchmark_list): - for block_size_i, block_size in enumerate(block_size_list): - curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) - exec_time_axes += [build_exec_time_plot_grcuda_cuda(curr_res, gs, block_size_i, b_i)] + # exec_time_axes = [] + # for b_i, b in enumerate(benchmark_list): + # for block_size_i, block_size in enumerate(block_size_list): + # curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) + # exec_time_axes += [build_exec_time_plot_grcuda_cuda(curr_res, gs, block_size_i, b_i)] - plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") - plt.annotate("Speedup", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + # plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") + # plt.annotate("Speedup", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") + # plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") - save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_{}.{}", OUTPUT_DATE) + # save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_{}.{}", OUTPUT_DATE) - #%% Similar plot, but all block sizes are on 1 row; - - sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - plt.rcParams["font.family"] = ["Latin Modern Roman"] - plt.rcParams['axes.titlepad'] = 20 - plt.rcParams['axes.labelpad'] = 10 - plt.rcParams['axes.titlesize'] = 22 - plt.rcParams['axes.labelsize'] = 14 - - # Lists of benchmarks and block sizes; - benchmark_list = sorted(data["benchmark"].unique()) - policy_list = sorted(data["exec_policy"].unique()) - num_col = len(benchmark_list) - num_row = len(policy_list) - fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) - gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.8, - bottom=0.14, - left=0.1, - right=0.95, - hspace=0.8, - wspace=0.15) + # #%% Similar plot, but all block sizes are on 1 row; + + # sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + # plt.rcParams["font.family"] = ["Latin Modern Roman"] + # plt.rcParams['axes.titlepad'] = 20 + # plt.rcParams['axes.labelpad'] = 10 + # plt.rcParams['axes.titlesize'] = 22 + # plt.rcParams['axes.labelsize'] = 14 + + # # Lists of benchmarks and block sizes; + # benchmark_list = sorted(data["benchmark"].unique()) + # policy_list = sorted(data["exec_policy"].unique()) + # num_col = len(benchmark_list) + # num_row = len(policy_list) + # fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) + # gs = gridspec.GridSpec(num_row, num_col) + # plt.subplots_adjust(top=0.8, + # bottom=0.14, + # left=0.1, + # right=0.95, + # hspace=0.8, + # wspace=0.15) - exec_time_axes = [] - for b_i, b in enumerate(benchmark_list): - for p_i, p in enumerate(policy_list): - curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) - exec_time_axes += [build_exec_time_plot_grcuda_cuda_compact(curr_res, gs, p_i, b_i)] + # exec_time_axes = [] + # for b_i, b in enumerate(benchmark_list): + # for p_i, p in enumerate(policy_list): + # curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) + # exec_time_axes += [build_exec_time_plot_grcuda_cuda_compact(curr_res, gs, p_i, b_i)] - plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") - plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + # plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") + # plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") + # plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") - save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_compact_{}.{}", OUTPUT_DATE) + # save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_compact_{}.{}", OUTPUT_DATE) #%% Ridge plot with distributions; From 6dbfb9f6962f94bfa9a449ec116907d8b7d725ca Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 16 Jul 2020 19:59:13 +0200 Subject: [PATCH 120/236] added theoretical speed plot --- RESULTS.md | 10 ++++++++++ .../plotting/plot_theoretical_performance.py | 14 +++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index d0f7aa9e..0245ee4e 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -190,4 +190,14 @@ These results are further reaffirmed by looking at the execution time distributi ![Relative exec. time w.r.t. CUDA, distribution](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_grcuda_cuda_ridgeplot_2020_07_15.png) +By measuring the execution time of each phase of a benchmark, it is possible to estimate the fastest theoretical time of the benchmark. + This theoretical time assumes a *GPU* with infinite resources and infinite host-device capacity, so that it's always possible to transfer data without having to wait for the current transfer to end + (transfer bandwidth is still limited by PCIe 3.0 speed, at 16 GB/s bidirectional). We compute theoretical speed for each benchmark by looking at the dependencies between computations, + and understanding which computations, given infinite resources, could be scheduled in parallel without any slow-down. + +DAG scheduling always provides execution times closer to the theoretical optimum than serial scheduling, as expected. + In many benchmarks we are very close to the theoretical optimum, showing how DAG scheduling provides better GPU resource utilization and transfer-computation overlap. + Not surprisingly, the only case where results are significantly lower than the optimum is `bench_5`, as it is composed of many independent computations that could in principle run in parallel: this is clearly not possible in practice, although DAG scheduling proves once again to be better than serial execution. + +![Relative exec. time w.r.t. theoretical minimum time](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_16/speedup_theoretical_time_compact_2020_07_16.png) diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index ce775393..35ebc820 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -27,18 +27,18 @@ DEFAULT_RES_DIR = "../../../../data/results" -INPUT_DATE_GRCUDA = "2020_07_02_19_13_55_grcuda" -OUTPUT_DATE = "2020_07_06" +INPUT_DATE_GRCUDA = "2020_07_16_10_59_36_grcuda" +OUTPUT_DATE = "2020_07_16" PLOT_DIR = "../../../../data/plots" B5_ITER = 10 -B7_ITER = 10 +B7_ITER = 5 BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} BENCHMARK_PHASES = { - "b1": ["square", "reduce"], + "b1": ["square_1", "square_2", "reduce"], "b5": [y for x in [[f"bs_{i}"] for i in range(B5_ITER)] for y in x], - "b6": ["rr_1", "rr_2", "rr_3", "nb_1", "nb_2", "nb_3", "nb_4", "softmax", "argmax"], + "b6": ["rr_1", "rr_2", "rr_3", "nb_1", "nb_2", "nb_3", "nb_4", "softmax_1", "softmax_2", "argmax"], "b7": [y for x in [[f"spmv_a_{i}", f"spmv_h_{i}", f"sum_a_{i}", f"sum_h_{i}", f"divide_a_{i}", f"divide_h_{i}", f"norm_reset_{i}"] for i in range(B7_ITER)] for y in x], "b8": ["blur_small", "blur_large", "blur_unsharpen", "sobel_small", "sobel_large", "maximum", "minimum", "extend", "unsharpen", "combine", "combine_2"], } @@ -59,13 +59,13 @@ def theoretical_speed(input_data, group_columns, benchmark): return data def theoretical_speed_b1(data): - return data["square"] / 2 + data["reduce"] + return np.maximum(data["square_1"], data["square_2"]) + data["reduce"] def theoretical_speed_b5(data): return data[[f"bs_{i}" for i in range(B5_ITER)]].max(axis=1) def theoretical_speed_b6(data): - return np.maximum(data["rr_1"] + data["rr_2"] + data["rr_3"], data["nb_1"] + data["nb_2"] + data["nb_3"] + data["nb_4"]) + data["softmax"] / 2 + data["argmax"] + return np.maximum(data["rr_1"] + data["rr_2"] + data["rr_3"] + data["softmax_1"], data["nb_1"] + data["nb_2"] + data["nb_3"] + data["nb_4"] + data["softmax_2"]) + data["argmax"] def theoretical_speed_b7(data): total = np.zeros(len(data)) From aaf95574dbda19eef4954d1c8d8b9b46f5a5d61c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 20 Jul 2020 09:47:56 +0200 Subject: [PATCH 121/236] added support for nvprof profiling in benchmarks --- README.md | 8 ++++++++ .../src/com/nvidia/grcuda/gpu/CUDARuntime.java | 16 ++++++++++++++++ .../resources/python/benchmark/bench/bench_1.py | 4 ++-- .../resources/python/benchmark/bench/bench_2.py | 4 ++-- .../resources/python/benchmark/bench/bench_3.py | 4 ++-- .../resources/python/benchmark/bench/bench_4.py | 4 ++-- .../resources/python/benchmark/bench/bench_5.py | 4 ++-- .../resources/python/benchmark/bench/bench_6.py | 4 ++-- .../resources/python/benchmark/bench/bench_7.py | 4 ++-- .../resources/python/benchmark/bench/bench_72.py | 4 ++-- .../resources/python/benchmark/bench/bench_8.py | 4 ++-- projects/resources/python/benchmark/benchmark.py | 15 ++++++++++++++- .../resources/python/benchmark/benchmark_main.py | 6 +++++- .../python/benchmark/benchmark_result.py | 2 +- 14 files changed, 62 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 2c4f1fde..2d536bed 100644 --- a/README.md +++ b/README.md @@ -281,6 +281,14 @@ Run a specific benchmark with custom settings graalpython --jvm --polyglot --WithThread --grcuda.RetrieveNewStreamPolicy=fifo --grcuda.ExecutionPolicy=default --grcuda.DependencyPolicy=with-const --grcuda.RetrieveParentStreamPolicy=disjoint benchmark_main.py -d -i 10 -n 100 --no_cpu_validation --reinit false --realloc false -b b7 ``` +Profile a specific benchmark using `nvprof`. Running `nvprof` as `sudo` might not be required, see [here](https://developer.nvidia.com/nvidia-development-tools-solutions-ERR_NVGPUCTRPERM-permission-issue-performance-counters). + Note that the `graalpython` benchmark has the `--nvprof` flag, so that only the real computation is profiled (and not the benchmark initialization). + Additionally, provide `nvprof` with flags `--csv` to get a CSV output, and `--log-file bench-name_%p.csv"` to store the result. + Not using the flag `--print-gpu-trace` will print aggregated results. Additional metrics can be collected by `nvprof` with e.g. `--metrics "achieved_occupancy,sm_efficiency"` ([full list](https://docs.nvidia.com/cuda/profiler-users-guide/index.html#metrics-reference)) +``` +sudo /usr/local/cuda/bin/nvprof --profile-from-start off --print-gpu-trace --profile-child-processes /path/to/graalpython --jvm --polyglot --WithThread --grcuda.RetrieveNewStreamPolicy=always-new --grcuda.ExecutionPolicy=default --grcuda.DependencyPolicy=with-const --grcuda.RetrieveParentStreamPolicy=disjoint benchmark_main.py -i 10 -n 1000000 --reinit false --realloc false -b b1 --no_cpu_validation -d --block_size_1d 256 --block_size_2d 16 --nvprof +``` + * Benchmarks are defined in the `projects/resources/python/benchmark/bench` folder, and you can create more benchmarks by inheriting from the `Benchmark` class * The output of benchmarks is stored in a JSON (by default, located in `data/results`) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index f1ea05c8..8ea573f7 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -890,6 +890,22 @@ public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException callSymbol(cudaRuntime, streamAddr, eventAddr, FLAGS); return NoneValue.get(); } + }, + CUDA_PROFILERSTART("cudaProfilerStart", "(): sint32") { + @Override + public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, InteropException, UnsupportedMessageException { + checkArgumentLength(args, 0); + callSymbol(cudaRuntime); + return NoneValue.get(); + } + }, + CUDA_PROFILERSTOP("cudaProfilerStop", "(): sint32") { + @Override + public Object call(CUDARuntime cudaRuntime, Object[] args) throws ArityException, InteropException, UnsupportedMessageException { + checkArgumentLength(args, 0); + callSymbol(cudaRuntime); + return NoneValue.get(); + } }; private final String name; diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index 8c0c8d58..a40a87ab 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -62,8 +62,8 @@ class Benchmark1(Benchmark): B: x^2 ──┘ """ - def __init__(self, benchmark: BenchmarkResult): - super().__init__("b1", benchmark) + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b1", benchmark, nvprof_profile) self.size = 0 self.x = None self.y = None diff --git a/projects/resources/python/benchmark/bench/bench_2.py b/projects/resources/python/benchmark/bench/bench_2.py index 8a6a4554..6b70d18e 100644 --- a/projects/resources/python/benchmark/bench/bench_2.py +++ b/projects/resources/python/benchmark/bench/bench_2.py @@ -79,8 +79,8 @@ class Benchmark2(Benchmark): D: a^2 ────> E: b=a+2 ──┘ """ - def __init__(self, benchmark: BenchmarkResult): - super().__init__("b2", benchmark) + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b2", benchmark, nvprof_profile) self.size = 0 self.x = None self.y = None diff --git a/projects/resources/python/benchmark/bench/bench_3.py b/projects/resources/python/benchmark/bench/bench_3.py index 660af7b1..98288f75 100644 --- a/projects/resources/python/benchmark/bench/bench_3.py +++ b/projects/resources/python/benchmark/bench/bench_3.py @@ -60,8 +60,8 @@ class Benchmark3(Benchmark): B: x^2 ─ [5 times] ─┘ """ - def __init__(self, benchmark: BenchmarkResult): - super().__init__("b3", benchmark) + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b3", benchmark, nvprof_profile) self.size = 0 self.x = None self.y = None diff --git a/projects/resources/python/benchmark/bench/bench_4.py b/projects/resources/python/benchmark/bench/bench_4.py index 87d3335a..4d99e0b0 100644 --- a/projects/resources/python/benchmark/bench/bench_4.py +++ b/projects/resources/python/benchmark/bench/bench_4.py @@ -28,8 +28,8 @@ class Benchmark4(Benchmark): A benchmark with 2 very simple independent computations, used to measure overheads and the impact of data transfer; """ - def __init__(self, benchmark: BenchmarkResult): - super().__init__("b4", benchmark) + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b4", benchmark, nvprof_profile) self.size = 0 self.x = None self.y = None diff --git a/projects/resources/python/benchmark/bench/bench_5.py b/projects/resources/python/benchmark/bench/bench_5.py index 0ecacfd1..1110a5ca 100644 --- a/projects/resources/python/benchmark/bench/bench_5.py +++ b/projects/resources/python/benchmark/bench/bench_5.py @@ -67,8 +67,8 @@ class Benchmark5(Benchmark): Black & Scholes equation benchmark, executed concurrently on different input vectors; """ - def __init__(self, benchmark: BenchmarkResult): - super().__init__("b5", benchmark) + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b5", benchmark, nvprof_profile) self.size = 0 self.num_blocks = 64 diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index 5b3cfe5b..096dd0b1 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -144,8 +144,8 @@ class Benchmark6(Benchmark): (...) -> NB-3(const R1,const AMAX,L) ─> NB-4(R1,const L) ─> SOFTMAX(R2) ──┘ """ - def __init__(self, benchmark: BenchmarkResult): - super().__init__("b6", benchmark) + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b6", benchmark, nvprof_profile) self.size = 0 self.x = None self.z = None diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index c6859e8d..3ecb3e59 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -70,8 +70,8 @@ class Benchmark7(Benchmark): └─> SPMV(const A1,H2) ┴─> SUM(const H2,H_norm) ┴─> DIVIDE(H1,const H2,const H_norm) ─> CPU: H_norm=0 ─> (repeat) """ - def __init__(self, benchmark: BenchmarkResult): - super().__init__("b7", benchmark) + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b7", benchmark, nvprof_profile) self.size = 0 self.num_nnz = 0 self.max_degree = 3 # Each vertex has 3 edges; diff --git a/projects/resources/python/benchmark/bench/bench_72.py b/projects/resources/python/benchmark/bench/bench_72.py index 6aebab02..cc292101 100644 --- a/projects/resources/python/benchmark/bench/bench_72.py +++ b/projects/resources/python/benchmark/bench/bench_72.py @@ -143,8 +143,8 @@ class Benchmark7(Benchmark): └─> SPMV(const A1,H2) ┴─> SUM(const H2,H_norm) ┴─> DIVIDE(H1,const H2,const H_norm) ─> CPU: H_norm=0 ─> (repeat) """ - def __init__(self, benchmark: BenchmarkResult): - super().__init__("b7", benchmark) + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b7", benchmark, nvprof_profile) self.size = 0 self.num_nnz = 0 self.max_degree = 3 # Each vertex has 3 edges; diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index 84693ef9..f41d0058 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -201,8 +201,8 @@ class Benchmark8(Benchmark): SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ────────────────────┴─> COMBINE(sharpened,blur2,mask2,image2) ┴─> COMBINE(image2,blur1,mask1,image3) """ - def __init__(self, benchmark: BenchmarkResult): - super().__init__("b8", benchmark) + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b8", benchmark, nvprof_profile) self.size = 0 self.image = None diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py index 05d60501..bb01ee6a 100644 --- a/projects/resources/python/benchmark/benchmark.py +++ b/projects/resources/python/benchmark/benchmark.py @@ -2,6 +2,7 @@ from abc import ABC, abstractmethod from java.lang import System from typing import Callable +import polyglot DEFAULT_BLOCK_SIZE_1D = 32 DEFAULT_BLOCK_SIZE_2D = 8 @@ -27,11 +28,15 @@ def func_call(self, *args, **kwargs) -> object: class Benchmark(ABC): """ Base class for all benchmarks, it provides the general control flow of the benchmark execution; + :param name: name of the benchmark + :param benchmark: instance of BenchmarkResult, used to store results + :param nvprof_profile: if present activate profiling for nvprof when running the benchmark """ - def __init__(self, name: str, benchmark: BenchmarkResult): + def __init__(self, name: str, benchmark: BenchmarkResult, nvprof_profile: bool = False): self.name = name self.benchmark = benchmark + self.nvprof_profile = nvprof_profile self.time_phases = False self.tot_iter = 0 self.current_iter = 0 @@ -130,9 +135,17 @@ def run(self, num_iter: int, policy: str, size: int, realloc: bool, reinit: bool # Reset the result; self.reset_result() + # Start nvprof profiling if required; + if self.nvprof_profile: + polyglot.eval(language="grcuda", string="cudaProfilerStart")() + # Execute the benchmark; gpu_result = self.execute() + # Stop nvprof profiling if required; + if self.nvprof_profile: + polyglot.eval(language="grcuda", string="cudaProfilerStop")() + # Stop the timer; end = System.nanoTime() self.benchmark.add_total_time((end - start) / 1_000_000_000) diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index 4d2580e1..f9b54e17 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -105,6 +105,9 @@ def create_block_size_list(block_size_1d, block_size_2d) -> list: parser.add_argument("-p", "--time_phases", action="store_true", help="Measure the execution time of each phase of the benchmark;" " note that this introduces overheads, and might influence the total execution time") + parser.add_argument("--nvprof", action="store_true", + help="If present, enable profiling when using nvprof." + " For this option to have effect, run graalpython using nvprof, with flag '--profile-from-start off'") parser.set_defaults(cpu_validation=BenchmarkResult.DEFAULT_CPU_VALIDATION) # Parse the input arguments; @@ -118,6 +121,7 @@ def create_block_size_list(block_size_1d, block_size_2d) -> list: random_init = args.random if args.random else BenchmarkResult.DEFAULT_RANDOM_INIT cpu_validation = args.cpu_validation time_phases = args.time_phases + nvprof_profile = args.nvprof # Create a new benchmark result instance; benchmark_res = BenchmarkResult(debug=debug, num_iterations=num_iter, output_path=output_path, @@ -147,7 +151,7 @@ def create_block_size_list(block_size_1d, block_size_2d) -> list: # Execute each test; for b_name, b in benchmarks.items(): - benchmark = b(benchmark_res) + benchmark = b(benchmark_res, nvprof_profile=nvprof_profile) for p in policies[b_name]: for n in num_elem[b_name]: for re in realloc: diff --git a/projects/resources/python/benchmark/benchmark_result.py b/projects/resources/python/benchmark/benchmark_result.py index 728b3660..0e3d32da 100644 --- a/projects/resources/python/benchmark/benchmark_result.py +++ b/projects/resources/python/benchmark/benchmark_result.py @@ -18,7 +18,7 @@ def __init__(self, cpu_validation: bool = DEFAULT_CPU_VALIDATION, debug: bool = DEFAULT_DEBUG, random_init: bool = DEFAULT_RANDOM_INIT, - output_path: str = "" + output_path: str = "", ): self.debug = debug self.random_init = random_init From b1c2117605a451dbc0066a6672f7d8dd87d5600a Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 21 Jul 2020 14:27:18 +0200 Subject: [PATCH 122/236] added computation overlap analysis --- RESULTS.md | 20 + data/nvprof_log/2020_07_20/b1_31343.csv | 9395 ++++++++ data/nvprof_log/2020_07_20/b5_808.csv | 12935 +++++++++++ data/nvprof_log/2020_07_20/b6_1989.csv | 1355 ++ data/nvprof_log/2020_07_20/b7_2663.csv | 18574 ++++++++++++++++ data/nvprof_log/2020_07_20/b8_10958.csv | 499 + data/nvprof_log/2020_07_20/summary.csv | 6 + .../python/benchmark/bench/bench_72.py | 4 +- .../compute_transfer_computation_overlap.py | 307 + .../plotting/plot_speedup_grcuda_cuda.py | 120 +- .../plot_transfer_computation_overlap.py | 130 + 11 files changed, 43283 insertions(+), 62 deletions(-) create mode 100644 data/nvprof_log/2020_07_20/b1_31343.csv create mode 100644 data/nvprof_log/2020_07_20/b5_808.csv create mode 100644 data/nvprof_log/2020_07_20/b6_1989.csv create mode 100644 data/nvprof_log/2020_07_20/b7_2663.csv create mode 100644 data/nvprof_log/2020_07_20/b8_10958.csv create mode 100644 data/nvprof_log/2020_07_20/summary.csv create mode 100755 projects/resources/python/plotting/compute_transfer_computation_overlap.py create mode 100755 projects/resources/python/plotting/plot_transfer_computation_overlap.py diff --git a/RESULTS.md b/RESULTS.md index 0245ee4e..f052325c 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -201,3 +201,23 @@ DAG scheduling always provides execution times closer to the theoretical optimum ![Relative exec. time w.r.t. theoretical minimum time](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_16/speedup_theoretical_time_compact_2020_07_16.png) +### Performance analysis + +![Overlap amount](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_20/overlap_2020_07_20.png) + +For each benchmark, we can measure how much **overlap** is present in the computation. We measure 4 different types of overlap: + +1. **CT, computation w.r.t transfer**: percentage of GPU kernel computation that overlaps with any data transfer (host-to-device or viceversa) +2. **TC, transfer w.r.t computation**: percentage of data transfer that overlaps with (one or more) GPU kernel computation(s) +3. **CC, computation w.r.t computation**: percentage of GPU kernel computation that overlaps with any other GPU kernel computation +4. **TOT, any type of overlap**: here we consider any type of overlap between data-transfer and/or computations. + Note that if a computation/data-transfer overlaps more than one computation/data-transfer, the overlap is counted only once (we consider the union of the overlap intervals) + +Measures are taken for the largest data-size in the evaluation (for each benchmark), for the block size that results in higher speedup, + to obtain a clearer understanding of what type of overlap is providing the speedup. + In general, the **TOT** overlap is a good proxy of the achieved speedup, although it is sometimes inflated by high **CC** overlap: + in fact, overlapping computations does not always translates to faster execution, especially if kernels are large enough (in terms of threads/blocks) to fill the GPU processors on their own. + We observe how in `b1` the speedup comes exclusively from the overlap of transfer and computation, while in `b8` the speedup is caused by the overlap of kernels which, + if executed serially, do not fill the GPU resources. Very different values of **CT** and **TC** (as in `b5`) indicate that, although the data-transfer is completely overlapped to GPU computations, + the computation lasts much longer than the data-transfer, and part of the computation cannot be overlapped. + In all likelihood, a more optimized kernel computation would result in higher **CT** overlap, and better speedup. \ No newline at end of file diff --git a/data/nvprof_log/2020_07_20/b1_31343.csv b/data/nvprof_log/2020_07_20/b1_31343.csv new file mode 100644 index 00000000..1d7f8baf --- /dev/null +++ b/data/nvprof_log/2020_07_20/b1_31343.csv @@ -0,0 +1,9395 @@ +==31343== NVPROF is profiling process 31343, command: java -classpath /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -XX:MaxHeapSize=24G com.oracle.g +==31343== Profiling application: java -classpath /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -XX:MaxHeapSize=24G com.oracle.g +==31343== Profiling result: +"Start","Duration","Grid X","Grid Y","Grid Z","Block X","Block Y","Block Z","Registers Per Thread","Static SMem","Dynamic SMem","Device","Context","Stream","Unified Memory","Virtual Address","Name","Correlation_ID" +s,ms,,,,,,,,B,B,,,,B,,, +11.231330,0.164096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +11.231495,0.164576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +11.231661,0.163584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +11.231826,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +11.231990,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +11.232154,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +11.232319,0.165216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +11.232485,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +11.232650,0.163808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +11.232815,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +11.232979,0.162624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +11.233143,0.162656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +11.233307,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +11.233471,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +11.233636,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +11.233800,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +11.233964,0.173024,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +11.234138,0.168000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +11.234307,0.202784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +11.234511,0.206656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +11.234720,0.211424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +11.234932,0.213664,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +11.235147,0.209216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +11.235358,0.207136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +11.235567,0.202976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +11.235771,0.202464,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +11.235975,0.219232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +11.236195,0.209920,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +11.236406,0.208448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +11.236616,0.213120,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +11.236831,0.212544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +11.237044,0.208480,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +11.237254,0.214144,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +11.237470,0.173792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +11.237645,0.165536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +11.237811,0.175552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +11.237988,0.213536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +11.238203,0.203552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +11.238408,0.202912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +11.238612,0.211360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +11.238825,0.206496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +11.239033,0.203168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +11.239237,0.204096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +11.239442,0.209856,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +11.239653,0.204864,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +11.239860,0.216416,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +11.240077,0.219680,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +11.240298,0.216032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +11.240516,0.208864,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +11.240726,0.179488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +11.240907,0.163520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +11.241071,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +11.241236,0.162656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +11.241400,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +11.241564,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +11.241728,0.163424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +11.241893,0.162528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +11.242057,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +11.242221,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +11.242385,0.164992,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +11.242551,0.164864,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +11.242718,0.166528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +11.242885,0.169376,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +11.243056,0.166208,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +11.243223,0.171424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +11.243396,0.195904,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +11.243593,0.197696,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +11.243792,0.201120,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +11.243994,0.200960,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +11.244197,0.195232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +11.244393,0.201888,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +11.244596,0.196864,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +11.244794,0.194528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +11.244990,0.193696,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +11.245185,0.195456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +11.245382,0.193248,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +11.245576,0.180448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +11.245758,0.186592,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +11.245946,0.208192,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +11.246156,0.206016,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +11.246363,0.206240,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +11.246570,0.201664,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +11.246773,0.193920,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +11.246969,0.199968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +11.247170,0.202656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +11.247374,0.198208,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +11.247573,0.197536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +11.247772,0.198464,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +11.247972,0.205600,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +11.248179,0.177280,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +11.248357,0.180000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +11.248539,0.185536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +11.248725,0.184544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +11.248911,0.191008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +11.249104,0.185312,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +11.249290,0.185408,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +11.249477,0.181152,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +11.249659,0.185184,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +11.249845,0.177216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +11.250024,0.179456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +11.250205,0.181728,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +11.250388,0.181600,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +11.250570,0.181952,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +11.250754,0.184160,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +11.250939,0.184672,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +11.251125,0.184640,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +11.251311,0.182944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +11.251495,0.178272,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +11.251675,0.177248,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +11.251853,0.179360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +11.252034,0.192800,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +11.252228,0.177632,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +11.252407,0.180448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +11.252588,0.182656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +11.252772,0.181856,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +11.252955,0.180800,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +11.253137,0.181888,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +11.253320,0.185504,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +11.253507,0.179200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +11.253688,0.178688,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +11.253867,0.182272,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +11.254051,0.180064,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +11.254232,0.185024,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +11.254418,0.177888,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +11.254598,0.180032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +11.254779,0.185088,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +11.254965,0.189888,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +11.255156,0.186752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +11.255344,0.183168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +11.255529,0.184384,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +11.255714,0.177664,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +11.255893,0.182464,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +11.256077,0.184672,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +11.256263,0.181216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +11.256445,0.177280,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +11.256624,0.180288,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +11.256805,0.169120,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +11.256976,0.172992,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +11.257150,0.178048,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +11.257329,0.176640,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +11.257507,0.177696,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +11.257686,0.176992,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +11.257864,0.185088,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +11.258050,0.181952,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +11.258234,0.175712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +11.258411,0.179936,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +11.258592,0.178976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +11.258772,0.172576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +11.258946,0.176000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +11.259123,0.176000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +11.259300,0.178912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +11.259480,0.190848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +11.259673,0.112768,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +11.260071,0.073632,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +11.260212,0.182880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +11.260396,0.182176,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +11.260579,0.186464,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +11.260767,0.182432,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +11.260951,0.183488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +11.261136,0.188000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +11.261325,0.190176,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +11.261516,0.186592,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +11.261704,0.183552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +11.261889,0.179104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +11.262069,0.181312,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +11.262252,0.179648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +11.262433,0.181920,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +11.262616,0.178784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +11.262796,0.178752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +11.262976,0.188480,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +11.263166,0.181216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +11.263348,0.186656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +11.263536,0.202144,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +11.263739,0.196928,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +11.263938,0.189792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +11.264129,0.195072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +11.264325,0.193696,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +11.264520,0.193376,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +11.264715,0.194880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +11.264911,0.191232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +11.265103,0.199040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +11.265303,0.196256,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +11.265501,0.195328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +11.265698,0.164448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +11.265863,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +11.266027,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +11.266192,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +11.266356,0.163520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +11.266521,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +11.266685,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +11.266850,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +11.267014,0.163776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +11.267179,0.163648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +11.267344,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +11.267508,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +11.267672,0.162688,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +11.267836,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +11.268000,0.163648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +11.268165,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +11.268330,0.162848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +11.268494,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +11.268658,0.162848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +11.268822,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +11.268987,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +11.269152,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +11.269315,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +11.269480,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +11.269645,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +11.269809,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +11.269973,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +11.270137,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +11.270302,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +11.270466,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +11.270630,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +11.270794,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +11.270959,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +11.271123,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +11.271288,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +11.271452,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +11.271617,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +11.271781,0.162720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +11.271945,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +11.272109,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +11.272273,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +11.272437,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +11.272602,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +11.272766,0.162656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +11.272929,0.163456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +11.273094,0.162720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +11.273258,0.162816,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +11.273422,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +11.273586,0.162912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +11.273750,0.162656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +11.273914,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +11.274078,0.163552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +11.274243,0.162624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +11.274407,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +11.274571,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +11.274735,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +11.274899,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +11.275064,0.162720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +11.275227,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +11.275392,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +11.275556,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +11.275720,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +11.275884,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +11.276048,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +11.276212,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +11.276376,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +11.276540,0.163680,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +11.276705,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +11.276869,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +11.277034,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +11.277197,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +11.277362,0.162688,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +11.277525,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +11.277690,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +11.277854,0.162624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +11.278018,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +11.278182,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +11.278346,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +11.278511,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +11.278675,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +11.278839,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +11.279004,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +11.279168,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +11.279332,0.162688,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +11.279496,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +11.279660,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +11.279824,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +11.279989,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +11.280153,0.162816,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +11.280317,0.163456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +11.280481,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +11.280646,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +11.280810,0.163520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +11.280975,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +11.281139,0.162912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +11.281303,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +11.281467,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +11.281631,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +11.281796,0.164384,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +11.281961,0.164992,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +11.282127,0.164736,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +11.282293,0.164128,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +11.282459,0.163840,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +11.282624,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +11.282788,0.163552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +11.282953,0.163776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +11.283118,0.164032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +11.283283,0.164000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +11.283448,0.164416,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +11.283614,0.163872,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +11.283779,0.163392,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +11.283943,0.164608,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +11.284109,0.164096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +11.284275,0.165024,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +11.284441,0.165120,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +11.284607,0.164000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +11.284772,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +11.284937,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +11.285101,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +11.285266,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +11.285430,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +11.285595,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +11.285758,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +11.285923,0.035904,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +11.285933,18.298822,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","14",,,"square",5 +11.285960,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +11.287028,18.302470,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","15",,,"square",11 +11.305643,14.439265,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","14",,,"reduce(float*, float*, float*, int)",18 +11.320772,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +11.320960,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +13.357271,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +13.357611,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +13.357942,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +13.358268,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +13.358602,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +13.358928,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +13.359254,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +13.359582,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +13.359906,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +13.360226,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +13.360554,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +13.360875,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +13.361195,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +13.361523,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +13.361843,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +13.362169,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +13.362495,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +13.362817,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +13.363141,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +13.363470,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +13.363793,0.172701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +13.364079,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +13.364319,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +13.364564,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +13.364804,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +13.365042,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +13.365282,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +13.365526,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +13.365764,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +13.366000,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +13.366236,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +13.366476,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +13.366713,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +13.366970,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +13.367207,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +13.367450,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +13.367685,0.166237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +13.367921,0.165757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +13.368157,0.167646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +13.368395,0.166973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +13.368640,0.167389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +13.368884,0.182557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +13.369093,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +13.369285,0.187613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +13.369479,0.186845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +13.369671,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +13.369865,0.188669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +13.370057,0.188605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +13.370250,0.189789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +13.370448,0.180285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +13.370641,0.172189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +13.370830,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +13.371017,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +13.371204,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +13.371389,0.167902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +13.371582,0.181342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +13.371773,0.185182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +13.371966,0.182750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +13.372156,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +13.372349,0.179485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +13.372545,0.179869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +13.372735,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +13.372923,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +13.373112,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +13.373307,0.186653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +13.373495,0.186237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +13.373683,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +13.373874,0.203517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +13.374078,0.193533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +13.374273,0.192957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +13.374467,0.165757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +13.374634,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +13.374798,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +13.374962,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +13.375126,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +13.375290,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +13.375454,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +13.375618,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +13.375782,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +13.375947,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +13.376111,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +13.376276,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +13.376439,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +13.376604,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +13.376767,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +13.376932,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +13.377097,0.165630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +13.377263,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +13.377428,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +13.377593,0.165661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +13.377759,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +13.377924,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +13.378090,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +13.378254,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +13.378419,0.182557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +13.378603,0.195293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +13.378799,0.190685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +13.378991,0.196893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +13.379189,0.197373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +13.379388,0.186365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +13.379575,0.192221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +13.379769,0.195069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +13.379965,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +13.380155,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +13.380342,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +13.380531,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +13.380722,0.170814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +13.380894,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +13.381058,0.194237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +13.381254,0.192893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +13.381448,0.192893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +13.381642,0.197149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +13.381840,0.192573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +13.382034,0.191869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +13.382227,0.191165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +13.382420,0.188669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +13.382610,0.197501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +13.382809,0.196029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +13.383006,0.193821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +13.383201,0.193821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +13.383396,0.176477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +13.383574,0.176574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +13.383752,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +13.383937,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +13.384118,0.178493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +13.384298,0.176317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +13.384475,0.177470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +13.384654,0.179549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +13.384835,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +13.385013,0.178173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +13.385193,0.184734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +13.385379,0.174878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +13.385555,0.177661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +13.385734,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +13.385909,0.173534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +13.386084,0.174525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +13.386259,0.175357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +13.386436,0.175261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +13.386612,0.176830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +13.386791,0.174557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +13.386966,0.173629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +13.387141,0.172798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +13.387315,0.173661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +13.387490,0.171805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +13.387663,0.169854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +13.387834,0.174941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +13.388010,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +13.388187,0.169406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +13.388358,0.172157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +13.388532,0.175581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +13.388708,0.174653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +13.388884,0.180414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +13.389066,0.106462,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +13.389489,15.634511,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","16",,,"square",30 +13.390071,0.076127,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +13.390218,0.186237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +13.390405,0.183485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +13.390590,0.181693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +13.390773,0.185245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +13.390960,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +13.391148,0.191710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +13.391341,0.190366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +13.391533,0.187229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +13.391721,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +13.391905,0.187133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +13.392093,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +13.392280,0.185469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +13.392466,0.181981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +13.392650,0.184157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +13.392835,0.184638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +13.393021,0.169085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +13.393191,0.173725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +13.393366,0.176862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +13.393544,0.179294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +13.393725,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +13.393905,0.178557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +13.394085,0.187069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +13.394273,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +13.394461,0.182430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +13.394645,0.180285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +13.394827,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +13.395010,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +13.395192,0.177565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +13.395370,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +13.395554,0.180286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +13.395736,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +13.395920,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +13.396108,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +13.396291,0.167870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +13.396460,0.182718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +13.396644,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +13.396827,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +13.397007,0.178013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +13.397186,0.177470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +13.397365,0.181981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +13.397548,0.185885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +13.397736,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +13.397919,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +13.398103,0.181661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +13.398286,0.180030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +13.398467,0.177469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +13.398646,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +13.398829,0.189885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +13.399021,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +13.399203,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +13.399384,0.183198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +13.399569,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +13.399754,0.200381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +13.399956,0.192349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +13.400149,0.200828,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +13.400351,0.192221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +13.400545,0.197117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +13.400743,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +13.400937,0.191677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +13.401130,0.197405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +13.401328,0.196317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +13.401526,0.196445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +13.401724,0.191261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +13.401916,0.177918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +13.402095,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +13.402260,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +13.402424,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +13.402587,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +13.402752,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +13.402916,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +13.403080,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +13.403244,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +13.403408,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +13.403573,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +13.403737,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +13.403901,0.171485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +13.404074,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +13.404238,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +13.404402,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +13.404567,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +13.404731,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +13.404895,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +13.405059,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +13.405223,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +13.405387,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +13.405551,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +13.405716,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +13.405879,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +13.406044,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +13.406208,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +13.406372,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +13.406536,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +13.406701,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +13.406865,0.171517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +13.407037,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +13.407201,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +13.407366,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +13.407530,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +13.407694,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +13.407858,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +13.408022,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +13.408187,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +13.408352,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +13.408516,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +13.408680,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +13.408845,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +13.409009,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +13.409173,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +13.409337,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +13.409501,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +13.409665,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +13.409829,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +13.409994,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +13.410158,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +13.410322,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +13.410486,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +13.410650,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +13.410814,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +13.410978,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +13.411142,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +13.411306,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +13.411470,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +13.411635,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +13.411799,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +13.411963,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +13.412128,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +13.412292,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +13.412456,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +13.412621,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +13.412785,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +13.412949,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +13.413113,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +13.413277,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +13.413441,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +13.413605,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +13.413769,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +13.413933,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +13.414097,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +13.414262,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +13.414426,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +13.414590,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +13.414755,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +13.414919,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +13.415082,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +13.415246,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +13.415410,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +13.415575,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +13.415739,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +13.415903,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +13.416068,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +13.416232,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +13.416397,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +13.416561,0.035488,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +13.416841,15.108631,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","17",,,"square",36 +13.432285,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +13.432295,14.427073,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","16",,,"reduce(float*, float*, float*, int)",43 +13.446862,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +13.446874,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +15.200979,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +15.201142,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +15.201306,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +15.201470,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +15.201633,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +15.201797,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +15.201960,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +15.202124,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +15.202288,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +15.202453,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +15.202617,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +15.202781,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +15.202945,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +15.203109,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +15.203273,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +15.203436,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +15.203600,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +15.203764,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +15.203929,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +15.204092,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +15.204256,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +15.204421,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +15.204585,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +15.204749,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +15.204913,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +15.205077,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +15.205241,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +15.205404,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +15.205569,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +15.205733,0.166493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +15.205900,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +15.206065,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +15.206229,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +15.206393,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +15.206557,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +15.206722,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +15.206887,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +15.207051,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +15.207216,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +15.207380,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +15.207545,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +15.207709,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +15.207874,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +15.208039,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +15.208203,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +15.208367,0.170365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +15.208539,0.170846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +15.208711,0.173565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +15.208886,0.175805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +15.209063,0.173502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +15.209237,0.169565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +15.209408,0.169245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +15.209579,0.166334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +15.209746,0.167197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +15.209914,0.170238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +15.210086,0.168061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +15.210255,0.166493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +15.210423,0.167934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +15.210592,0.168893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +15.210762,0.166366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +15.210930,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +15.211096,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +15.211263,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +15.211429,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +15.211595,0.167102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +15.211764,0.170941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +15.211936,0.217981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +15.212155,0.212540,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +15.212369,0.214973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +15.212585,0.217245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +15.212804,0.221340,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +15.213026,0.219037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +15.213247,0.210173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +15.213458,0.204125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +15.213663,0.212957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +15.213878,0.209565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +15.214089,0.215068,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +15.214305,0.212925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +15.214519,0.203613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +15.214724,0.211741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +15.214937,0.220636,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +15.215159,0.196637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +15.215357,0.168446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +15.215526,0.170813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +15.215698,0.197725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +15.215897,0.217052,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +15.216115,0.213181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +15.216330,0.212157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +15.216543,0.204157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +15.216748,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +15.216942,0.198397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +15.217141,0.196029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +15.217339,0.208796,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +15.217549,0.195293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +15.217745,0.200669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +15.217947,0.202045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +15.218151,0.211581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +15.218363,0.202141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +15.218567,0.179261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +15.218747,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +15.218911,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +15.219075,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +15.219240,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +15.219403,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +15.219568,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +15.219731,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +15.219895,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +15.220059,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +15.220224,0.167261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +15.220392,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +15.220557,0.169021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +15.220728,0.165310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +15.220894,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +15.221060,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +15.221224,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +15.221413,0.196253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +15.221611,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +15.221806,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +15.222001,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +15.222186,0.196701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +15.222384,0.192669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +15.222578,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +15.222769,0.194717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +15.222965,0.188797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +15.223155,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +15.223339,0.165757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +15.223505,0.198173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +15.223705,0.192413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +15.223899,0.199453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +15.224099,0.200541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +15.224301,0.198781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +15.224501,0.196157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +15.224698,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +15.224891,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +15.225087,0.196445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +15.225285,0.197053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +15.225483,0.189373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +15.225674,0.180797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +15.225856,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +15.226038,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +15.226227,0.184606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +15.226413,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +15.226594,0.182077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +15.226778,0.185085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +15.226964,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +15.227146,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +15.227332,0.180766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +15.227514,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +15.227697,0.177469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +15.227876,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +15.228060,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +15.228243,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +15.228429,0.107839,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +15.228939,15.142806,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","18",,,"square",55 +15.229564,0.074271,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +15.229705,0.187133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +15.229894,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +15.230079,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +15.230266,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +15.230450,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +15.230634,0.186174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +15.230821,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +15.231010,0.180253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +15.231191,0.187101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +15.231380,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +15.231563,0.182781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +15.231747,0.189373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +15.231938,0.182526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +15.232121,0.180382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +15.232303,0.183837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +15.232488,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +15.232675,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +15.232865,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +15.233055,0.194653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +15.233251,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +15.233438,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +15.233621,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +15.233808,0.190174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +15.234000,0.185470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +15.234186,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +15.234371,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +15.234553,0.183869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +15.234739,0.172029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +15.234912,0.172030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +15.235085,0.179613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +15.235266,0.178013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +15.235445,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +15.235626,0.177662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +15.235805,0.185117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +15.235991,0.188253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +15.236181,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +15.236363,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +15.236545,0.182493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +15.236729,0.183070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +15.236913,0.175389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +15.237090,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +15.237272,0.180189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +15.237454,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +15.237635,0.187134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +15.237824,0.183966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +15.238009,0.170845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +15.238181,0.181757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +15.238364,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +15.238545,0.179326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +15.238726,0.180093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +15.238907,0.179389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +15.239088,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +15.239267,0.182621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +15.239451,0.182846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +15.239635,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +15.239822,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +15.240005,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +15.240188,0.177149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +15.240366,0.180541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +15.240548,0.179902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +15.240729,0.183421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +15.240914,0.184829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +15.241100,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +15.241285,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +15.241469,0.196253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +15.241666,0.206397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +15.241874,0.199389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +15.242074,0.190109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +15.242266,0.192413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +15.242459,0.194557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +15.242655,0.190589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +15.242847,0.188669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +15.243037,0.192381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +15.243230,0.194909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +15.243426,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +15.243618,0.172445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +15.243792,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +15.243956,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +15.244120,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +15.244283,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +15.244448,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +15.244612,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +15.244775,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +15.244940,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +15.245104,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +15.245267,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +15.245432,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +15.245595,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +15.245760,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +15.245924,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +15.246088,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +15.246252,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +15.246416,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +15.246580,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +15.246745,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +15.246909,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +15.247073,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +15.247237,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +15.247402,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +15.247566,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +15.247730,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +15.247894,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +15.248058,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +15.248222,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +15.248387,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +15.248550,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +15.248715,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +15.248879,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +15.249044,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +15.249208,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +15.249373,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +15.249537,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +15.249701,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +15.249865,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +15.250029,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +15.250193,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +15.250358,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +15.250522,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +15.250686,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +15.250851,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +15.251015,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +15.251179,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +15.251343,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +15.251507,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +15.251671,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +15.251836,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +15.252000,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +15.252164,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +15.252328,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +15.252492,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +15.252657,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +15.252821,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +15.252986,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +15.253149,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +15.253313,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +15.253478,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +15.253642,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +15.253806,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +15.253970,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +15.254134,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +15.254299,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +15.254462,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +15.254627,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +15.254791,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +15.254956,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +15.255120,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +15.255284,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +15.255448,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +15.255612,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +15.255777,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +15.255941,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +15.256105,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +15.256270,0.035487,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +15.256419,14.729564,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","19",,,"square",61 +15.271559,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +15.271571,13.995944,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","18",,,"reduce(float*, float*, float*, int)",68 +15.285691,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +15.285703,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +17.015262,0.212605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +17.015476,0.202141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +17.015679,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +17.015870,0.185693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +17.016057,0.185885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +17.016244,0.197629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +17.016443,0.187677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +17.016632,0.191229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +17.016825,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +17.017009,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +17.017195,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +17.017379,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +17.017562,0.180702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +17.017744,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +17.017930,0.187037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +17.018118,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +17.018302,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +17.018483,0.184797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +17.018669,0.181566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +17.018852,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +17.019038,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +17.019222,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +17.019406,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +17.019595,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +17.019783,0.189693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +17.019974,0.189213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +17.020165,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +17.020353,0.186590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +17.020541,0.185278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +17.020727,0.192573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +17.020921,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +17.021111,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +17.021296,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +17.021480,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +17.021664,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +17.021848,0.166206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +17.022015,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +17.022196,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +17.022379,0.180765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +17.022561,0.179390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +17.022742,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +17.022928,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +17.023116,0.186909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +17.023304,0.178749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +17.023484,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +17.023670,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +17.023853,0.178110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +17.024033,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +17.024215,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +17.024395,0.180797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +17.024577,0.188189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +17.024767,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +17.024948,0.174782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +17.025124,0.177565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +17.025303,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +17.025487,0.178717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +17.025667,0.177662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +17.025846,0.180061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +17.026027,0.178173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +17.026207,0.180157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +17.026388,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +17.026569,0.185982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +17.026756,0.180829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +17.026939,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +17.027119,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +17.027298,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +17.027480,0.179582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +17.027661,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +17.027842,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +17.028024,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +17.028210,0.183389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +17.028395,0.189405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +17.028586,0.194781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +17.028782,0.197245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +17.028980,0.196445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +17.029178,0.190429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +17.029370,0.191229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +17.029562,0.187677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +17.029751,0.194109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +17.029947,0.194397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +17.030142,0.197053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +17.030341,0.192765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +17.030535,0.172958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +17.030709,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +17.030873,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +17.031036,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +17.031200,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +17.031365,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +17.031529,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +17.031693,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +17.031858,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +17.032022,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +17.032186,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +17.032351,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +17.032515,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +17.032679,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +17.032843,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +17.033008,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +17.033173,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +17.033337,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +17.033501,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +17.033665,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +17.033829,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +17.033994,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +17.034158,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +17.034322,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +17.034486,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +17.034650,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +17.034815,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +17.034979,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +17.035143,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +17.035307,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +17.035471,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +17.035635,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +17.035799,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +17.035963,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +17.036127,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +17.036292,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +17.036456,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +17.036621,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +17.036785,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +17.036949,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +17.037113,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +17.037278,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +17.037441,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +17.037605,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +17.037769,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +17.037933,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +17.038097,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +17.038262,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +17.038426,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +17.038590,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +17.038753,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +17.038917,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +17.039082,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +17.039246,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +17.039410,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +17.039574,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +17.039739,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +17.039903,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +17.040067,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +17.040231,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +17.040395,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +17.040559,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +17.040724,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +17.040888,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +17.041052,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +17.041216,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +17.041381,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +17.041545,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +17.041709,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +17.041874,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +17.042038,0.096094,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +17.042500,15.241589,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","20",,,"square",80 +17.042868,0.061663,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +17.042981,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +17.043145,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +17.043309,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +17.043473,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +17.043637,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +17.043800,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +17.043964,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +17.044128,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +17.044292,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +17.044456,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +17.044620,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +17.044784,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +17.044948,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +17.045111,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +17.045275,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +17.045439,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +17.045603,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +17.045766,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +17.045931,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +17.046095,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +17.046258,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +17.046422,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +17.046586,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +17.046750,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +17.046915,0.165790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +17.047082,0.166045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +17.047250,0.166046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +17.047417,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +17.047582,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +17.047747,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +17.047912,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +17.048078,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +17.048243,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +17.048409,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +17.048574,0.166205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +17.048742,0.173342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +17.048916,0.168925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +17.049086,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +17.049253,0.165502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +17.049419,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +17.049585,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +17.049751,0.165917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +17.049919,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +17.050083,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +17.050247,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +17.050411,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +17.050576,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +17.050740,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +17.050904,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +17.051069,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +17.051233,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +17.051397,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +17.051561,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +17.051725,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +17.051890,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +17.052054,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +17.052218,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +17.052382,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +17.052546,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +17.052711,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +17.052875,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +17.053039,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +17.053203,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +17.053367,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +17.053531,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +17.053695,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +17.053858,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +17.054023,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +17.054187,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +17.054350,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +17.054514,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +17.054678,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +17.054842,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +17.055006,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +17.055170,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +17.055334,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +17.055499,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +17.055663,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +17.055826,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +17.055990,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +17.056154,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +17.056318,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +17.056482,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +17.056647,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +17.056811,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +17.056975,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +17.057139,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +17.057303,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +17.057467,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +17.057631,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +17.057794,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +17.057959,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +17.058123,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +17.058287,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +17.058451,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +17.058616,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +17.058780,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +17.058944,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +17.059108,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +17.059273,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +17.059436,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +17.059601,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +17.059765,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +17.059929,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +17.060094,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +17.060258,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +17.060422,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +17.060586,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +17.060751,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +17.060915,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +17.061080,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +17.061244,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +17.061409,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +17.061573,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +17.061737,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +17.061901,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +17.062066,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +17.062230,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +17.062395,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +17.062559,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +17.062723,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +17.062887,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +17.063051,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +17.063216,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +17.063380,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +17.063544,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +17.063708,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +17.063873,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +17.064037,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +17.064201,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +17.064365,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +17.064529,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +17.064693,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +17.064857,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +17.065021,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +17.065185,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +17.065350,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +17.065515,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +17.065679,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +17.065843,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +17.066007,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +17.066171,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +17.066335,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +17.066500,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +17.066664,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +17.066829,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +17.066993,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +17.067157,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +17.067321,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +17.067485,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +17.067650,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +17.067814,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +17.067978,0.035392,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +17.068208,14.689342,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","21",,,"square",86 +17.083299,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +17.083310,14.018120,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","20",,,"reduce(float*, float*, float*, int)",93 +17.097434,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +17.097447,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +18.830676,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +18.830840,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +18.831004,0.162206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +18.831167,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +18.831331,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +18.831495,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +18.831659,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +18.831823,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +18.831987,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +18.832151,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +18.832316,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +18.832479,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +18.832643,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +18.832807,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +18.832971,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +18.833135,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +18.833299,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +18.833463,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +18.833627,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +18.833790,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +18.833955,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +18.834118,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +18.834283,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +18.834446,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +18.834610,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +18.834774,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +18.834938,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +18.835104,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +18.835268,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +18.835432,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +18.835596,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +18.835760,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +18.835925,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +18.836089,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +18.836253,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +18.836418,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +18.836583,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +18.836747,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +18.836911,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +18.837076,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +18.837240,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +18.837405,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +18.837569,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +18.837734,0.167677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +18.837902,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +18.838069,0.167966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +18.838238,0.166525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +18.838406,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +18.838571,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +18.838735,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +18.838899,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +18.839063,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +18.839228,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +18.839392,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +18.839556,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +18.839721,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +18.839887,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +18.840052,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +18.840217,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +18.840381,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +18.840546,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +18.840711,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +18.840875,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +18.841039,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +18.841204,0.194941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +18.841400,0.199229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +18.841600,0.218141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +18.841820,0.206716,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +18.842028,0.215997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +18.842245,0.207197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +18.842453,0.204989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +18.842660,0.206141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +18.842867,0.206717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +18.843075,0.210973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +18.843287,0.205181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +18.843494,0.211069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +18.843706,0.208508,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +18.843916,0.212189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +18.844130,0.211933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +18.844343,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +18.844523,0.165501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +18.844690,0.172286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +18.844863,0.201021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +18.845066,0.202365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +18.845269,0.202909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +18.845473,0.200413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +18.845675,0.204189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +18.845880,0.194813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +18.846076,0.191485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +18.846269,0.193981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +18.846464,0.199453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +18.846665,0.206525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +18.846873,0.202909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +18.847077,0.200093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +18.847279,0.203164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +18.847483,0.164830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +18.847649,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +18.847813,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +18.847977,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +18.848142,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +18.848305,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +18.848470,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +18.848633,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +18.848798,0.166334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +18.848966,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +18.849132,0.166461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +18.849299,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +18.849465,0.165885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +18.849632,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +18.849796,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +18.849960,0.196701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +18.850158,0.194909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +18.850354,0.195261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +18.850550,0.193341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +18.850745,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +18.850930,0.197629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +18.851129,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +18.851321,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +18.851516,0.193501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +18.851711,0.191325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +18.851903,0.177118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +18.852082,0.176733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +18.852260,0.198493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +18.852459,0.197725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +18.852658,0.196349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +18.852856,0.199421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +18.853057,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +18.853250,0.194525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +18.853446,0.200188,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +18.853648,0.199069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +18.853848,0.199805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +18.854049,0.202653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +18.854253,0.195997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +18.854450,0.179709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +18.854631,0.186365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +18.854819,0.183006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +18.855003,0.185597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +18.855190,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +18.855371,0.184957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +18.855557,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +18.855749,0.186461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +18.855936,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +18.856124,0.181406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +18.856307,0.179102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +18.856487,0.184733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +18.856673,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +18.856856,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +18.857041,0.185405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +18.857228,0.181406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +18.857410,0.181181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +18.857593,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +18.857776,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +18.857959,0.104670,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +18.858303,15.165334,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","22",,,"square",105 +18.858761,0.073055,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +18.858896,0.190685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +18.859088,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +18.859274,0.182589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +18.859458,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +18.859644,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +18.859833,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +18.860018,0.184669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +18.860205,0.185566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +18.860391,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +18.860574,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +18.860763,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +18.860948,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +18.861131,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +18.861317,0.184701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +18.861503,0.187966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +18.861692,0.193437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +18.861887,0.188861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +18.862077,0.187037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +18.862265,0.183613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +18.862450,0.188957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +18.862640,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +18.862826,0.187069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +18.863015,0.185373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +18.863201,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +18.863388,0.183902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +18.863574,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +18.863743,0.175773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +18.863920,0.181981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +18.864103,0.183614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +18.864288,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +18.864470,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +18.864649,0.184637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +18.864835,0.183837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +18.865020,0.180286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +18.865202,0.181725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +18.865384,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +18.865566,0.186301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +18.865754,0.178301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +18.865933,0.182781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +18.866117,0.182846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +18.866301,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +18.866485,0.190109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +18.866677,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +18.866861,0.169309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +18.867031,0.179166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +18.867212,0.185373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +18.867398,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +18.867579,0.180733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +18.867762,0.179133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +18.867942,0.179134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +18.868122,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +18.868303,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +18.868485,0.183645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +18.868670,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +18.868855,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +18.869036,0.180638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +18.869218,0.183389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +18.869402,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +18.869583,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +18.869765,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +18.869952,0.190077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +18.870143,0.184062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +18.870329,0.196573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +18.870527,0.194717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +18.870723,0.202141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +18.870926,0.193277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +18.871121,0.193085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +18.871315,0.192253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +18.871508,0.190333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +18.871700,0.196477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +18.871898,0.193693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +18.872093,0.196893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +18.872291,0.195709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +18.872488,0.170014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +18.872659,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +18.872824,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +18.872987,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +18.873152,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +18.873316,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +18.873480,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +18.873644,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +18.873808,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +18.873972,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +18.874136,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +18.874301,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +18.874466,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +18.874630,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +18.874794,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +18.874958,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +18.875122,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +18.875286,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +18.875450,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +18.875615,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +18.875778,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +18.875942,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +18.876107,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +18.876271,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +18.876435,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +18.876600,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +18.876764,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +18.876929,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +18.877093,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +18.877257,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +18.877422,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +18.877586,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +18.877750,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +18.877914,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +18.878079,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +18.878243,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +18.878407,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +18.878572,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +18.878736,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +18.878900,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +18.879065,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +18.879229,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +18.879393,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +18.879558,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +18.879723,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +18.879887,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +18.880052,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +18.880216,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +18.880380,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +18.880544,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +18.880709,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +18.880873,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +18.881037,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +18.881201,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +18.881365,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +18.881529,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +18.881693,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +18.881858,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +18.882021,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +18.882185,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +18.882350,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +18.882514,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +18.882678,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +18.882842,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +18.883006,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +18.883170,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +18.883335,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +18.883498,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +18.883662,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +18.883827,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +18.883992,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +18.884156,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +18.884320,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +18.884484,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +18.884648,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +18.884812,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +18.884976,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +18.885140,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +18.885304,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +18.885468,0.035456,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +18.885606,14.716798,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","23",,,"square",111 +18.900643,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +18.900653,14.019496,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","22",,,"reduce(float*, float*, float*, int)",118 +18.914788,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +18.914801,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +20.106758,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +20.106922,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +20.107085,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +20.107249,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +20.107413,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +20.107577,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +20.107741,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +20.107905,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +20.108069,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +20.108233,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +20.108396,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +20.108560,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +20.108724,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +20.108888,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +20.109053,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +20.109217,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +20.109381,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +20.109545,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +20.109709,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +20.109873,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +20.110037,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +20.110201,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +20.110365,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +20.110528,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +20.110692,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +20.110856,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +20.111021,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +20.111185,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +20.111350,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +20.111514,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +20.111678,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +20.111843,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +20.112008,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +20.112172,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +20.112336,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +20.112501,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +20.112665,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +20.112829,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +20.112994,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +20.113158,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +20.113323,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +20.113487,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +20.113653,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +20.113820,0.164894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +20.113986,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +20.114152,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +20.114318,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +20.114484,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +20.114650,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +20.114814,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +20.114979,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +20.115143,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +20.115308,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +20.115473,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +20.115638,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +20.115802,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +20.115966,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +20.116130,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +20.116294,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +20.116458,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +20.116622,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +20.116786,0.172509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +20.116959,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +20.117125,0.201084,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +20.117327,0.198397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +20.117527,0.216989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +20.117745,0.219613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +20.117966,0.212892,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +20.118180,0.202397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +20.118383,0.207869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +20.118593,0.209309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +20.118803,0.211740,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +20.119016,0.210973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +20.119228,0.205821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +20.119435,0.213565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +20.119650,0.204381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +20.119856,0.210172,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +20.120067,0.220893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +20.120289,0.174205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +20.120465,0.164990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +20.120631,0.174973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +20.120807,0.209661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +20.121018,0.205916,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +20.121225,0.205501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +20.121432,0.207965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +20.121641,0.204605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +20.121847,0.205981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +20.122054,0.193245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +20.122249,0.192349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +20.122442,0.199229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +20.122643,0.206332,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +20.122850,0.202557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +20.123054,0.207357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +20.123263,0.203325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +20.123467,0.167741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +20.123636,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +20.123800,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +20.123964,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +20.124128,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +20.124292,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +20.124456,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +20.124621,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +20.124787,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +20.124953,0.166973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +20.125122,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +20.125288,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +20.125453,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +20.125617,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +20.125781,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +20.125945,0.191261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +20.126137,0.196093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +20.126335,0.194813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +20.126531,0.193021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +20.126725,0.182621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +20.126909,0.195453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +20.127106,0.199357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +20.127306,0.191293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +20.127499,0.191453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +20.127691,0.189053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +20.127882,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +20.128071,0.174237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +20.128246,0.194141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +20.128442,0.192733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +20.128636,0.197437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +20.128835,0.199709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +20.129036,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +20.129228,0.194013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +20.129423,0.194589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +20.129619,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +20.129812,0.197085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +20.130010,0.200861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +20.130213,0.194717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +20.130408,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +20.130595,0.178557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +20.130774,0.184798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +20.130960,0.183294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +20.131145,0.186845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +20.131333,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +20.131521,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +20.131706,0.180317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +20.131887,0.185565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +20.132074,0.182750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +20.132258,0.179453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +20.132439,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +20.132621,0.179485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +20.132802,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +20.132988,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +20.133175,0.182526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +20.133359,0.177981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +20.133538,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +20.133722,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +20.133901,0.180349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +20.134083,0.103871,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +20.134628,15.182230,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","24",,,"square",130 +20.135111,0.073118,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +20.135250,0.185150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +20.135437,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +20.135624,0.183133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +20.135808,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +20.135991,0.183485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +20.136175,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +20.136363,0.187261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +20.136551,0.184478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +20.136737,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +20.136919,0.185277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +20.137106,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +20.137295,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +20.137483,0.186205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +20.137670,0.191581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +20.137863,0.189213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +20.138053,0.187069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +20.138242,0.187773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +20.138431,0.186590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +20.138619,0.186845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +20.138807,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +20.138993,0.184829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +20.139179,0.184157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +20.139364,0.177757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +20.139543,0.166558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +20.139711,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +20.139895,0.180029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +20.140076,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +20.140257,0.177886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +20.140436,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +20.140621,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +20.140808,0.183741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +20.140993,0.178301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +20.141172,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +20.141356,0.184670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +20.141542,0.179869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +20.141724,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +20.141908,0.180541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +20.142090,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +20.142271,0.186557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +20.142459,0.186462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +20.142647,0.174558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +20.142823,0.179645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +20.143004,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +20.143186,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +20.143367,0.179454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +20.143547,0.178493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +20.143727,0.180797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +20.143909,0.178461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +20.144089,0.180702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +20.144271,0.182014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +20.144454,0.179613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +20.144635,0.182269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +20.144818,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +20.145002,0.181725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +20.145185,0.180126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +20.145367,0.180477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +20.145548,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +20.145731,0.186525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +20.145919,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +20.146102,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +20.146293,0.199357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +20.146494,0.200829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +20.146696,0.197629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +20.146895,0.190493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +20.147087,0.191869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +20.147280,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +20.147470,0.195517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +20.147666,0.191229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +20.147859,0.200349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +20.148060,0.193757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +20.148255,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +20.148437,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +20.148601,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +20.148765,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +20.148930,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +20.149094,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +20.149258,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +20.149422,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +20.149586,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +20.149750,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +20.149914,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +20.150078,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +20.150242,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +20.150406,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +20.150571,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +20.150735,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +20.150900,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +20.151064,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +20.151228,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +20.151392,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +20.151556,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +20.151721,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +20.151885,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +20.152049,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +20.152213,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +20.152377,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +20.152541,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +20.152705,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +20.152869,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +20.153034,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +20.153198,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +20.153362,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +20.153526,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +20.153691,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +20.153855,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +20.154019,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +20.154183,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +20.154347,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +20.154512,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +20.154675,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +20.154840,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +20.155004,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +20.155168,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +20.155332,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +20.155495,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +20.155660,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +20.155824,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +20.155988,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +20.156152,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +20.156316,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +20.156480,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +20.156644,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +20.156809,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +20.156973,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +20.157137,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +20.157301,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +20.157465,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +20.157629,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +20.157793,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +20.157957,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +20.158121,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +20.158286,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +20.158450,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +20.158614,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +20.158778,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +20.158942,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +20.159106,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +20.159271,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +20.159435,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +20.159599,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +20.159763,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +20.159926,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +20.160091,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +20.160255,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +20.160420,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +20.160584,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +20.160748,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +20.160912,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +20.161076,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +20.161240,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +20.161404,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +20.161568,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +20.161732,0.035263,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +20.161959,14.697662,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","25",,,"square",136 +20.176980,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +20.176991,13.982088,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","24",,,"reduce(float*, float*, float*, int)",143 +20.191221,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +20.191238,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +21.371845,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +21.372018,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +21.372182,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +21.372346,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +21.372510,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +21.372673,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +21.372837,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +21.373001,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +21.373165,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +21.373329,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +21.373493,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +21.373657,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +21.373821,0.171197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +21.373993,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +21.374157,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +21.374321,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +21.374485,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +21.374649,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +21.374813,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +21.374977,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +21.375141,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +21.375305,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +21.375469,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +21.375633,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +21.375797,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +21.375961,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +21.376126,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +21.376290,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +21.376454,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +21.376619,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +21.376783,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +21.376947,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +21.377112,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +21.377276,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +21.377440,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +21.377605,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +21.377769,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +21.377934,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +21.378098,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +21.378262,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +21.378427,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +21.378591,0.165853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +21.378758,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +21.378924,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +21.379089,0.165405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +21.379256,0.165438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +21.379423,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +21.379589,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +21.379754,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +21.379919,0.164958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +21.380085,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +21.380251,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +21.380416,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +21.380582,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +21.380746,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +21.380911,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +21.381075,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +21.381239,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +21.381403,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +21.381568,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +21.381732,0.178622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +21.381912,0.211196,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +21.382124,0.209021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +21.382334,0.212957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +21.382549,0.205597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +21.382755,0.211132,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +21.382968,0.207165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +21.383176,0.196957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +21.383375,0.208957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +21.383585,0.208573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +21.383795,0.205468,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +21.384001,0.211165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +21.384214,0.207453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +21.384423,0.203357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +21.384627,0.205469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +21.384834,0.192029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +21.385027,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +21.385193,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +21.385358,0.171390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +21.385531,0.198333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +21.385730,0.199869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +21.385931,0.205692,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +21.386138,0.200925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +21.386340,0.202333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +21.386544,0.198781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +21.386744,0.193597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +21.386939,0.197981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +21.387138,0.207965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +21.387348,0.224892,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +21.387574,0.206461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +21.387782,0.213789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +21.387997,0.196317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +21.388194,0.181661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +21.388377,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +21.388542,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +21.388706,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +21.388870,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +21.389035,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +21.389199,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +21.389364,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +21.389530,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +21.389695,0.166557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +21.389863,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +21.390030,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +21.390195,0.166237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +21.390363,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +21.390527,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +21.390691,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +21.390855,0.178493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +21.391035,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +21.391230,0.197149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +21.391428,0.197213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +21.391626,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +21.391817,0.193021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +21.392011,0.191581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +21.392204,0.191037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +21.392396,0.189981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +21.392588,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +21.392779,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +21.392970,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +21.393151,0.177822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +21.393330,0.196797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +21.393528,0.200189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +21.393730,0.197436,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +21.393928,0.193277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +21.394123,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +21.394317,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +21.394512,0.198173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +21.394711,0.194269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +21.394907,0.208413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +21.395116,0.195101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +21.395313,0.193277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +21.395507,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +21.395688,0.183390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +21.395873,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +21.396056,0.185853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +21.396243,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +21.396426,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +21.396615,0.184765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +21.396801,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +21.396995,0.181533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +21.397178,0.179326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +21.397359,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +21.397538,0.180765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +21.397720,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +21.397904,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +21.398091,0.183838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +21.398276,0.186142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +21.398464,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +21.398645,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +21.398827,0.178173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +21.399006,0.177150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +21.399184,0.104031,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +21.399637,15.155062,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","26",,,"square",155 +21.400166,0.074559,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +21.400303,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +21.400486,0.187710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +21.400675,0.186461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +21.400863,0.191485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +21.401055,0.180797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +21.401237,0.187261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +21.401426,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +21.401610,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +21.401795,0.182781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +21.401979,0.183678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +21.402164,0.185245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +21.402351,0.185757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +21.402538,0.186845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +21.402726,0.187901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +21.402915,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +21.403100,0.184765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +21.403286,0.182750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +21.403470,0.182366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +21.403654,0.193085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +21.403848,0.195069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +21.404044,0.184829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +21.404230,0.185021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +21.404417,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +21.404602,0.167645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +21.404770,0.174942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +21.404947,0.180189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +21.405128,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +21.405309,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +21.405489,0.179518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +21.405670,0.183741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +21.405855,0.186333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +21.406042,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +21.406225,0.180125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +21.406406,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +21.406590,0.183806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +21.406775,0.179165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +21.406956,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +21.407141,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +21.407322,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +21.407508,0.190013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +21.407699,0.182910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +21.407883,0.169149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +21.408054,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +21.408234,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +21.408415,0.177950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +21.408594,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +21.408778,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +21.408961,0.177149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +21.409140,0.179869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +21.409321,0.180510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +21.409503,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +21.409686,0.180253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +21.409868,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +21.410048,0.177085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +21.410227,0.180702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +21.410409,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +21.410589,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +21.410771,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +21.410957,0.191805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +21.411150,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +21.411331,0.200925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +21.411533,0.195613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +21.411730,0.202109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +21.411933,0.203677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +21.412138,0.193213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +21.412333,0.191101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +21.412525,0.188829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +21.412715,0.191773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +21.412908,0.195261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +21.413105,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +21.413301,0.190525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +21.413493,0.170846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +21.413665,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +21.413830,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +21.413994,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +21.414158,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +21.414322,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +21.414486,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +21.414650,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +21.414814,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +21.414978,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +21.415142,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +21.415306,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +21.415470,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +21.415635,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +21.415798,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +21.415962,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +21.416127,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +21.416291,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +21.416455,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +21.416619,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +21.416783,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +21.416947,0.171197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +21.417119,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +21.417283,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +21.417448,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +21.417612,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +21.417776,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +21.417940,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +21.418105,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +21.418269,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +21.418433,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +21.418598,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +21.418762,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +21.418927,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +21.419091,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +21.419255,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +21.419419,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +21.419584,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +21.419749,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +21.419912,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +21.420077,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +21.420240,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +21.420405,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +21.420569,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +21.420734,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +21.420898,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +21.421063,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +21.421227,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +21.421392,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +21.421556,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +21.421720,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +21.421884,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +21.422048,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +21.422213,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +21.422377,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +21.422541,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +21.422706,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +21.422869,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +21.423034,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +21.423198,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +21.423362,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +21.423526,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +21.423689,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +21.423854,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +21.424018,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +21.424182,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +21.424346,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +21.424510,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +21.424675,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +21.424839,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +21.425003,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +21.425167,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +21.425332,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +21.425496,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +21.425660,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +21.425825,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +21.425989,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +21.426153,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +21.426316,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +21.426480,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +21.426644,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +21.426808,0.035424,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +21.427085,14.682174,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","27",,,"square",161 +21.442058,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +21.442068,13.988041,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","26",,,"reduce(float*, float*, float*, int)",168 +21.456162,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +21.456177,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +22.640859,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +22.641167,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +22.641485,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +22.641792,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +22.642098,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +22.642410,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +22.642714,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +22.643014,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +22.643316,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +22.643620,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +22.643922,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +22.644223,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +22.644530,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +22.644829,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +22.645130,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +22.645436,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +22.645736,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +22.646042,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +22.646207,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +22.646371,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +22.646535,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +22.646699,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +22.646862,0.170941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +22.647035,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +22.647198,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +22.647362,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +22.647526,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +22.647690,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +22.647854,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +22.648018,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +22.648182,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +22.648347,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +22.648511,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +22.648676,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +22.648840,0.172126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +22.649013,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +22.649178,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +22.649342,0.165085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +22.649509,0.167230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +22.649677,0.166205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +22.649844,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +22.650011,0.167038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +22.650179,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +22.650345,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +22.650511,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +22.650676,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +22.650843,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +22.651011,0.166717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +22.651179,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +22.651344,0.166269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +22.651512,0.164830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +22.651678,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +22.651843,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +22.652008,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +22.652172,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +22.652338,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +22.652504,0.192893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +22.652698,0.207165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +22.652907,0.216541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +22.653124,0.210397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +22.653336,0.211261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +22.653549,0.209021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +22.653759,0.203389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +22.653964,0.207964,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +22.654173,0.206365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +22.654380,0.218589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +22.654600,0.220444,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +22.654822,0.210749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +22.655034,0.208669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +22.655244,0.204861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +22.655450,0.207772,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +22.655659,0.175166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +22.655835,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +22.656001,0.175517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +22.656178,0.203901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +22.656383,0.204509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +22.656588,0.206525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +22.656796,0.204669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +22.657002,0.205757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +22.657209,0.202748,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +22.657413,0.194333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +22.657609,0.203069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +22.657813,0.206173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +22.658020,0.212861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +22.658235,0.211709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +22.658447,0.219996,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +22.658669,0.203325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +22.658873,0.175485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +22.659050,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +22.659214,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +22.659378,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +22.659542,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +22.659706,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +22.659871,0.166557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +22.660038,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +22.660203,0.167934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +22.660372,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +22.660538,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +22.660703,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +22.660868,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +22.661033,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +22.661196,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +22.661361,0.194077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +22.661556,0.197149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +22.661754,0.199293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +22.661955,0.192925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +22.662149,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +22.662333,0.195869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +22.662530,0.192669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +22.662724,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +22.662916,0.189437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +22.663107,0.195165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +22.663303,0.177629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +22.663482,0.175325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +22.663659,0.194557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +22.663854,0.199645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +22.664055,0.200221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +22.664257,0.196221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +22.664454,0.190109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +22.664646,0.204029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +22.664851,0.195165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +22.665048,0.193693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +22.665242,0.200413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +22.665444,0.204957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +22.665650,0.187549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +22.665839,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +22.666021,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +22.666207,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +22.666396,0.191261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +22.666588,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +22.666773,0.187197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +22.666961,0.185150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +22.667148,0.180317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +22.667329,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +22.667513,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +22.667696,0.179485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +22.667876,0.181374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +22.668059,0.182846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +22.668243,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +22.668431,0.184125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +22.668616,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +22.668800,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +22.668985,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +22.669170,0.181726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +22.669353,0.178429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +22.669533,0.179165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +22.669713,0.185885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +22.669900,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +22.670081,0.176894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +22.670259,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +22.670446,0.181757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +22.670629,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +22.670810,0.106526,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +22.671353,15.175255,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","28",,,"square",180 +22.671860,0.072447,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +22.671996,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +22.672185,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +22.672366,0.185757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +22.672553,0.186909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +22.672741,0.184030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +22.672926,0.188125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +22.673115,0.187261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +22.673304,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +22.673491,0.180669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +22.673673,0.186685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +22.673861,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +22.674050,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +22.674236,0.181470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +22.674419,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +22.674604,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +22.674790,0.171805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +22.674963,0.172126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +22.675137,0.180990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +22.675319,0.180541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +22.675501,0.181853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +22.675684,0.177533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +22.675863,0.185565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +22.676049,0.186174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +22.676237,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +22.676422,0.180477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +22.676604,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +22.676788,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +22.676973,0.176349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +22.677150,0.183934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +22.677335,0.182493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +22.677519,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +22.677704,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +22.677894,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +22.678080,0.171710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +22.678253,0.179934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +22.678434,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +22.678619,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +22.678801,0.179069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +22.678981,0.181853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +22.679164,0.178110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +22.679344,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +22.679527,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +22.679714,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +22.679903,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +22.680087,0.181693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +22.680270,0.178718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +22.680450,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +22.680635,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +22.680817,0.181885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +22.681000,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +22.681185,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +22.681373,0.188286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +22.681562,0.191325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +22.681755,0.195613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +22.681952,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +22.682147,0.193693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +22.682342,0.196380,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +22.682540,0.200253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +22.682741,0.198877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +22.682942,0.198397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +22.683141,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +22.683336,0.202429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +22.683540,0.192509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +22.683734,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +22.683914,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +22.684078,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +22.684242,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +22.684406,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +22.684570,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +22.684734,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +22.684898,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +22.685062,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +22.685226,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +22.685390,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +22.685554,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +22.685718,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +22.685883,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +22.686047,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +22.686210,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +22.686374,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +22.686539,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +22.686703,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +22.686867,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +22.687031,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +22.687196,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +22.687360,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +22.687524,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +22.687689,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +22.687853,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +22.688017,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +22.688181,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +22.688345,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +22.688509,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +22.688674,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +22.688838,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +22.689002,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +22.689166,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +22.689330,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +22.689494,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +22.689659,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +22.689823,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +22.689987,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +22.690151,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +22.690316,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +22.690480,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +22.690645,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +22.690809,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +22.690973,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +22.691137,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +22.691301,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +22.691465,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +22.691630,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +22.691794,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +22.691958,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +22.692121,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +22.692286,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +22.692450,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +22.692614,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +22.692778,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +22.692943,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +22.693107,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +22.693271,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +22.693435,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +22.693599,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +22.693763,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +22.693927,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +22.694092,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +22.694255,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +22.694419,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +22.694583,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +22.694748,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +22.694912,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +22.695076,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +22.695240,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +22.695404,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +22.695568,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +22.695732,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +22.695896,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +22.696060,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +22.696224,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +22.696389,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +22.696553,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +22.696717,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +22.696882,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +22.697046,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +22.697211,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +22.697375,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +22.697539,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +22.697703,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +22.697867,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +22.698031,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +22.698195,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +22.698359,0.035391,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +22.698570,14.692958,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","29",,,"square",186 +22.713574,0.001407,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +22.713585,13.983689,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","28",,,"reduce(float*, float*, float*, int)",193 +22.727673,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +22.727689,0.001376,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +23.929074,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +23.929237,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +23.929401,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +23.929565,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +23.929728,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +23.929892,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +23.930057,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +23.930220,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +23.930384,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +23.930548,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +23.930712,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +23.930876,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +23.931040,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +23.931204,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +23.931368,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +23.931532,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +23.931696,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +23.931860,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +23.932024,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +23.932187,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +23.932352,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +23.932515,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +23.932680,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +23.932843,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +23.933007,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +23.933172,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +23.933336,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +23.933500,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +23.933664,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +23.933829,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +23.933994,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +23.934158,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +23.934323,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +23.934487,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +23.934651,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +23.934815,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +23.934979,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +23.935144,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +23.935308,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +23.935473,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +23.935637,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +23.935802,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +23.935967,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +23.936132,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +23.936296,0.166014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +23.936463,0.165885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +23.936630,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +23.936796,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +23.936964,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +23.937130,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +23.937294,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +23.937459,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +23.937624,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +23.937789,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +23.937954,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +23.938118,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +23.938283,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +23.938448,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +23.938614,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +23.938779,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +23.938942,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +23.939106,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +23.939271,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +23.939436,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +23.939600,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +23.939765,0.175453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +23.939942,0.204573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +23.940147,0.209213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +23.940358,0.214204,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +23.940574,0.211933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +23.940787,0.218941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +23.941007,0.215005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +23.941223,0.195101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +23.941420,0.202205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +23.941623,0.204829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +23.941829,0.214749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +23.942045,0.212029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +23.942258,0.206812,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +23.942467,0.208221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +23.942676,0.209885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +23.942887,0.196253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +23.943085,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +23.943250,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +23.943416,0.178781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +23.943596,0.202525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +23.943800,0.200797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +23.944002,0.205469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +23.944208,0.196477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +23.944406,0.200989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +23.944608,0.202428,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +23.944812,0.184606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +23.944997,0.199164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +23.945198,0.204157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +23.945403,0.200893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +23.945605,0.205245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +23.945812,0.205661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +23.946018,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +23.946212,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +23.946376,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +23.946540,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +23.946705,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +23.946871,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +23.947036,0.165822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +23.947204,0.168253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +23.947373,0.165758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +23.947540,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +23.947705,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +23.947869,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +23.948033,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +23.948197,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +23.948361,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +23.948526,0.189661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +23.948717,0.197597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +23.948916,0.197085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +23.949114,0.195293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +23.949311,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +23.949497,0.197661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +23.949696,0.191581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +23.949889,0.191421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +23.950081,0.198173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +23.950281,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +23.950473,0.188606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +23.950663,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +23.950827,0.193245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +23.951021,0.198301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +23.951221,0.197341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +23.951419,0.204221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +23.951625,0.194749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +23.951821,0.196637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +23.952019,0.194109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +23.952214,0.198813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +23.952414,0.201117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +23.952616,0.198940,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +23.952817,0.201917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +23.953020,0.178302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +23.953200,0.183133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +23.953384,0.188125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +23.953573,0.183997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +23.953759,0.183549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +23.953943,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +23.954127,0.186653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +23.954315,0.184286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +23.954500,0.191517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +23.954693,0.195485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +23.954890,0.195389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +23.955087,0.198269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +23.955286,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +23.955469,0.186365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +23.955657,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +23.955844,0.192541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +23.956038,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +23.956226,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +23.956414,0.108703,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +23.956844,15.178231,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","30",,,"square",205 +23.957303,0.069471,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +23.957440,0.182590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +23.957623,0.187549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +23.957812,0.184317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +23.957998,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +23.958183,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +23.958368,0.186461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +23.958556,0.183710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +23.958741,0.181918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +23.958924,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +23.959111,0.183197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +23.959295,0.184157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +23.959480,0.184125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +23.959666,0.180478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +23.959847,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +23.960033,0.185757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +23.960220,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +23.960408,0.192541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +23.960602,0.189021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +23.960792,0.187901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +23.960981,0.182589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +23.961165,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +23.961351,0.184446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +23.961537,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +23.961724,0.185181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +23.961911,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +23.962095,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +23.962283,0.165726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +23.962449,0.178237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +23.962629,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +23.962812,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +23.962997,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +23.963179,0.177534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +23.963358,0.186365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +23.963546,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +23.963732,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +23.963914,0.182941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +23.964099,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +23.964287,0.181022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +23.964470,0.179037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +23.964650,0.182589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +23.964834,0.184285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +23.965019,0.184669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +23.965205,0.188925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +23.965395,0.177310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +23.965574,0.174653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +23.965750,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +23.965931,0.178749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +23.966111,0.182942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +23.966295,0.183966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +23.966480,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +23.966664,0.180797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +23.966846,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +23.967029,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +23.967214,0.184158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +23.967400,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +23.967581,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +23.967764,0.183133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +23.967948,0.181021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +23.968130,0.178174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +23.968310,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +23.968492,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +23.968680,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +23.968865,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +23.969052,0.197437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +23.969251,0.202717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +23.969455,0.191805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +23.969648,0.195773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +23.969845,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +23.970037,0.194749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +23.970233,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +23.970426,0.188829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +23.970616,0.200445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +23.970817,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +23.971011,0.191805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +23.971204,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +23.971368,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +23.971532,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +23.971696,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +23.971861,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +23.972025,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +23.972189,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +23.972354,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +23.972517,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +23.972681,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +23.972846,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +23.973010,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +23.973174,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +23.973338,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +23.973502,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +23.973666,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +23.973831,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +23.973995,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +23.974160,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +23.974324,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +23.974488,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +23.974652,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +23.974816,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +23.974980,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +23.975144,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +23.975308,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +23.975473,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +23.975638,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +23.975801,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +23.975965,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +23.976130,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +23.976294,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +23.976458,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +23.976622,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +23.976786,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +23.976950,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +23.977114,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +23.977279,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +23.977443,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +23.977607,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +23.977771,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +23.977935,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +23.978099,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +23.978263,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +23.978427,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +23.978592,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +23.978756,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +23.978920,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +23.979084,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +23.979248,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +23.979412,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +23.979577,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +23.979741,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +23.979905,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +23.980069,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +23.980234,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +23.980398,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +23.980561,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +23.980725,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +23.980890,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +23.981054,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +23.981218,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +23.981382,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +23.981546,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +23.981710,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +23.981875,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +23.982039,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +23.982203,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +23.982367,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +23.982531,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +23.982696,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +23.982860,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +23.983024,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +23.983188,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +23.983352,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +23.983517,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +23.983681,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +23.983845,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +23.984010,0.035360,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +23.984284,14.709182,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","31",,,"square",211 +23.999347,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +23.999357,13.995273,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","30",,,"reduce(float*, float*, float*, int)",218 +24.013476,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +24.013493,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +25.190332,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +25.190496,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +25.190660,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +25.190824,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +25.190989,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +25.191152,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +25.191316,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +25.191480,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +25.191644,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +25.191808,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +25.191973,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +25.192137,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +25.192301,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +25.192464,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +25.192628,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +25.192792,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +25.192956,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +25.193120,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +25.193285,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +25.193448,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +25.193612,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +25.193776,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +25.193940,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +25.194104,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +25.194268,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +25.194431,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +25.194596,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +25.194760,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +25.194924,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +25.195088,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +25.195254,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +25.195417,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +25.195582,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +25.195746,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +25.195911,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +25.196075,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +25.196240,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +25.196404,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +25.196568,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +25.196733,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +25.196897,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +25.197061,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +25.197226,0.165022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +25.197393,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +25.197557,0.165374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +25.197724,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +25.197889,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +25.198053,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +25.198217,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +25.198382,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +25.198546,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +25.198710,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +25.198875,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +25.199039,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +25.199204,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +25.199368,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +25.199533,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +25.199697,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +25.199861,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +25.200026,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +25.200190,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +25.200354,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +25.200519,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +25.200684,0.184797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +25.200870,0.200029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +25.201071,0.212093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +25.201285,0.205405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +25.201491,0.224892,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +25.201717,0.215741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +25.201934,0.207645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +25.202143,0.194941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +25.202339,0.206877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +25.202548,0.207356,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +25.202756,0.211869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +25.202970,0.211741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +25.203183,0.204829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +25.203389,0.208253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +25.203598,0.219164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +25.203819,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +25.204001,0.164894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +25.204167,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +25.204332,0.189437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +25.204522,0.198845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +25.204722,0.202269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +25.204926,0.206877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +25.205134,0.205981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +25.205341,0.202493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +25.205545,0.203133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +25.205749,0.191422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +25.205942,0.204956,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +25.206148,0.207293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +25.206357,0.209661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +25.206568,0.200445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +25.206770,0.202077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +25.206973,0.200605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +25.207175,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +25.207339,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +25.207503,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +25.207667,0.165309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +25.207834,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +25.207999,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +25.208165,0.168190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +25.208334,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +25.208500,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +25.208664,0.165661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +25.208831,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +25.208995,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +25.209159,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +25.209323,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +25.209488,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +25.209654,0.194109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +25.209850,0.191709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +25.210042,0.196989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +25.210241,0.189373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +25.210431,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +25.210620,0.196349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +25.210817,0.194077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +25.211012,0.194109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +25.211208,0.189789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +25.211399,0.191901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +25.211592,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +25.211775,0.168061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +25.211945,0.196989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +25.212143,0.196573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +25.212341,0.198141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +25.212540,0.201149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +25.212743,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +25.212938,0.197181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +25.213136,0.201469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +25.213339,0.199325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +25.213539,0.200221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +25.213741,0.200381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +25.213943,0.202013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +25.214146,0.176125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +25.214323,0.175485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +25.214500,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +25.214679,0.175198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +25.214856,0.177629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +25.215035,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +25.215215,0.179965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +25.215396,0.176510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +25.215574,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +25.215749,0.179645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +25.215930,0.177597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +25.216109,0.174878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +25.216285,0.173085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +25.216459,0.176861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +25.216637,0.177854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +25.216817,0.174813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +25.216993,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +25.217172,0.176925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +25.217351,0.176766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +25.217528,0.102462,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +25.218055,15.173687,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","32",,,"square",230 +25.218486,0.069503,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +25.218618,0.179325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +25.218799,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +25.218990,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +25.219169,0.176094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +25.219346,0.177821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +25.219525,0.181725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +25.219708,0.178461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +25.219888,0.178494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +25.220068,0.177021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +25.220246,0.175869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +25.220423,0.175517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +25.220600,0.179230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +25.220780,0.175613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +25.220957,0.189725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +25.221148,0.178333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +25.221328,0.178974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +25.221508,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +25.221689,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +25.221872,0.178813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +25.222052,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +25.222240,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +25.222422,0.177054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +25.222600,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +25.222783,0.181885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +25.222966,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +25.223148,0.177182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +25.223327,0.177885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +25.223506,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +25.223688,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +25.223852,0.175197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +25.224029,0.175293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +25.224205,0.175869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +25.224382,0.173982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +25.224558,0.174813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +25.224734,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +25.224915,0.177597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +25.225094,0.176062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +25.225271,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +25.225450,0.177117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +25.225629,0.175998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +25.225806,0.173693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +25.225981,0.174621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +25.226156,0.176221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +25.226334,0.175614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +25.226511,0.178397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +25.226690,0.181309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +25.226873,0.176829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +25.227051,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +25.227217,0.176477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +25.227395,0.176221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +25.227572,0.173182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +25.227747,0.173789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +25.227922,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +25.228104,0.175934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +25.228281,0.173117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +25.228455,0.176061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +25.228633,0.177373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +25.228811,0.176446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +25.228989,0.174685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +25.229165,0.174493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +25.229340,0.171294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +25.229513,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +25.229696,0.177117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +25.229874,0.175101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +25.230050,0.173118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +25.230225,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +25.230405,0.179485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +25.230586,0.178173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +25.230766,0.195485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +25.230962,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +25.231153,0.196157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +25.231350,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +25.231540,0.191678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +25.231733,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +25.231923,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +25.232114,0.191965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +25.232307,0.189437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +25.232498,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +25.232691,0.191837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +25.232884,0.169373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +25.233055,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +25.233219,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +25.233383,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +25.233547,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +25.233711,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +25.233875,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +25.234039,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +25.234203,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +25.234367,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +25.234531,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +25.234695,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +25.234859,0.171710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +25.235032,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +25.235196,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +25.235360,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +25.235524,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +25.235689,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +25.235853,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +25.236017,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +25.236181,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +25.236346,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +25.236510,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +25.236674,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +25.236838,0.171325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +25.237011,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +25.237175,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +25.237339,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +25.237504,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +25.237669,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +25.237833,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +25.237997,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +25.238160,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +25.238325,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +25.238489,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +25.238653,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +25.238817,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +25.238990,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +25.239155,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +25.239318,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +25.239482,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +25.239647,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +25.239811,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +25.239975,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +25.240139,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +25.240304,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +25.240468,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +25.240632,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +25.240796,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +25.240961,0.171741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +25.241133,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +25.241298,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +25.241462,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +25.241626,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +25.241790,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +25.241954,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +25.242118,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +25.242282,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +25.242446,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +25.242610,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +25.242774,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +25.242939,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +25.243103,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +25.243267,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +25.243431,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +25.243595,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +25.243759,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +25.243924,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +25.244088,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +25.244252,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +25.244417,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +25.244581,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +25.244746,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +25.244910,0.035520,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +25.245181,14.687134,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","33",,,"square",236 +25.260223,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +25.260234,13.989129,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","32",,,"reduce(float*, float*, float*, int)",243 +25.274345,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +25.274363,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +26.518927,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +26.519091,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +26.519255,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +26.519418,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +26.519582,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +26.519746,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +26.519910,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +26.520074,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +26.520238,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +26.520402,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +26.520566,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +26.520730,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +26.520894,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +26.521058,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +26.521222,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +26.521386,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +26.521551,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +26.521714,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +26.521878,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +26.522042,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +26.522206,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +26.522370,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +26.522534,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +26.522698,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +26.522862,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +26.523026,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +26.523192,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +26.523356,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +26.523520,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +26.523684,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +26.523848,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +26.524012,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +26.524177,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +26.524340,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +26.524504,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +26.524668,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +26.524833,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +26.524998,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +26.525162,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +26.525327,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +26.525492,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +26.525656,0.164958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +26.525823,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +26.525989,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +26.526155,0.164766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +26.526321,0.168189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +26.526490,0.165598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +26.526657,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +26.526821,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +26.526985,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +26.527149,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +26.527314,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +26.527479,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +26.527643,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +26.527807,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +26.527971,0.171773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +26.528144,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +26.528310,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +26.528475,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +26.528640,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +26.528804,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +26.528969,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +26.529134,0.173021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +26.529308,0.199005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +26.529508,0.216125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +26.529726,0.214140,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +26.529941,0.210653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +26.530153,0.213309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +26.530368,0.211645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +26.530581,0.205405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +26.530787,0.208829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +26.530998,0.208957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +26.531208,0.207805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +26.531417,0.213852,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +26.531632,0.207837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +26.531841,0.215485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +26.532058,0.217916,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +26.532277,0.201149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +26.532480,0.166974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +26.532648,0.165405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +26.532814,0.193981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +26.533009,0.205853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +26.533217,0.207389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +26.533425,0.211165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +26.533638,0.208316,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +26.533847,0.202845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +26.534051,0.194653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +26.534247,0.189213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +26.534437,0.195549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +26.534634,0.203741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +26.534839,0.202429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +26.535043,0.206493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +26.535251,0.201245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +26.535453,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +26.535640,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +26.535804,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +26.535968,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +26.536134,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +26.536302,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +26.536467,0.167646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +26.536636,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +26.536801,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +26.536966,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +26.537130,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +26.537295,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +26.537459,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +26.537623,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +26.537788,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +26.537953,0.193053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +26.538147,0.198941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +26.538348,0.197949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +26.538547,0.193053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +26.538741,0.189085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +26.538932,0.201373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +26.539134,0.188797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +26.539324,0.190429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +26.539516,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +26.539706,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +26.539897,0.177790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +26.540076,0.188189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +26.540266,0.199645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +26.540467,0.197981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +26.540666,0.202109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +26.540869,0.191869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +26.541063,0.193789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +26.541258,0.203356,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +26.541463,0.195869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +26.541660,0.196605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +26.541858,0.201149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +26.542060,0.197245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +26.542259,0.183901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +26.542444,0.188093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +26.542633,0.187518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +26.542822,0.185597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +26.543009,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +26.543195,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +26.543381,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +26.543570,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +26.543758,0.188157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +26.543947,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +26.544130,0.181662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +26.544313,0.186685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +26.544500,0.180317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +26.544682,0.178781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +26.544862,0.183485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +26.545046,0.185790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +26.545233,0.183870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +26.545418,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +26.545599,0.183133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +26.545783,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +26.545966,0.177566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +26.546145,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +26.546327,0.107006,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +26.546876,15.183287,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","34",,,"square",255 +26.547328,0.068351,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +26.547461,0.186525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +26.547649,0.180638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +26.547831,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +26.548017,0.182941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +26.548201,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +26.548390,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +26.548575,0.182077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +26.548758,0.182942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +26.548942,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +26.549129,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +26.549319,0.192957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +26.549513,0.185981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +26.549701,0.186685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +26.549889,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +26.550073,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +26.550256,0.185694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +26.550443,0.186366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +26.550631,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +26.550815,0.185693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +26.551002,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +26.551186,0.168926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +26.551356,0.175966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +26.551533,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +26.551716,0.183389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +26.551901,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +26.552084,0.179102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +26.552265,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +26.552448,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +26.552634,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +26.552817,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +26.553000,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +26.553183,0.183102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +26.553368,0.177021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +26.553546,0.188029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +26.553735,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +26.553917,0.181853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +26.554100,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +26.554290,0.180062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +26.554471,0.168893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +26.554642,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +26.554824,0.179101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +26.555005,0.178654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +26.555185,0.177021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +26.555363,0.180093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +26.555544,0.176989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +26.555722,0.180510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +26.555904,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +26.556086,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +26.556272,0.180349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +26.556453,0.182493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +26.556637,0.181790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +26.556820,0.183197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +26.557005,0.178013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +26.557184,0.180189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +26.557365,0.186301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +26.557553,0.181374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +26.557736,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +26.557921,0.205981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +26.558129,0.195101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +26.558325,0.193885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +26.558520,0.194685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +26.558716,0.199549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +26.558917,0.192189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +26.559110,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +26.559302,0.193693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +26.559497,0.200125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +26.559698,0.201213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +26.559901,0.198493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +26.560100,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +26.560265,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +26.560429,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +26.560593,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +26.560757,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +26.560921,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +26.561085,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +26.561249,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +26.561414,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +26.561578,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +26.561742,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +26.561906,0.171326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +26.562079,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +26.562243,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +26.562407,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +26.562571,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +26.562735,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +26.562899,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +26.563064,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +26.563228,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +26.563392,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +26.563557,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +26.563721,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +26.563884,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +26.564049,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +26.564213,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +26.564378,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +26.564542,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +26.564706,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +26.564870,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +26.565034,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +26.565198,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +26.565361,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +26.565526,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +26.565691,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +26.565855,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +26.566019,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +26.566183,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +26.566347,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +26.566511,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +26.566675,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +26.566840,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +26.567004,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +26.567169,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +26.567332,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +26.567496,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +26.567661,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +26.567825,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +26.567989,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +26.568153,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +26.568317,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +26.568481,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +26.568645,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +26.568810,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +26.568974,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +26.569138,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +26.569302,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +26.569466,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +26.569630,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +26.569794,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +26.569958,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +26.570122,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +26.570287,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +26.570451,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +26.570615,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +26.570779,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +26.570944,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +26.571108,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +26.571272,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +26.571436,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +26.571601,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +26.571765,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +26.571929,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +26.572093,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +26.572257,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +26.572422,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +26.572586,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +26.572751,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +26.572915,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +26.573078,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +26.573243,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +26.573406,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +26.573571,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +26.573734,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +26.573898,0.035296,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +26.574036,14.700127,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","35",,,"square",261 +26.589147,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +26.589158,13.982121,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","34",,,"reduce(float*, float*, float*, int)",268 +26.603360,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +26.603384,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +27.766831,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +27.766994,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +27.767158,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +27.767322,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +27.767486,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +27.767650,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +27.767814,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +27.767978,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +27.768142,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +27.768305,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +27.768469,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +27.768633,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +27.768797,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +27.768961,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +27.769125,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +27.769289,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +27.769454,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +27.769618,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +27.769781,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +27.769946,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +27.770110,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +27.770274,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +27.770438,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +27.770601,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +27.770765,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +27.770930,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +27.771094,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +27.771258,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +27.771422,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +27.771586,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +27.771751,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +27.771915,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +27.772080,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +27.772244,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +27.772408,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +27.772573,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +27.772738,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +27.772902,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +27.773066,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +27.773231,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +27.773395,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +27.773559,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +27.773726,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +27.773891,0.167230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +27.774060,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +27.774226,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +27.774390,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +27.774556,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +27.774720,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +27.774885,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +27.775049,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +27.775214,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +27.775378,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +27.775543,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +27.775707,0.165694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +27.775874,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +27.776040,0.165822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +27.776207,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +27.776372,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +27.776537,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +27.776701,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +27.776866,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +27.777031,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +27.777196,0.194557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +27.777392,0.203036,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +27.777596,0.210845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +27.777808,0.213373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +27.778022,0.212925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +27.778237,0.206172,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +27.778444,0.205245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +27.778650,0.209853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +27.778862,0.223357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +27.779086,0.209661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +27.779297,0.208957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +27.779507,0.205437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +27.779714,0.202589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +27.779918,0.201405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +27.780120,0.211484,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +27.780333,0.180446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +27.780515,0.165245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +27.780681,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +27.780847,0.196061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +27.781045,0.202141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +27.781248,0.209213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +27.781459,0.201437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +27.781661,0.200893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +27.781863,0.208797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +27.782073,0.202717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +27.782277,0.190558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +27.782469,0.203612,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +27.782674,0.205181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +27.782880,0.205533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +27.783087,0.205565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +27.783294,0.203901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +27.783499,0.206397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +27.783707,0.166685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +27.783874,0.171613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +27.784047,0.165118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +27.784213,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +27.784380,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +27.784545,0.168701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +27.784715,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +27.784881,0.173501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +27.785056,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +27.785222,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +27.785386,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +27.785551,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +27.785715,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +27.785880,0.171742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +27.786053,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +27.786219,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +27.786408,0.199101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +27.786608,0.192957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +27.786803,0.198365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +27.787002,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +27.787187,0.194141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +27.787382,0.191549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +27.787575,0.187773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +27.787764,0.192957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +27.787958,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +27.788150,0.180830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +27.788332,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +27.788514,0.197341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +27.788712,0.196093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +27.788910,0.202333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +27.789113,0.194589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +27.789309,0.190685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +27.789501,0.199964,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +27.789702,0.193950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +27.789898,0.199005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +27.790098,0.202845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +27.790302,0.197949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +27.790501,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +27.790682,0.180830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +27.790864,0.183901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +27.791050,0.183549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +27.791234,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +27.791419,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +27.791608,0.188093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +27.791797,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +27.791986,0.182142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +27.792169,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +27.792353,0.178589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +27.792533,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +27.792721,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +27.792904,0.178366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +27.793083,0.185181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +27.793270,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +27.793457,0.183997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +27.793642,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +27.793826,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +27.794008,0.181214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +27.794190,0.104990,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +27.794738,15.136472,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","36",,,"square",280 +27.795208,0.077919,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +27.795364,0.196221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +27.795562,0.188413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +27.795751,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +27.795940,0.195741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +27.796137,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +27.796324,0.181021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +27.796507,0.182077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +27.796690,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +27.796875,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +27.797067,0.184862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +27.797253,0.181757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +27.797436,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +27.797624,0.187133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +27.797812,0.185885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +27.797999,0.189757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +27.798190,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +27.798382,0.191517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +27.798575,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +27.798764,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +27.798954,0.184734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +27.799139,0.196925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +27.799338,0.186877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +27.799526,0.192125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +27.799719,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +27.799908,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +27.800095,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +27.800286,0.187005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +27.800474,0.178365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +27.800653,0.168350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +27.800823,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +27.801006,0.182301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +27.801190,0.190877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +27.801382,0.185757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +27.801569,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +27.801752,0.192509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +27.801946,0.184734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +27.802132,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +27.802315,0.181533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +27.802498,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +27.802683,0.186909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +27.802872,0.179230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +27.803052,0.183326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +27.803237,0.179005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +27.803417,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +27.803602,0.186493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +27.803789,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +27.803975,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +27.804163,0.174238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +27.804339,0.182557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +27.804523,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +27.804704,0.184157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +27.804890,0.178910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +27.805070,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +27.805253,0.179005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +27.805433,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +27.805616,0.181725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +27.805799,0.184509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +27.805984,0.182238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +27.806168,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +27.806352,0.182301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +27.806535,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +27.806723,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +27.806904,0.181022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +27.807086,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +27.807268,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +27.807451,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +27.807639,0.193917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +27.807834,0.189021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +27.808025,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +27.808220,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +27.808415,0.192605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +27.808609,0.189661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +27.808800,0.190397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +27.808991,0.196477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +27.809189,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +27.809382,0.198717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +27.809583,0.190269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +27.809774,0.179134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +27.809954,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +27.810118,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +27.810282,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +27.810447,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +27.810611,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +27.810775,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +27.810939,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +27.811103,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +27.811267,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +27.811432,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +27.811596,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +27.811760,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +27.811924,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +27.812088,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +27.812252,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +27.812417,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +27.812581,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +27.812746,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +27.812910,0.171805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +27.813083,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +27.813248,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +27.813412,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +27.813576,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +27.813740,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +27.813905,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +27.814069,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +27.814233,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +27.814398,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +27.814562,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +27.814727,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +27.814890,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +27.815055,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +27.815219,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +27.815383,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +27.815548,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +27.815712,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +27.815876,0.171965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +27.816049,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +27.816213,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +27.816377,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +27.816541,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +27.816705,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +27.816869,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +27.817033,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +27.817197,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +27.817362,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +27.817526,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +27.817690,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +27.817854,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +27.818019,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +27.818183,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +27.818347,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +27.818511,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +27.818675,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +27.818839,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +27.819004,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +27.819168,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +27.819332,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +27.819496,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +27.819660,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +27.819824,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +27.819988,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +27.820153,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +27.820317,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +27.820480,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +27.820644,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +27.820808,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +27.820972,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +27.821137,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +27.821301,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +27.821466,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +27.821630,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +27.821794,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +27.821959,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +27.822123,0.035647,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +27.822260,14.711999,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","37",,,"square",286 +27.837320,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +27.837332,14.027402,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","36",,,"reduce(float*, float*, float*, int)",293 +27.851453,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +27.851471,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +29.039142,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +29.039306,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +29.039470,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +29.039633,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +29.039797,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +29.039961,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +29.040124,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +29.040288,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +29.040452,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +29.040616,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +29.040780,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +29.040944,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +29.041108,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +29.041272,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +29.041436,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +29.041600,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +29.041764,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +29.041928,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +29.042091,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +29.042255,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +29.042420,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +29.042583,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +29.042747,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +29.042911,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +29.043075,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +29.043239,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +29.043403,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +29.043567,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +29.043732,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +29.043895,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +29.044060,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +29.044223,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +29.044388,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +29.044552,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +29.044716,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +29.044880,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +29.045045,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +29.045210,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +29.045374,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +29.045538,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +29.045702,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +29.045867,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +29.046031,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +29.046195,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +29.046359,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +29.046524,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +29.046688,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +29.046852,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +29.047016,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +29.047180,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +29.047345,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +29.047509,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +29.047673,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +29.047837,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +29.048001,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +29.048165,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +29.048329,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +29.048495,0.199261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +29.048696,0.207357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +29.048904,0.215933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +29.049122,0.207997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +29.049331,0.211228,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +29.049543,0.213341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +29.049758,0.209181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +29.049969,0.198109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +29.050168,0.206205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +29.050375,0.209948,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +29.050587,0.214429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +29.050802,0.219773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +29.051023,0.209212,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +29.051233,0.211453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +29.051446,0.212829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +29.051660,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +29.051839,0.166910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +29.052008,0.175421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +29.052184,0.209053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +29.052394,0.201885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +29.052598,0.202236,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +29.052801,0.212765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +29.053015,0.206141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +29.053223,0.204605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +29.053429,0.197085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +29.053627,0.201245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +29.053829,0.210556,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +29.054041,0.216861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +29.054259,0.207613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +29.054468,0.206301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +29.054676,0.203037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +29.054880,0.173053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +29.055054,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +29.055221,0.166046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +29.055388,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +29.055553,0.169790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +29.055723,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +29.055890,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +29.056054,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +29.056221,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +29.056385,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +29.056549,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +29.056713,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +29.056878,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +29.057042,0.166334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +29.057210,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +29.057383,0.195741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +29.057580,0.189373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +29.057771,0.197277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +29.057969,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +29.058158,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +29.058348,0.192349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +29.058541,0.187422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +29.058730,0.196477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +29.058928,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +29.059121,0.191645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +29.059314,0.175037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +29.059490,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +29.059655,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +29.059819,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +29.059983,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +29.060147,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +29.060312,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +29.060476,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +29.060640,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +29.060804,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +29.060969,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +29.061133,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +29.061297,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +29.061461,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +29.061625,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +29.061789,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +29.061954,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +29.062118,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +29.062282,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +29.062446,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +29.062611,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +29.062775,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +29.062940,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +29.063104,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +29.063268,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +29.063432,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +29.063596,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +29.063760,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +29.063924,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +29.064088,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +29.064252,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +29.064416,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +29.064580,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +29.064744,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +29.064908,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +29.065073,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +29.065237,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +29.065401,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +29.065565,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +29.065729,0.096159,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +29.066045,15.269751,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","38",,,"square",305 +29.066352,0.061631,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +29.066460,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +29.066625,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +29.066788,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +29.066952,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +29.067116,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +29.067279,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +29.067443,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +29.067607,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +29.067770,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +29.067934,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +29.068098,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +29.068262,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +29.068426,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +29.068590,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +29.068754,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +29.068917,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +29.069081,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +29.069245,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +29.069408,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +29.069572,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +29.069736,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +29.069900,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +29.070064,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +29.070228,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +29.070392,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +29.070556,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +29.070720,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +29.070884,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +29.071049,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +29.071213,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +29.071378,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +29.071542,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +29.071706,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +29.071870,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +29.072035,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +29.072199,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +29.072363,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +29.072527,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +29.072691,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +29.072856,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +29.073019,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +29.073184,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +29.073348,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +29.073512,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +29.073676,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +29.073840,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +29.074004,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +29.074169,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +29.074332,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +29.074497,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +29.074661,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +29.074825,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +29.074990,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +29.075154,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +29.075318,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +29.075483,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +29.075647,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +29.075812,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +29.075976,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +29.076140,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +29.076304,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +29.076469,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +29.076633,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +29.076797,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +29.076961,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +29.077125,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +29.077289,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +29.077453,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +29.077617,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +29.077781,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +29.077945,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +29.078109,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +29.078273,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +29.078437,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +29.078601,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +29.078765,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +29.078929,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +29.079093,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +29.079257,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +29.079421,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +29.079585,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +29.079749,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +29.079913,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +29.080078,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +29.080242,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +29.080406,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +29.080570,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +29.080734,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +29.080898,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +29.081062,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +29.081226,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +29.081390,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +29.081554,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +29.081718,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +29.081883,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +29.082047,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +29.082212,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +29.082376,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +29.082540,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +29.082705,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +29.082868,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +29.083033,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +29.083197,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +29.083362,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +29.083526,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +29.083690,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +29.083854,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +29.084018,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +29.084182,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +29.084347,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +29.084511,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +29.084676,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +29.084840,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +29.085004,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +29.085168,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +29.085332,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +29.085496,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +29.085660,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +29.085824,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +29.085989,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +29.086153,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +29.086317,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +29.086481,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +29.086645,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +29.086810,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +29.086974,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +29.087138,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +29.087303,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +29.087467,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +29.087631,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +29.087795,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +29.087960,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +29.088124,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +29.088288,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +29.088452,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +29.088616,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +29.088780,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +29.088945,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +29.089109,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +29.089273,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +29.089437,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +29.089601,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +29.089765,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +29.089930,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +29.090094,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +29.090258,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +29.090422,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +29.090586,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +29.090750,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +29.090915,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +29.091080,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +29.091244,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +29.091408,0.035359,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +29.091515,14.694719,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","39",,,"square",311 +29.106519,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +29.106530,13.990154,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","38",,,"reduce(float*, float*, float*, int)",318 +29.120636,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +29.120655,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +30.305113,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +30.305277,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +30.305441,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +30.305605,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +30.305768,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +30.305933,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +30.306096,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +30.306260,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +30.306424,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +30.306588,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +30.306752,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +30.306916,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +30.307080,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +30.307244,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +30.307408,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +30.307572,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +30.307736,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +30.307900,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +30.308064,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +30.308228,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +30.308392,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +30.308556,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +30.308720,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +30.308884,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +30.309049,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +30.309212,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +30.309377,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +30.309542,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +30.309707,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +30.309871,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +30.310035,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +30.310199,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +30.310363,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +30.310527,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +30.310691,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +30.310855,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +30.311020,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +30.311185,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +30.311349,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +30.311514,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +30.311679,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +30.311843,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +30.312008,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +30.312173,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +30.312337,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +30.312501,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +30.312666,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +30.312831,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +30.312995,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +30.313159,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +30.313323,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +30.313487,0.193277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +30.313682,0.207484,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +30.313891,0.214589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +30.314107,0.216829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +30.314325,0.212988,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +30.314539,0.218877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +30.314759,0.210141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +30.314970,0.208669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +30.315180,0.220284,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +30.315402,0.212381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +30.315615,0.218269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +30.315835,0.213884,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +30.316050,0.209245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +30.316260,0.204317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +30.316466,0.221724,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +30.316689,0.176670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +30.316867,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +30.317033,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +30.317199,0.199933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +30.317400,0.205692,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +30.317607,0.210429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +30.317819,0.205149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +30.318025,0.208669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +30.318235,0.212157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +30.318449,0.202972,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +30.318653,0.192349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +30.318846,0.210141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +30.319058,0.207677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +30.319267,0.216637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +30.319485,0.218044,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +30.319704,0.209533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +30.319915,0.206301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +30.320122,0.171933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +30.320296,0.168158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +30.320465,0.166717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +30.320633,0.167837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +30.320802,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +30.320968,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +30.321134,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +30.321299,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +30.321463,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +30.321627,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +30.321791,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +30.321956,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +30.322122,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +30.322286,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +30.322452,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +30.322616,0.181725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +30.322800,0.198813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +30.323000,0.191069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +30.323192,0.196605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +30.323390,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +30.323578,0.194845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +30.323774,0.194685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +30.323970,0.191613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +30.324163,0.193021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +30.324357,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +30.324551,0.201949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +30.324754,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +30.324918,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +30.325082,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +30.325246,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +30.325411,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +30.325575,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +30.325740,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +30.325904,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +30.326068,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +30.326232,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +30.326396,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +30.326560,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +30.326724,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +30.326888,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +30.327052,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +30.327217,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +30.327381,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +30.327545,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +30.327709,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +30.327873,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +30.328037,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +30.328202,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +30.328366,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +30.328530,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +30.328694,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +30.328859,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +30.329023,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +30.329187,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +30.329351,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +30.329515,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +30.329679,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +30.329843,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +30.330007,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +30.330170,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +30.330334,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +30.330498,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +30.330663,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +30.330827,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +30.330991,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +30.331155,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +30.331319,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +30.331483,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +30.331648,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +30.331812,0.096030,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +30.332312,15.218775,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","40",,,"square",330 +30.332687,0.061599,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +30.332798,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +30.332962,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +30.333126,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +30.333290,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +30.333454,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +30.333617,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +30.333781,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +30.333945,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +30.334109,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +30.334273,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +30.334437,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +30.334600,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +30.334764,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +30.334928,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +30.335092,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +30.335255,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +30.335419,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +30.335583,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +30.335747,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +30.335911,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +30.336074,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +30.336238,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +30.336402,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +30.336566,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +30.336730,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +30.336894,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +30.337058,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +30.337222,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +30.337386,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +30.337550,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +30.337714,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +30.337879,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +30.338043,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +30.338207,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +30.338371,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +30.338535,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +30.338700,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +30.338864,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +30.339028,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +30.339192,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +30.339357,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +30.339521,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +30.339685,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +30.339849,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +30.340014,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +30.340178,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +30.340342,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +30.340506,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +30.340670,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +30.340834,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +30.340999,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +30.341163,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +30.341327,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +30.341491,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +30.341655,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +30.341818,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +30.341983,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +30.342147,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +30.342311,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +30.342476,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +30.342640,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +30.342804,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +30.342969,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +30.343133,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +30.343297,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +30.343462,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +30.343626,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +30.343789,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +30.343954,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +30.344117,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +30.344281,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +30.344445,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +30.344609,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +30.344773,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +30.344937,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +30.345100,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +30.345264,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +30.345428,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +30.345592,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +30.345756,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +30.345920,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +30.346084,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +30.346248,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +30.346412,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +30.346576,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +30.346741,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +30.346905,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +30.347069,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +30.347233,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +30.347398,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +30.347561,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +30.347725,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +30.347890,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +30.348054,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +30.348218,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +30.348382,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +30.348547,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +30.348711,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +30.348876,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +30.349040,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +30.349205,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +30.349369,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +30.349533,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +30.349698,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +30.349862,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +30.350026,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +30.350190,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +30.350354,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +30.350518,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +30.350682,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +30.350846,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +30.351011,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +30.351175,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +30.351339,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +30.351503,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +30.351668,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +30.351832,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +30.351996,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +30.352159,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +30.352323,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +30.352487,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +30.352652,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +30.352816,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +30.352980,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +30.353144,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +30.353308,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +30.353472,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +30.353636,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +30.353800,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +30.353965,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +30.354129,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +30.354293,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +30.354457,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +30.354621,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +30.354785,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +30.354949,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +30.355114,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +30.355278,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +30.355442,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +30.355606,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +30.355770,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +30.355934,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +30.356099,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +30.356264,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +30.356428,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +30.356592,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +30.356756,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +30.356921,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +30.357085,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +30.357250,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +30.357414,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +30.357579,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +30.357743,0.035296,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +30.357931,14.711582,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","41",,,"square",336 +30.373045,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +30.373055,13.989162,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","40",,,"reduce(float*, float*, float*, int)",343 +30.387195,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +30.387213,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +31.576951,0.171133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +31.577123,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +31.577287,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +31.577451,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +31.577615,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +31.577779,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +31.577943,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +31.578106,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +31.578270,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +31.578434,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +31.578598,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +31.578762,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +31.578926,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +31.579090,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +31.579254,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +31.579417,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +31.579581,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +31.579746,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +31.579909,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +31.580073,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +31.580237,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +31.580401,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +31.580566,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +31.580729,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +31.580894,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +31.581058,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +31.581222,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +31.581385,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +31.581549,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +31.581713,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +31.581878,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +31.582043,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +31.582207,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +31.582372,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +31.582536,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +31.582700,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +31.582865,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +31.583030,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +31.583194,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +31.583359,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +31.583523,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +31.583688,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +31.583853,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +31.584017,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +31.584182,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +31.584346,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +31.584510,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +31.584674,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +31.584838,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +31.585025,0.209501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +31.585236,0.206717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +31.585444,0.218781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +31.585664,0.211356,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +31.585877,0.209949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +31.586088,0.210685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +31.586300,0.203229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +31.586504,0.206845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +31.586712,0.214108,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +31.586928,0.214589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +31.587143,0.215133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +31.587360,0.205628,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +31.587567,0.208381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +31.587776,0.210077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +31.587988,0.189277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +31.588178,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +31.588343,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +31.588509,0.177149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +31.588687,0.198461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +31.588887,0.213213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +31.589101,0.204349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +31.589307,0.206205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +31.589514,0.211516,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +31.589727,0.206781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +31.589935,0.200317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +31.590137,0.211293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +31.590349,0.213405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +31.590564,0.212700,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +31.590778,0.215901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +31.590995,0.214429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +31.591210,0.208220,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +31.591420,0.177406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +31.591599,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +31.591765,0.170302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +31.591937,0.165822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +31.592104,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +31.592270,0.167646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +31.592438,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +31.592603,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +31.592767,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +31.592931,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +31.593096,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +31.593260,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +31.593426,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +31.593590,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +31.593755,0.169053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +31.593925,0.193501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +31.594120,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +31.594313,0.196605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +31.594511,0.192733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +31.594705,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +31.594891,0.199741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +31.595092,0.191389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +31.595284,0.188285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +31.595474,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +31.595665,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +31.595859,0.175166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +31.596035,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +31.596200,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +31.596365,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +31.596529,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +31.596693,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +31.596857,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +31.597021,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +31.597185,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +31.597349,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +31.597513,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +31.597677,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +31.597842,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +31.598006,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +31.598170,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +31.598334,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +31.598498,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +31.598662,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +31.598827,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +31.598991,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +31.599154,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +31.599319,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +31.599483,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +31.599647,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +31.599811,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +31.599976,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +31.600140,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +31.600304,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +31.600469,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +31.600632,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +31.600796,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +31.600960,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +31.601124,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +31.601288,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +31.601453,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +31.601617,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +31.601781,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +31.601946,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +31.602110,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +31.602275,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +31.602439,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +31.602603,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +31.602768,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +31.602931,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +31.603095,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +31.603259,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +31.603423,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +31.603587,0.095999,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +31.603853,15.267190,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","42",,,"square",355 +31.604230,0.061567,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +31.604373,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +31.604537,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +31.604700,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +31.604864,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +31.605028,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +31.605192,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +31.605355,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +31.605519,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +31.605683,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +31.605847,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +31.606011,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +31.606175,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +31.606340,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +31.606504,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +31.606668,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +31.606832,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +31.606996,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +31.607159,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +31.607323,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +31.607487,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +31.607651,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +31.607815,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +31.607979,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +31.608143,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +31.608307,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +31.608471,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +31.608635,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +31.608799,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +31.608964,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +31.609128,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +31.609293,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +31.609457,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +31.609621,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +31.609785,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +31.609949,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +31.610114,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +31.610278,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +31.610442,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +31.610606,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +31.610770,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +31.610934,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +31.611098,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +31.611263,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +31.611426,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +31.611590,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +31.611754,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +31.611919,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +31.612083,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +31.612247,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +31.612411,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +31.612575,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +31.612740,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +31.612904,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +31.613068,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +31.613232,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +31.613397,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +31.613561,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +31.613725,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +31.613890,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +31.614054,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +31.614218,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +31.614383,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +31.614546,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +31.614710,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +31.614874,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +31.615038,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +31.615202,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +31.615366,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +31.615530,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +31.615694,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +31.615858,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +31.616022,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +31.616186,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +31.616349,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +31.616513,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +31.616677,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +31.616841,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +31.617005,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +31.617169,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +31.617334,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +31.617497,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +31.617661,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +31.617826,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +31.617990,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +31.618154,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +31.618318,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +31.618482,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +31.618646,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +31.618810,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +31.618974,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +31.619138,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +31.619302,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +31.619467,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +31.619631,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +31.619794,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +31.619958,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +31.620122,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +31.620286,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +31.620451,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +31.620614,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +31.620779,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +31.620943,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +31.621107,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +31.621272,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +31.621436,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +31.621600,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +31.621764,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +31.621927,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +31.622092,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +31.622256,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +31.622420,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +31.622584,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +31.622749,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +31.622913,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +31.623077,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +31.623241,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +31.623406,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +31.623570,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +31.623733,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +31.623898,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +31.624062,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +31.624226,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +31.624390,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +31.624555,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +31.624719,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +31.624883,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +31.625047,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +31.625211,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +31.625376,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +31.625540,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +31.625704,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +31.625868,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +31.626032,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +31.626197,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +31.626361,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +31.626525,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +31.626689,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +31.626853,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +31.627017,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +31.627181,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +31.627346,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +31.627510,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +31.627674,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +31.627838,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +31.628003,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +31.628167,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +31.628332,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +31.628496,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +31.628661,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +31.628825,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +31.628989,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +31.629154,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +31.629319,0.035551,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +31.629434,14.723998,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","43",,,"square",361 +31.644528,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +31.644539,14.005193,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","42",,,"reduce(float*, float*, float*, int)",368 +31.658613,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +31.658631,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +32.838922,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +32.839086,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +32.839249,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +32.839413,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +32.839578,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +32.839742,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +32.839905,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +32.840069,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +32.840232,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +32.840396,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +32.840560,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +32.840724,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +32.840888,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +32.841052,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +32.841216,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +32.841380,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +32.841544,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +32.841708,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +32.841872,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +32.842036,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +32.842200,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +32.842364,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +32.842528,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +32.842692,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +32.842856,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +32.843020,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +32.843185,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +32.843350,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +32.843514,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +32.843679,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +32.843843,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +32.844008,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +32.844173,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +32.844337,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +32.844501,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +32.844665,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +32.844830,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +32.844994,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +32.845159,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +32.845323,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +32.845488,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +32.845653,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +32.845818,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +32.845982,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +32.846147,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +32.846311,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +32.846475,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +32.846640,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +32.846804,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +32.846969,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +32.847133,0.172221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +32.847307,0.200637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +32.847509,0.205533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +32.847716,0.217276,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +32.847934,0.217469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +32.848153,0.215997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +32.848370,0.204733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +32.848576,0.203357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +32.848781,0.206365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +32.848988,0.206237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +32.849196,0.212509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +32.849410,0.232316,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +32.849643,0.216093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +32.849861,0.205021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +32.850067,0.209085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +32.850277,0.213852,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +32.850492,0.165534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +32.850659,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +32.850824,0.171518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +32.850997,0.199900,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +32.851198,0.202205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +32.851402,0.203869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +32.851607,0.202365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +32.851810,0.208957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +32.852020,0.198717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +32.852220,0.206365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +32.852428,0.193533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +32.852623,0.202781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +32.852827,0.211773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +32.853040,0.213885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +32.853255,0.209693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +32.853466,0.208253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +32.853675,0.194622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +32.853871,0.169022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +32.854041,0.173629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +32.854216,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +32.854382,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +32.854547,0.165886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +32.854714,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +32.854878,0.164990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +32.855044,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +32.855208,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +32.855373,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +32.855538,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +32.855703,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +32.855868,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +32.856032,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +32.856196,0.177469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +32.856375,0.193277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +32.856570,0.187645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +32.856758,0.196317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +32.856956,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +32.857144,0.196541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +32.857342,0.193053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +32.857536,0.189501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +32.857727,0.189566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +32.857918,0.192254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +32.858112,0.194429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +32.858307,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +32.858472,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +32.858636,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +32.858800,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +32.858965,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +32.859129,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +32.859294,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +32.859458,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +32.859622,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +32.859786,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +32.859951,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +32.860115,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +32.860279,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +32.860443,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +32.860608,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +32.860772,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +32.860936,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +32.861100,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +32.861264,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +32.861428,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +32.861592,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +32.861756,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +32.861920,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +32.862084,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +32.862248,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +32.862412,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +32.862577,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +32.862741,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +32.862906,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +32.863070,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +32.863234,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +32.863398,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +32.863562,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +32.863727,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +32.863891,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +32.864055,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +32.864220,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +32.864384,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +32.864548,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +32.864712,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +32.864877,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +32.865041,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +32.865205,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +32.865369,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +32.865533,0.096286,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +32.865801,15.253271,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","44",,,"square",380 +32.866120,0.061535,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +32.866229,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +32.866393,0.162205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +32.866556,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +32.866720,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +32.866884,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +32.867048,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +32.867212,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +32.867376,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +32.867540,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +32.867704,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +32.867868,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +32.868031,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +32.868196,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +32.868359,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +32.868523,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +32.868687,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +32.868851,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +32.869015,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +32.869179,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +32.869342,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +32.869507,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +32.869671,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +32.869834,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +32.869998,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +32.870162,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +32.870326,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +32.870490,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +32.870654,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +32.870818,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +32.870983,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +32.871147,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +32.871311,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +32.871475,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +32.871639,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +32.871803,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +32.871967,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +32.872131,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +32.872295,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +32.872460,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +32.872624,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +32.872788,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +32.872952,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +32.873116,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +32.873281,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +32.873445,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +32.873610,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +32.873773,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +32.873937,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +32.874101,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +32.874266,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +32.874430,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +32.874594,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +32.874759,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +32.874923,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +32.875087,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +32.875252,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +32.875416,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +32.875580,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +32.875743,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +32.875908,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +32.876072,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +32.876237,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +32.876401,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +32.876565,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +32.876729,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +32.876894,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +32.877058,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +32.877222,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +32.877386,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +32.877551,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +32.877715,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +32.877879,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +32.878043,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +32.878208,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +32.878372,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +32.878536,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +32.878701,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +32.878865,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +32.879029,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +32.879192,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +32.879356,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +32.879520,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +32.879684,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +32.879849,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +32.880013,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +32.880177,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +32.880341,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +32.880504,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +32.880668,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +32.880833,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +32.880996,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +32.881161,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +32.881325,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +32.881489,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +32.881654,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +32.881818,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +32.881983,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +32.882147,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +32.882311,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +32.882475,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +32.882639,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +32.882803,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +32.882968,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +32.883132,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +32.883296,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +32.883460,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +32.883625,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +32.883789,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +32.883953,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +32.884118,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +32.884282,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +32.884446,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +32.884610,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +32.884774,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +32.884938,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +32.885102,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +32.885266,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +32.885430,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +32.885595,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +32.885759,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +32.885923,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +32.886087,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +32.886251,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +32.886415,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +32.886580,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +32.886744,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +32.886908,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +32.887072,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +32.887236,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +32.887400,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +32.887564,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +32.887728,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +32.887892,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +32.888056,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +32.888220,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +32.888385,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +32.888549,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +32.888713,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +32.888877,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +32.889041,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +32.889205,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +32.889369,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +32.889534,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +32.889698,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +32.889863,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +32.890027,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +32.890191,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +32.890355,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +32.890519,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +32.890683,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +32.890847,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +32.891011,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +32.891175,0.035263,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +32.891289,14.693184,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","45",,,"square",386 +32.906345,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +32.906356,14.040330,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","44",,,"reduce(float*, float*, float*, int)",393 +32.920450,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +32.920469,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +34.087804,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +34.087968,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +34.088132,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +34.088295,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +34.088459,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +34.088623,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +34.088787,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +34.088951,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +34.089115,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +34.089279,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +34.089443,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +34.089607,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +34.089771,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +34.089935,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +34.090099,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +34.090263,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +34.090427,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +34.090591,0.162205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +34.090754,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +34.090918,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +34.091083,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +34.091247,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +34.091411,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +34.091575,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +34.091739,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +34.091903,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +34.092067,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +34.092231,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +34.092395,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +34.092559,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +34.092724,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +34.092888,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +34.093052,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +34.093216,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +34.093381,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +34.093545,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +34.093710,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +34.093875,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +34.094039,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +34.094203,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +34.094368,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +34.094533,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +34.094697,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +34.094861,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +34.095025,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +34.095190,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +34.095355,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +34.095519,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +34.095684,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +34.095849,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +34.096013,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +34.096201,0.204157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +34.096407,0.213405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +34.096621,0.217980,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +34.096841,0.222525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +34.097064,0.213789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +34.097279,0.207740,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +34.097488,0.198397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +34.097688,0.212125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +34.097902,0.212125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +34.098115,0.210237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +34.098326,0.212220,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +34.098540,0.212669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +34.098754,0.213149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +34.098968,0.213021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +34.099182,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +34.099364,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +34.099530,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +34.099696,0.188573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +34.099885,0.202333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +34.100089,0.206653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +34.100297,0.214332,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +34.100513,0.206653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +34.100720,0.209213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +34.100931,0.206621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +34.101139,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +34.101333,0.199613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +34.101534,0.211580,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +34.101747,0.213949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +34.101962,0.212253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +34.102176,0.207485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +34.102384,0.210716,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +34.102596,0.168830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +34.102766,0.165437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +34.102933,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +34.103097,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +34.103261,0.167902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +34.103430,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +34.103593,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +34.103757,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +34.103922,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +34.104086,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +34.104251,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +34.104415,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +34.104579,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +34.104743,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +34.104934,0.195997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +34.105131,0.196157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +34.105328,0.191741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +34.105522,0.183005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +34.105706,0.201661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +34.105909,0.188573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +34.106098,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +34.106288,0.190365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +34.106480,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +34.106675,0.177117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +34.106854,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +34.107018,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +34.107182,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +34.107347,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +34.107511,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +34.107676,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +34.107840,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +34.108003,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +34.108167,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +34.108331,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +34.108495,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +34.108659,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +34.108824,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +34.108987,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +34.109151,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +34.109316,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +34.109480,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +34.109644,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +34.109808,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +34.109972,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +34.110136,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +34.110300,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +34.110464,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +34.110628,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +34.110792,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +34.110957,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +34.111121,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +34.111284,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +34.111449,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +34.111613,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +34.111777,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +34.111941,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +34.112105,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +34.112269,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +34.112433,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +34.112598,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +34.112761,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +34.112925,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +34.113089,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +34.113254,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +34.113418,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +34.113582,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +34.113746,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +34.113910,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +34.114074,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +34.114238,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +34.114402,0.095967,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +34.114667,15.257847,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","46",,,"square",405 +34.114954,0.061599,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +34.115061,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +34.115224,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +34.115388,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +34.115552,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +34.115715,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +34.115879,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +34.116043,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +34.116206,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +34.116371,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +34.116535,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +34.116699,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +34.116862,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +34.117027,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +34.117190,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +34.117354,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +34.117518,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +34.117682,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +34.117846,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +34.118010,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +34.118174,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +34.118338,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +34.118502,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +34.118666,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +34.118830,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +34.118994,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +34.119158,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +34.119322,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +34.119486,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +34.119651,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +34.119815,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +34.119980,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +34.120144,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +34.120309,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +34.120473,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +34.120637,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +34.120801,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +34.120966,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +34.121129,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +34.121294,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +34.121458,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +34.121622,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +34.121786,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +34.121951,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +34.122115,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +34.122279,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +34.122443,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +34.122607,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +34.122771,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +34.122935,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +34.123099,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +34.123264,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +34.123428,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +34.123593,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +34.123757,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +34.123922,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +34.124086,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +34.124250,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +34.124414,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +34.124578,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +34.124742,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +34.124906,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +34.125071,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +34.125234,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +34.125398,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +34.125562,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +34.125726,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +34.125890,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +34.126055,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +34.126219,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +34.126383,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +34.126547,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +34.126711,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +34.126876,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +34.127040,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +34.127204,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +34.127368,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +34.127533,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +34.127697,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +34.127861,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +34.128025,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +34.128188,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +34.128353,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +34.128517,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +34.128681,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +34.128845,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +34.129010,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +34.129174,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +34.129338,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +34.129502,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +34.129666,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +34.129830,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +34.129994,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +34.130159,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +34.130323,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +34.130487,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +34.130652,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +34.130816,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +34.130980,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +34.131145,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +34.131309,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +34.131473,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +34.131637,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +34.131802,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +34.131967,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +34.132130,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +34.132295,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +34.132459,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +34.132623,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +34.132787,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +34.132951,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +34.133115,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +34.133279,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +34.133443,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +34.133607,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +34.133771,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +34.133935,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +34.134099,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +34.134263,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +34.134427,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +34.134591,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +34.134756,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +34.134920,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +34.135084,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +34.135248,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +34.135412,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +34.135576,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +34.135741,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +34.135905,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +34.136069,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +34.136234,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +34.136398,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +34.136562,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +34.136726,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +34.136891,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +34.137054,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +34.137219,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +34.137383,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +34.137547,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +34.137711,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +34.137875,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +34.138039,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +34.138203,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +34.138367,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +34.138532,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +34.138696,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +34.138860,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +34.139024,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +34.139189,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +34.139353,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +34.139517,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +34.139681,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +34.139845,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +34.140009,0.035423,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +34.140120,14.713439,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","47",,,"square",411 +34.155194,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +34.155205,13.982858,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","46",,,"reduce(float*, float*, float*, int)",418 +34.169246,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +34.169266,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +35.325697,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +35.325926,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +35.326159,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +35.326388,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +35.326623,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +35.326852,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +35.327079,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +35.327304,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +35.327532,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +35.327754,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +35.327980,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +35.328204,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +35.328430,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +35.328652,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +35.328873,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +35.329095,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +35.329317,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +35.329544,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +35.329769,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +35.329990,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +35.330211,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +35.330438,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +35.330661,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +35.330884,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +35.331107,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +35.331329,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +35.331559,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +35.331779,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +35.332001,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +35.332222,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +35.332444,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +35.332665,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +35.332886,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +35.333107,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +35.333330,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +35.333557,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +35.333775,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +35.333994,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +35.334214,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +35.334438,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +35.334659,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +35.334877,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +35.335098,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +35.335318,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +35.335542,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +35.335761,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +35.335982,0.172733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +35.336199,0.178653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +35.336451,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +35.336686,0.187677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +35.336924,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +35.337162,0.189085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +35.337396,0.184350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +35.337636,0.180093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +35.337869,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +35.338103,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +35.338340,0.184157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +35.338581,0.184990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +35.338815,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +35.339054,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +35.339288,0.176861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +35.339532,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +35.339739,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +35.339945,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +35.340153,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +35.340362,0.172318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +35.340589,0.174557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +35.340810,0.172062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +35.341036,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +35.341240,0.178973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +35.341436,0.182269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +35.341632,0.177021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +35.341825,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +35.342017,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +35.342219,0.186365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +35.342425,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +35.342630,0.190333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +35.342836,0.188669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +35.343038,0.186397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +35.343241,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +35.343446,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +35.343634,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +35.343822,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +35.344008,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +35.344193,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +35.344380,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +35.344569,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +35.344752,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +35.344936,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +35.345121,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +35.345303,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +35.345491,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +35.345677,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +35.345860,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +35.346045,0.172190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +35.346218,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +35.346382,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +35.346546,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +35.346711,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +35.346877,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +35.347040,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +35.347204,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +35.347368,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +35.347532,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +35.347696,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +35.347861,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +35.348026,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +35.348190,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +35.348354,0.179197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +35.348534,0.197917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +35.348733,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +35.348918,0.193629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +35.349113,0.189118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +35.349303,0.181693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +35.349486,0.189757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +35.349677,0.191325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +35.349870,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +35.350052,0.187677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +35.350241,0.191421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +35.350434,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +35.350617,0.185630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +35.350804,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +35.350971,0.171901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +35.351144,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +35.351308,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +35.351471,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +35.351636,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +35.351800,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +35.351964,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +35.352129,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +35.352293,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +35.352457,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +35.352621,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +35.352784,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +35.352949,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +35.353112,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +35.353276,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +35.353441,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +35.353605,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +35.353769,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +35.353933,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +35.354098,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +35.354262,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +35.354426,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +35.354590,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +35.354755,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +35.354919,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +35.355083,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +35.355248,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +35.355411,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +35.355576,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +35.355740,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +35.355905,0.095902,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +35.356195,15.243927,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","48",,,"square",430 +35.356498,0.061599,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +35.356610,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +35.356773,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +35.356937,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +35.357100,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +35.357264,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +35.357428,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +35.357591,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +35.357755,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +35.357919,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +35.358083,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +35.358246,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +35.358410,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +35.358574,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +35.358738,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +35.358902,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +35.359066,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +35.359230,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +35.359394,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +35.359558,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +35.359722,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +35.359885,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +35.360049,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +35.360213,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +35.360377,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +35.360541,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +35.360705,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +35.360869,0.171325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +35.361041,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +35.361205,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +35.361370,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +35.361534,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +35.361698,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +35.361863,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +35.362027,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +35.362191,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +35.362355,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +35.362520,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +35.362684,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +35.362848,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +35.363012,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +35.363176,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +35.363340,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +35.363505,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +35.363669,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +35.363834,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +35.363998,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +35.364162,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +35.364326,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +35.364490,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +35.364655,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +35.364819,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +35.364983,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +35.365147,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +35.365312,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +35.365476,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +35.365641,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +35.365804,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +35.365968,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +35.366133,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +35.366297,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +35.366461,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +35.366625,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +35.366789,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +35.366953,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +35.367117,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +35.367281,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +35.367445,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +35.367608,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +35.367772,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +35.367936,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +35.368101,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +35.368265,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +35.368429,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +35.368593,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +35.368757,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +35.368921,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +35.369086,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +35.369250,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +35.369414,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +35.369578,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +35.369742,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +35.369906,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +35.370070,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +35.370234,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +35.370399,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +35.370563,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +35.370727,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +35.370891,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +35.371055,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +35.371219,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +35.371383,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +35.371547,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +35.371711,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +35.371875,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +35.372040,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +35.372204,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +35.372368,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +35.372532,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +35.372696,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +35.372861,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +35.373024,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +35.373189,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +35.373353,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +35.373518,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +35.373681,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +35.373845,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +35.374010,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +35.374174,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +35.374338,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +35.374503,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +35.374667,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +35.374831,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +35.374995,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +35.375159,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +35.375323,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +35.375488,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +35.375652,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +35.375816,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +35.375980,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +35.376144,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +35.376308,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +35.376472,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +35.376636,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +35.376800,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +35.376965,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +35.377129,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +35.377293,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +35.377457,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +35.377621,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +35.377785,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +35.377950,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +35.378114,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +35.378278,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +35.378443,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +35.378606,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +35.378771,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +35.378935,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +35.379099,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +35.379263,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +35.379427,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +35.379592,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +35.379756,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +35.379920,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +35.380085,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +35.380249,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +35.380413,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +35.380578,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +35.380741,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +35.380906,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +35.381070,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +35.381235,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +35.381399,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +35.381563,0.035807,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +35.381673,14.691935,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","49",,,"square",436 +35.396709,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +35.396720,13.979914,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","48",,,"reduce(float*, float*, float*, int)",443 +35.410752,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +35.410772,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +36.583935,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +36.584263,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +36.584594,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +36.584913,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +36.585230,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +36.585554,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +36.585871,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +36.586186,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +36.586507,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +36.586820,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +36.587136,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +36.587455,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +36.587771,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +36.588084,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +36.588397,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +36.588716,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +36.589029,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +36.589341,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +36.589662,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +36.589975,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +36.590288,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +36.590608,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +36.590922,0.172862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +36.591201,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +36.591437,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +36.591671,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +36.591905,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +36.592134,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +36.592365,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +36.592599,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +36.592827,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +36.593082,0.165886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +36.593372,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +36.593666,0.166206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +36.593955,0.166014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +36.594244,0.166429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +36.594539,0.174301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +36.594829,0.176157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +36.595196,0.177373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +36.595496,0.175133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +36.595789,0.176669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +36.596089,0.174270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +36.596325,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +36.596549,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +36.596763,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +36.596976,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +36.597191,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +36.597422,0.171901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +36.597654,0.173917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +36.597889,0.171581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +36.598120,0.175614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +36.598356,0.171933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +36.598591,0.172862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +36.598821,0.171261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +36.599051,0.175390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +36.599289,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +36.599530,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +36.599773,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +36.600015,0.184286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +36.600257,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +36.600503,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +36.600733,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +36.600958,0.173053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +36.601179,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +36.601366,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +36.601556,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +36.601740,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +36.601927,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +36.602114,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +36.602299,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +36.602488,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +36.602676,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +36.602865,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +36.603053,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +36.603238,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +36.603431,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +36.603619,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +36.603803,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +36.603990,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +36.604175,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +36.604362,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +36.604553,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +36.604738,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +36.604924,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +36.605111,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +36.605296,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +36.605488,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +36.605672,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +36.605858,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +36.606047,0.180702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +36.606228,0.189469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +36.606419,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +36.606603,0.186461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +36.606791,0.185277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +36.606977,0.195325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +36.607174,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +36.607361,0.197085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +36.607559,0.198941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +36.607759,0.194429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +36.607955,0.194493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +36.608151,0.187805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +36.608340,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +36.608528,0.185470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +36.608715,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +36.608879,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +36.609042,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +36.609206,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +36.609370,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +36.609534,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +36.609697,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +36.609861,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +36.610026,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +36.610190,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +36.610355,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +36.610519,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +36.610684,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +36.610848,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +36.611012,0.172702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +36.611186,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +36.611349,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +36.611514,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +36.611678,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +36.611842,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +36.612006,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +36.612169,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +36.612333,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +36.612497,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +36.612661,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +36.612826,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +36.612990,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +36.613154,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +36.613317,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +36.613482,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +36.613646,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +36.613810,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +36.613974,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +36.614138,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +36.614302,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +36.614466,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +36.614630,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +36.614795,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +36.614959,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +36.615123,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +36.615287,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +36.615450,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +36.615615,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +36.615779,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +36.615943,0.171933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +36.616116,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +36.616281,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +36.616445,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +36.616609,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +36.616773,0.096479,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +36.617045,15.242935,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","50",,,"square",455 +36.617370,0.062239,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +36.617489,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +36.617653,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +36.617818,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +36.617981,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +36.618145,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +36.618309,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +36.618472,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +36.618636,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +36.618800,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +36.618964,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +36.619127,0.162110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +36.619291,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +36.619455,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +36.619619,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +36.619783,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +36.619947,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +36.620111,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +36.620274,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +36.620439,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +36.620602,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +36.620766,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +36.620930,0.171645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +36.621103,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +36.621267,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +36.621431,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +36.621595,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +36.621758,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +36.621922,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +36.622086,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +36.622251,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +36.622415,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +36.622580,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +36.622744,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +36.622908,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +36.623073,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +36.623237,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +36.623402,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +36.623566,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +36.623730,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +36.623894,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +36.624058,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +36.624223,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +36.624387,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +36.624551,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +36.624716,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +36.624880,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +36.625044,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +36.625208,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +36.625372,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +36.625537,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +36.625701,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +36.625865,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +36.626029,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +36.626194,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +36.626358,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +36.626522,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +36.626686,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +36.626850,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +36.627014,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +36.627178,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +36.627342,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +36.627507,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +36.627671,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +36.627835,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +36.627999,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +36.628163,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +36.628327,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +36.628491,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +36.628656,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +36.628819,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +36.628984,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +36.629148,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +36.629312,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +36.629476,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +36.629640,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +36.629804,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +36.629968,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +36.630131,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +36.630296,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +36.630460,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +36.630623,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +36.630787,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +36.630951,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +36.631115,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +36.631279,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +36.631443,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +36.631607,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +36.631771,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +36.631936,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +36.632100,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +36.632264,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +36.632428,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +36.632592,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +36.632757,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +36.632921,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +36.633085,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +36.633249,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +36.633413,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +36.633578,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +36.633742,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +36.633906,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +36.634070,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +36.634234,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +36.634399,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +36.634563,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +36.634727,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +36.634891,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +36.635055,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +36.635219,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +36.635384,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +36.635548,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +36.635712,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +36.635877,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +36.636040,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +36.636204,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +36.636369,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +36.636533,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +36.636697,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +36.636861,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +36.637026,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +36.637190,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +36.637354,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +36.637519,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +36.637683,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +36.637847,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +36.638012,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +36.638176,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +36.638340,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +36.638504,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +36.638668,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +36.638832,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +36.638996,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +36.639160,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +36.639325,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +36.639489,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +36.639653,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +36.639817,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +36.639981,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +36.640145,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +36.640309,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +36.640474,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +36.640637,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +36.640802,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +36.640966,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +36.641131,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +36.641295,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +36.641460,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +36.641624,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +36.641788,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +36.641953,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +36.642116,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +36.642281,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +36.642445,0.035584,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +36.642568,14.697632,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","51",,,"square",461 +36.657631,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +36.657641,13.996330,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","50",,,"reduce(float*, float*, float*, int)",468 +36.671688,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +36.671708,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +37.840247,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +37.840566,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +37.840874,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +37.841179,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +37.841486,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +37.841788,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +37.842089,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +37.842385,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +37.842688,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +37.842983,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +37.843279,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +37.843578,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +37.843873,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +37.844166,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +37.844466,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +37.844760,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +37.845054,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +37.845348,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +37.845652,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +37.845946,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +37.846239,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +37.846540,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +37.846837,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +37.847131,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +37.847432,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +37.847729,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +37.848025,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +37.848318,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +37.848619,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +37.848912,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +37.849202,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +37.849501,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +37.849796,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +37.850089,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +37.850436,0.168317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +37.850804,0.168702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +37.851147,0.178269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +37.851433,0.177213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +37.851717,0.178622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +37.851999,0.180413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +37.852285,0.178237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +37.852573,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +37.852856,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +37.853137,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +37.853426,0.178589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +37.853706,0.175933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +37.853993,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +37.854255,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +37.854521,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +37.854781,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +37.855049,0.168670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +37.855327,0.166974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +37.855605,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +37.855881,0.179101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +37.856143,0.173661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +37.856370,0.173086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +37.856601,0.173693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +37.856830,0.175933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +37.857064,0.183517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +37.857300,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +37.857538,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +37.857774,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +37.858003,0.183645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +37.858231,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +37.858457,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +37.858678,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +37.858900,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +37.859121,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +37.859342,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +37.859567,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +37.859787,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +37.860009,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +37.860232,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +37.860460,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +37.860682,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +37.860902,0.172445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +37.861126,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +37.861311,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +37.861500,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +37.861685,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +37.861869,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +37.862054,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +37.862237,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +37.862425,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +37.862611,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +37.862793,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +37.862979,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +37.863163,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +37.863347,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +37.863538,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +37.863721,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +37.863905,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +37.864092,0.170462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +37.864277,0.195229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +37.864480,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +37.864676,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +37.864873,0.181693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +37.865068,0.177342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +37.865268,0.187453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +37.865466,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +37.865662,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +37.865859,0.192573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +37.866062,0.182781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +37.866246,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +37.866431,0.168574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +37.866601,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +37.866765,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +37.866929,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +37.867092,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +37.867257,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +37.867421,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +37.867585,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +37.867749,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +37.867913,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +37.868077,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +37.868241,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +37.868405,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +37.868569,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +37.868734,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +37.868897,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +37.869062,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +37.869226,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +37.869390,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +37.869555,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +37.869719,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +37.869883,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +37.870047,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +37.870211,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +37.870375,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +37.870539,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +37.870703,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +37.870867,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +37.871031,0.171294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +37.871203,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +37.871368,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +37.871532,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +37.871697,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +37.871860,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +37.872025,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +37.872189,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +37.872352,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +37.872516,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +37.872680,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +37.872844,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +37.873009,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +37.873173,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +37.873337,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +37.873502,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +37.873666,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +37.873830,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +37.873994,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +37.874158,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +37.874322,0.096094,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +37.874611,15.245880,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","52",,,"square",480 +37.874984,0.061887,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +37.875111,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +37.875275,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +37.875439,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +37.875602,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +37.875766,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +37.875930,0.171358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +37.876102,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +37.876266,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +37.876430,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +37.876594,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +37.876758,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +37.876922,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +37.877086,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +37.877250,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +37.877413,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +37.877577,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +37.877741,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +37.877905,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +37.878068,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +37.878232,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +37.878396,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +37.878560,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +37.878724,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +37.878888,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +37.879052,0.162205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +37.879215,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +37.879379,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +37.879543,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +37.879707,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +37.879871,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +37.880035,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +37.880199,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +37.880363,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +37.880527,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +37.880691,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +37.880855,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +37.881019,0.171389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +37.881192,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +37.881357,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +37.881520,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +37.881685,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +37.881849,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +37.882013,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +37.882178,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +37.882342,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +37.882506,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +37.882671,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +37.882835,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +37.882999,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +37.883164,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +37.883328,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +37.883492,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +37.883656,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +37.883820,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +37.883984,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +37.884148,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +37.884313,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +37.884477,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +37.884641,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +37.884806,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +37.884970,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +37.885134,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +37.885298,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +37.885462,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +37.885626,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +37.885790,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +37.885954,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +37.886118,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +37.886282,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +37.886446,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +37.886610,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +37.886775,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +37.886939,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +37.887103,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +37.887267,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +37.887431,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +37.887595,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +37.887758,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +37.887923,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +37.888087,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +37.888251,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +37.888414,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +37.888578,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +37.888743,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +37.888907,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +37.889071,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +37.889235,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +37.889399,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +37.889563,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +37.889727,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +37.889891,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +37.890055,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +37.890220,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +37.890384,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +37.890548,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +37.890712,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +37.890876,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +37.891040,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +37.891204,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +37.891368,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +37.891533,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +37.891697,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +37.891861,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +37.892025,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +37.892189,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +37.892353,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +37.892517,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +37.892682,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +37.892846,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +37.893011,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +37.893175,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +37.893339,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +37.893504,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +37.893668,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +37.893832,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +37.893997,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +37.894160,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +37.894324,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +37.894488,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +37.894653,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +37.894817,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +37.894981,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +37.895145,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +37.895309,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +37.895473,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +37.895638,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +37.895802,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +37.895966,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +37.896131,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +37.896295,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +37.896459,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +37.896623,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +37.896787,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +37.896952,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +37.897116,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +37.897280,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +37.897443,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +37.897608,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +37.897772,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +37.897936,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +37.898100,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +37.898264,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +37.898428,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +37.898593,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +37.898757,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +37.898921,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +37.899085,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +37.899249,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +37.899414,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +37.899578,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +37.899742,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +37.899906,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +37.900071,0.035392,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +37.900186,14.693601,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","53",,,"square",486 +37.915248,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +37.915260,13.957835,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","52",,,"reduce(float*, float*, float*, int)",493 +37.929264,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +37.929285,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +39.088590,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +39.088753,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +39.088917,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +39.089081,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +39.089245,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +39.089409,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +39.089573,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +39.089737,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +39.089901,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +39.090064,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +39.090228,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +39.090392,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +39.090557,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +39.090721,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +39.090884,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +39.091048,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +39.091212,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +39.091376,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +39.091540,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +39.091704,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +39.091868,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +39.092032,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +39.092196,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +39.092360,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +39.092524,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +39.092689,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +39.092852,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +39.093017,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +39.093181,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +39.093345,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +39.093509,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +39.093674,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +39.093839,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +39.094003,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +39.094167,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +39.094331,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +39.094496,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +39.094661,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +39.094825,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +39.094990,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +39.095154,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +39.095319,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +39.095484,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +39.095648,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +39.095813,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +39.095977,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +39.096141,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +39.096305,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +39.096470,0.184669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +39.096656,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +39.096860,0.208381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +39.097069,0.220029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +39.097291,0.210172,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +39.097502,0.209437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +39.097713,0.214301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +39.097928,0.198269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +39.098128,0.211069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +39.098340,0.211260,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +39.098553,0.213021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +39.098767,0.214813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +39.098983,0.207421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +39.099192,0.210716,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +39.099404,0.212477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +39.099618,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +39.099807,0.166558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +39.099974,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +39.100142,0.192157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +39.100335,0.200157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +39.100536,0.204285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +39.100742,0.205757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +39.100949,0.215901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +39.101166,0.206684,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +39.101374,0.201757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +39.101577,0.194525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +39.101772,0.207421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +39.101981,0.213565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +39.102196,0.206013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +39.102403,0.210333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +39.102615,0.216284,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +39.102833,0.209565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +39.103043,0.170845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +39.103215,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +39.103381,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +39.103545,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +39.103709,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +39.103875,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +39.104039,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +39.104203,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +39.104367,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +39.104531,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +39.104696,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +39.104859,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +39.105023,0.169469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +39.105194,0.196765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +39.105392,0.189885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +39.105583,0.197661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +39.105782,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +39.105972,0.191741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +39.106165,0.198557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +39.106364,0.190237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +39.106556,0.190366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +39.106748,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +39.106941,0.191293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +39.107133,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +39.107300,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +39.107464,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +39.107629,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +39.107793,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +39.107957,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +39.108121,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +39.108286,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +39.108450,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +39.108614,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +39.108779,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +39.108943,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +39.109107,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +39.109271,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +39.109436,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +39.109600,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +39.109764,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +39.109928,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +39.110092,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +39.110256,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +39.110421,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +39.110585,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +39.110749,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +39.110913,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +39.111077,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +39.111241,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +39.111406,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +39.111570,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +39.111734,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +39.111898,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +39.112062,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +39.112227,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +39.112391,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +39.112556,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +39.112720,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +39.112884,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +39.113048,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +39.113212,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +39.113376,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +39.113540,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +39.113704,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +39.113868,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +39.114032,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +39.114197,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +39.114361,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +39.114525,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +39.114689,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +39.114853,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +39.115018,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +39.115182,0.096223,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +39.115455,15.249463,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","54",,,"square",505 +39.115755,0.062431,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +39.115867,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +39.116031,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +39.116195,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +39.116359,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +39.116522,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +39.116686,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +39.116850,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +39.117013,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +39.117177,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +39.117341,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +39.117505,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +39.117669,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +39.117832,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +39.117996,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +39.118160,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +39.118325,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +39.118488,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +39.118652,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +39.118816,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +39.118980,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +39.119144,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +39.119307,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +39.119471,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +39.119635,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +39.119799,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +39.119962,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +39.120126,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +39.120290,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +39.120454,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +39.120619,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +39.120784,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +39.120948,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +39.121112,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +39.121276,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +39.121441,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +39.121605,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +39.121769,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +39.121933,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +39.122098,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +39.122262,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +39.122425,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +39.122589,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +39.122753,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +39.122918,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +39.123082,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +39.123246,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +39.123410,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +39.123575,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +39.123739,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +39.123903,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +39.124067,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +39.124232,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +39.124396,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +39.124560,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +39.124724,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +39.124889,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +39.125053,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +39.125218,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +39.125382,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +39.125546,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +39.125711,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +39.125876,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +39.126040,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +39.126204,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +39.126368,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +39.126531,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +39.126696,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +39.126860,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +39.127024,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +39.127188,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +39.127352,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +39.127517,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +39.127681,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +39.127846,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +39.128010,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +39.128174,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +39.128338,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +39.128502,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +39.128667,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +39.128830,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +39.128994,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +39.129159,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +39.129323,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +39.129487,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +39.129652,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +39.129815,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +39.129979,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +39.130143,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +39.130307,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +39.130471,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +39.130635,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +39.130800,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +39.130964,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +39.131128,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +39.131292,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +39.131457,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +39.131621,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +39.131785,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +39.131949,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +39.132114,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +39.132278,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +39.132442,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +39.132607,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +39.132771,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +39.132935,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +39.133100,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +39.133264,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +39.133428,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +39.133593,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +39.133757,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +39.133921,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +39.134085,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +39.134250,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +39.134414,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +39.134578,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +39.134742,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +39.134906,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +39.135071,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +39.135236,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +39.135400,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +39.135564,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +39.135729,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +39.135893,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +39.136056,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +39.136221,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +39.136386,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +39.136550,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +39.136714,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +39.136877,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +39.137041,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +39.137205,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +39.137370,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +39.137534,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +39.137697,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +39.137862,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +39.138026,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +39.138190,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +39.138354,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +39.138519,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +39.138683,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +39.138847,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +39.139011,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +39.139176,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +39.139340,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +39.139504,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +39.139668,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +39.139833,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +39.139997,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +39.140161,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +39.140326,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +39.140490,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +39.140653,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +39.140817,0.035520,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +39.140929,14.698624,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","55",,,"square",511 +39.155991,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +39.156002,13.984267,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","54",,,"reduce(float*, float*, float*, int)",518 +39.170038,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +39.170061,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +40.331014,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +40.331346,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +40.331688,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +40.332013,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +40.332339,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +40.332673,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +40.333000,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +40.333321,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +40.333650,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +40.333969,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +40.334292,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +40.334619,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +40.334939,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +40.335258,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +40.335584,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +40.335904,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +40.336224,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +40.336551,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +40.336875,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +40.337193,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +40.337519,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +40.337840,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +40.338159,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +40.338486,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +40.338809,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +40.339128,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +40.339456,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +40.339775,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +40.340092,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +40.340414,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +40.340737,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +40.341056,0.173309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +40.341310,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +40.341549,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +40.341783,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +40.342016,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +40.342248,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +40.342486,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +40.342720,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +40.342955,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +40.343189,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +40.343426,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +40.343662,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +40.343896,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +40.344130,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +40.344363,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +40.344603,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +40.344835,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +40.345071,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +40.345305,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +40.345541,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +40.345775,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +40.346009,0.172318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +40.346216,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +40.346399,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +40.346589,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +40.346775,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +40.346961,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +40.347146,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +40.347332,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +40.347522,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +40.347708,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +40.347891,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +40.348075,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +40.348258,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +40.348446,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +40.348630,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +40.348814,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +40.348997,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +40.349180,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +40.349363,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +40.349551,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +40.349735,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +40.349917,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +40.350102,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +40.350284,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +40.350472,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +40.350657,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +40.350840,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +40.351023,0.172797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +40.351198,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +40.351363,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +40.351527,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +40.351691,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +40.351855,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +40.352019,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +40.352184,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +40.352348,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +40.352512,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +40.352677,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +40.352841,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +40.353004,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +40.353169,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +40.353332,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +40.353497,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +40.353662,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +40.353826,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +40.353990,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +40.354154,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +40.354318,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +40.354482,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +40.354647,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +40.354811,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +40.354975,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +40.355139,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +40.355304,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +40.355468,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +40.355632,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +40.355796,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +40.355960,0.171709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +40.356133,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +40.356297,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +40.356461,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +40.356625,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +40.356789,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +40.356953,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +40.357117,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +40.357281,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +40.357445,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +40.357609,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +40.357773,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +40.357937,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +40.358101,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +40.358265,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +40.358429,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +40.358593,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +40.358757,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +40.358921,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +40.359086,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +40.359250,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +40.359415,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +40.359579,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +40.359743,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +40.359908,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +40.360072,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +40.360236,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +40.360400,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +40.360565,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +40.360729,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +40.360894,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +40.361058,0.171677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +40.361231,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +40.361395,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +40.361559,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +40.361724,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +40.361888,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +40.362052,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +40.362216,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +40.362381,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +40.362545,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +40.362709,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +40.362873,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +40.363038,0.095902,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +40.363679,15.243512,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","56",,,"square",530 +40.364008,0.061695,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +40.364137,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +40.364301,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +40.364464,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +40.364628,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +40.364792,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +40.364956,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +40.365120,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +40.365284,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +40.365448,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +40.365612,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +40.365776,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +40.365940,0.171805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +40.366113,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +40.366277,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +40.366441,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +40.366604,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +40.366769,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +40.366932,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +40.367097,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +40.367261,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +40.367424,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +40.367588,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +40.367751,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +40.367915,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +40.368079,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +40.368243,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +40.368407,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +40.368571,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +40.368735,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +40.368900,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +40.369064,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +40.369228,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +40.369392,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +40.369556,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +40.369720,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +40.369884,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +40.370049,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +40.370213,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +40.370377,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +40.370541,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +40.370705,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +40.370870,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +40.371034,0.171645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +40.371207,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +40.371371,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +40.371535,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +40.371698,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +40.371863,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +40.372027,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +40.372191,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +40.372356,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +40.372520,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +40.372685,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +40.372849,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +40.373013,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +40.373177,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +40.373341,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +40.373506,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +40.373670,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +40.373834,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +40.373998,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +40.374163,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +40.374327,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +40.374491,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +40.374655,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +40.374819,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +40.374983,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +40.375147,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +40.375311,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +40.375475,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +40.375639,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +40.375803,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +40.375967,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +40.376131,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +40.376295,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +40.376459,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +40.376623,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +40.376787,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +40.376951,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +40.377115,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +40.377279,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +40.377444,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +40.377608,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +40.377772,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +40.377936,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +40.378100,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +40.378264,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +40.378429,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +40.378592,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +40.378757,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +40.378921,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +40.379085,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +40.379250,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +40.379414,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +40.379578,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +40.379742,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +40.379907,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +40.380071,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +40.380236,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +40.380400,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +40.380565,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +40.380729,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +40.380893,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +40.381057,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +40.381221,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +40.381386,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +40.381550,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +40.381714,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +40.381878,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +40.382043,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +40.382207,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +40.382371,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +40.382536,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +40.382700,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +40.382864,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +40.383028,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +40.383192,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +40.383356,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +40.383520,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +40.383684,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +40.383848,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +40.384012,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +40.384176,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +40.384340,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +40.384504,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +40.384669,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +40.384833,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +40.384997,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +40.385161,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +40.385325,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +40.385490,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +40.385654,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +40.385818,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +40.385983,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +40.386146,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +40.386311,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +40.386475,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +40.386639,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +40.386803,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +40.386968,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +40.387132,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +40.387296,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +40.387460,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +40.387624,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +40.387788,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +40.387953,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +40.388118,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +40.388282,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +40.388446,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +40.388610,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +40.388775,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +40.388939,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +40.389104,0.035295,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +40.389235,14.707519,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","57",,,"square",536 +40.404287,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +40.404297,13.959275,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","56",,,"reduce(float*, float*, float*, int)",543 +40.418297,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +40.418319,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +41.581362,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +41.581525,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +41.581689,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +41.581853,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +41.582017,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +41.582181,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +41.582345,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +41.582509,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +41.582672,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +41.582836,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +41.583000,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +41.583163,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +41.583327,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +41.583491,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +41.583655,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +41.583819,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +41.583982,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +41.584146,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +41.584311,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +41.584475,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +41.584638,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +41.584802,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +41.584967,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +41.585131,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +41.585295,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +41.585459,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +41.585623,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +41.585787,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +41.585952,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +41.586116,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +41.586281,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +41.586446,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +41.586610,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +41.586774,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +41.586938,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +41.587103,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +41.587268,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +41.587432,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +41.587597,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +41.587761,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +41.587926,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +41.588091,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +41.588255,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +41.588420,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +41.588584,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +41.588749,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +41.588913,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +41.589078,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +41.589242,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +41.589407,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +41.589571,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +41.589735,0.195325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +41.589932,0.207901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +41.590141,0.213853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +41.590356,0.211356,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +41.590569,0.214781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +41.590785,0.214909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +41.591001,0.213437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +41.591216,0.206396,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +41.591423,0.216637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +41.591641,0.218013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +41.591861,0.215484,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +41.592077,0.211549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +41.592290,0.207613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +41.592499,0.209021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +41.592709,0.203165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +41.592913,0.175645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +41.593090,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +41.593257,0.174462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +41.593433,0.203997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +41.593638,0.205180,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +41.593845,0.214109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +41.594060,0.227197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +41.594289,0.229820,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +41.594520,0.225533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +41.594747,0.210908,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +41.594959,0.200765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +41.595161,0.218173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +41.595380,0.215325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +41.595597,0.222780,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +41.595821,0.219485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +41.596042,0.210077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +41.596253,0.201949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +41.596456,0.178909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +41.596636,0.166749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +41.596804,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +41.596968,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +41.597132,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +41.597296,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +41.597461,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +41.597625,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +41.597789,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +41.597954,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +41.598118,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +41.598282,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +41.598447,0.165982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +41.598614,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +41.598804,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +41.598997,0.198493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +41.599197,0.190973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +41.599389,0.183645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +41.599574,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +41.599771,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +41.599963,0.191485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +41.600156,0.200765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +41.600358,0.189501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +41.600549,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +41.600734,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +41.600898,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +41.601062,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +41.601226,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +41.601391,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +41.601555,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +41.601718,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +41.601883,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +41.602047,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +41.602211,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +41.602375,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +41.602539,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +41.602704,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +41.602868,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +41.603032,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +41.603196,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +41.603360,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +41.603524,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +41.603688,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +41.603852,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +41.604017,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +41.604181,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +41.604345,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +41.604510,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +41.604674,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +41.604838,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +41.605002,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +41.605166,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +41.605330,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +41.605495,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +41.605659,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +41.605823,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +41.605987,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +41.606152,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +41.606315,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +41.606480,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +41.606644,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +41.606809,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +41.606973,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +41.607137,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +41.607301,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +41.607466,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +41.607630,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +41.607795,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +41.607958,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +41.608123,0.095934,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +41.608736,15.238295,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","58",,,"square",555 +41.609052,0.061759,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +41.609164,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +41.609327,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +41.609492,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +41.609655,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +41.609819,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +41.609983,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +41.610147,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +41.610310,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +41.610474,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +41.610639,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +41.610803,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +41.610966,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +41.611130,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +41.611294,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +41.611458,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +41.611622,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +41.611785,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +41.611949,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +41.612114,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +41.612277,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +41.612441,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +41.612605,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +41.612769,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +41.612933,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +41.613097,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +41.613261,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +41.613425,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +41.613588,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +41.613752,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +41.613917,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +41.614081,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +41.614245,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +41.614409,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +41.614574,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +41.614739,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +41.614903,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +41.615067,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +41.615231,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +41.615395,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +41.615559,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +41.615723,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +41.615887,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +41.616051,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +41.616215,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +41.616379,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +41.616543,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +41.616707,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +41.616872,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +41.617037,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +41.617201,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +41.617366,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +41.617530,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +41.617694,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +41.617858,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +41.618023,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +41.618187,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +41.618351,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +41.618515,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +41.618679,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +41.618844,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +41.619008,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +41.619172,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +41.619336,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +41.619500,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +41.619664,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +41.619828,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +41.619992,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +41.620156,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +41.620320,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +41.620484,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +41.620648,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +41.620812,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +41.620977,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +41.621140,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +41.621305,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +41.621469,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +41.621633,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +41.621796,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +41.621961,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +41.622125,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +41.622289,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +41.622452,0.162206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +41.622616,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +41.622780,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +41.622944,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +41.623108,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +41.623273,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +41.623437,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +41.623601,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +41.623765,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +41.623929,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +41.624093,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +41.624257,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +41.624422,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +41.624586,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +41.624751,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +41.624915,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +41.625079,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +41.625243,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +41.625408,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +41.625572,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +41.625736,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +41.625900,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +41.626064,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +41.626228,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +41.626393,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +41.626557,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +41.626721,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +41.626885,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +41.627050,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +41.627214,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +41.627378,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +41.627542,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +41.627706,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +41.627870,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +41.628035,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +41.628199,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +41.628363,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +41.628527,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +41.628691,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +41.628855,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +41.629020,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +41.629184,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +41.629348,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +41.629513,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +41.629677,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +41.629841,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +41.630005,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +41.630169,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +41.630334,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +41.630498,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +41.630662,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +41.630827,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +41.630991,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +41.631155,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +41.631319,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +41.631483,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +41.631647,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +41.631811,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +41.631975,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +41.632140,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +41.632304,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +41.632468,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +41.632632,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +41.632797,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +41.632961,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +41.633125,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +41.633289,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +41.633454,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +41.633618,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +41.633782,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +41.633946,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +41.634110,0.035391,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +41.634246,14.696864,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","59",,,"square",561 +41.649296,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +41.649306,13.970955,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","58",,,"reduce(float*, float*, float*, int)",568 +41.663323,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +41.663345,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +42.818983,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +42.819146,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +42.819310,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +42.819474,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +42.819637,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +42.819801,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +42.819964,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +42.820128,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +42.820292,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +42.820457,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +42.820621,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +42.820785,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +42.820949,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +42.821113,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +42.821277,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +42.821440,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +42.821604,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +42.821768,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +42.821932,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +42.822096,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +42.822260,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +42.822424,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +42.822587,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +42.822752,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +42.822916,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +42.823080,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +42.823245,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +42.823408,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +42.823573,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +42.823738,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +42.823902,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +42.824066,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +42.824231,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +42.824395,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +42.824560,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +42.824724,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +42.824889,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +42.825053,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +42.825218,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +42.825381,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +42.825546,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +42.825711,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +42.825876,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +42.826040,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +42.826204,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +42.826369,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +42.826533,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +42.826698,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +42.826862,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +42.827027,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +42.827191,0.176862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +42.827369,0.210556,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +42.827581,0.203325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +42.827786,0.213821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +42.828001,0.210237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +42.828213,0.215773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +42.828430,0.202972,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +42.828634,0.205341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +42.828840,0.207421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +42.829049,0.208893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +42.829259,0.208189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +42.829469,0.207389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +42.829677,0.216285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +42.829895,0.205725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +42.830102,0.203901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +42.830307,0.208925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +42.830517,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +42.830691,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +42.830856,0.166429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +42.831023,0.201021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +42.831226,0.203165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +42.831430,0.208061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +42.831639,0.202365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +42.831843,0.217469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +42.832062,0.205821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +42.832269,0.203229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +42.832473,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +42.832668,0.207197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +42.832877,0.215164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +42.833093,0.211165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +42.833306,0.211357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +42.833518,0.212125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +42.833732,0.195453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +42.833928,0.169597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +42.834099,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +42.834265,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +42.834429,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +42.834593,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +42.834758,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +42.834922,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +42.835087,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +42.835250,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +42.835414,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +42.835579,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +42.835743,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +42.835907,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +42.836073,0.189245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +42.836264,0.193565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +42.836459,0.196445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +42.836656,0.190461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +42.836848,0.183965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +42.837033,0.197565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +42.837232,0.186494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +42.837420,0.190334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +42.837611,0.191517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +42.837804,0.193661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +42.837999,0.175613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +42.838176,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +42.838340,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +42.838504,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +42.838668,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +42.838832,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +42.838997,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +42.839161,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +42.839325,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +42.839489,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +42.839652,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +42.839817,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +42.839982,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +42.840145,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +42.840310,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +42.840473,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +42.840638,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +42.840802,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +42.840966,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +42.841130,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +42.841294,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +42.841458,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +42.841623,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +42.841787,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +42.841951,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +42.842115,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +42.842279,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +42.842443,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +42.842607,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +42.842772,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +42.842936,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +42.843101,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +42.843265,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +42.843429,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +42.843594,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +42.843757,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +42.843922,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +42.844086,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +42.844250,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +42.844414,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +42.844578,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +42.844742,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +42.844906,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +42.845070,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +42.845235,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +42.845399,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +42.845563,0.096735,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +42.846175,15.234808,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","60",,,"square",580 +42.846500,0.062303,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +42.846617,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +42.846781,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +42.846945,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +42.847109,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +42.847273,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +42.847436,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +42.847600,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +42.847764,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +42.847928,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +42.848092,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +42.848255,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +42.848419,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +42.848583,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +42.848747,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +42.848911,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +42.849075,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +42.849239,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +42.849403,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +42.849566,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +42.849730,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +42.849894,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +42.850058,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +42.850222,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +42.850386,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +42.850550,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +42.850714,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +42.850878,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +42.851042,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +42.851206,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +42.851370,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +42.851535,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +42.851699,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +42.851864,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +42.852028,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +42.852191,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +42.852355,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +42.852519,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +42.852684,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +42.852848,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +42.853013,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +42.853177,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +42.853341,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +42.853505,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +42.853670,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +42.853834,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +42.853998,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +42.854163,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +42.854328,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +42.854492,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +42.854656,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +42.854821,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +42.854984,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +42.855148,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +42.855313,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +42.855477,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +42.855641,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +42.855806,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +42.855969,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +42.856133,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +42.856298,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +42.856462,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +42.856626,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +42.856790,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +42.856954,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +42.857118,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +42.857282,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +42.857446,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +42.857610,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +42.857774,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +42.857938,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +42.858102,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +42.858265,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +42.858429,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +42.858593,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +42.858756,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +42.858920,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +42.859084,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +42.859248,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +42.859412,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +42.859576,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +42.859740,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +42.859904,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +42.860068,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +42.860232,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +42.860396,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +42.860561,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +42.860725,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +42.860889,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +42.861053,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +42.861217,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +42.861381,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +42.861545,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +42.861710,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +42.861874,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +42.862038,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +42.862202,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +42.862367,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +42.862531,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +42.862696,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +42.862860,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +42.863024,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +42.863189,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +42.863353,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +42.863517,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +42.863681,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +42.863846,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +42.864010,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +42.864174,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +42.864338,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +42.864502,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +42.864666,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +42.864830,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +42.864995,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +42.865159,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +42.865324,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +42.865488,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +42.865653,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +42.865817,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +42.865982,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +42.866145,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +42.866310,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +42.866474,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +42.866638,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +42.866802,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +42.866967,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +42.867130,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +42.867295,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +42.867459,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +42.867623,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +42.867787,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +42.867952,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +42.868116,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +42.868280,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +42.868444,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +42.868609,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +42.868773,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +42.868937,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +42.869101,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +42.869265,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +42.869430,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +42.869594,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +42.869758,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +42.869922,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +42.870086,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +42.870250,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +42.870415,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +42.870579,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +42.870743,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +42.870907,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +42.871071,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +42.871235,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +42.871399,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +42.871563,0.035520,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +42.871698,14.699264,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","61",,,"square",586 +42.886771,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +42.886781,14.015595,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","60",,,"reduce(float*, float*, float*, int)",593 +42.900858,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +42.900881,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +44.054359,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +44.054523,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +44.054687,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +44.054851,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +44.055015,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +44.055179,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +44.055342,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +44.055506,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +44.055670,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +44.055834,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +44.055999,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +44.056162,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +44.056327,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +44.056490,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +44.056655,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +44.056819,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +44.056982,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +44.057146,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +44.057310,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +44.057474,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +44.057638,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +44.057802,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +44.057966,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +44.058130,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +44.058294,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +44.058458,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +44.058621,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +44.058786,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +44.058950,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +44.059114,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +44.059278,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +44.059443,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +44.059607,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +44.059771,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +44.059935,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +44.060100,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +44.060264,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +44.060428,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +44.060592,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +44.060757,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +44.060921,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +44.061085,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +44.061249,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +44.061414,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +44.061578,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +44.061742,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +44.061907,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +44.062071,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +44.062236,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +44.062400,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +44.062565,0.166270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +44.062733,0.201245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +44.062935,0.209373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +44.063146,0.221436,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +44.063369,0.208125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +44.063578,0.218173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +44.063798,0.210396,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +44.064010,0.206013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +44.064217,0.205021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +44.064424,0.212509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +44.064637,0.213533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +44.064852,0.212188,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +44.065066,0.214077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +44.065281,0.207165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +44.065489,0.214717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +44.065705,0.202460,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +44.065909,0.165630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +44.066076,0.172925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +44.066250,0.171070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +44.066422,0.199325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +44.066622,0.206332,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +44.066830,0.205213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +44.067036,0.204829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +44.067242,0.205213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +44.067449,0.202109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +44.067653,0.200797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +44.067855,0.194589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +44.068050,0.207901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +44.068260,0.208764,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +44.068469,0.211069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +44.068682,0.208989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +44.068892,0.209949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +44.069103,0.193821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +44.069298,0.171933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +44.069471,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +44.069636,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +44.069800,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +44.069964,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +44.070130,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +44.070293,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +44.070459,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +44.070623,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +44.070788,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +44.070952,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +44.071117,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +44.071281,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +44.071445,0.187805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +44.071634,0.193981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +44.071829,0.191197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +44.072022,0.198141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +44.072221,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +44.072408,0.192445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +44.072602,0.193597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +44.072797,0.192350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +44.072991,0.191837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +44.073184,0.193629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +44.073379,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +44.073562,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +44.073726,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +44.073891,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +44.074055,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +44.074219,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +44.074383,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +44.074548,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +44.074712,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +44.074876,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +44.075041,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +44.075205,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +44.075369,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +44.075533,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +44.075697,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +44.075862,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +44.076026,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +44.076190,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +44.076354,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +44.076518,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +44.076682,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +44.076847,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +44.077011,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +44.077175,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +44.077339,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +44.077503,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +44.077667,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +44.077831,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +44.077996,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +44.078159,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +44.078323,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +44.078488,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +44.078652,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +44.078816,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +44.078980,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +44.079144,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +44.079309,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +44.079472,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +44.079637,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +44.079801,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +44.079965,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +44.080129,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +44.080293,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +44.080457,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +44.080622,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +44.080786,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +44.080950,0.095935,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +44.081530,15.248696,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","62",,,"square",605 +44.081824,0.061439,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +44.081932,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +44.082096,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +44.082259,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +44.082423,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +44.082587,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +44.082751,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +44.082914,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +44.083078,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +44.083242,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +44.083406,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +44.083570,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +44.083734,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +44.083899,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +44.084062,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +44.084226,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +44.084390,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +44.084554,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +44.084718,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +44.084882,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +44.085045,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +44.085209,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +44.085373,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +44.085537,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +44.085701,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +44.085864,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +44.086028,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +44.086192,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +44.086356,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +44.086521,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +44.086684,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +44.086849,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +44.087013,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +44.087178,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +44.087342,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +44.087506,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +44.087670,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +44.087834,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +44.087998,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +44.088163,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +44.088327,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +44.088491,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +44.088656,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +44.088820,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +44.088984,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +44.089148,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +44.089313,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +44.089476,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +44.089641,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +44.089805,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +44.089969,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +44.090134,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +44.090297,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +44.090461,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +44.090625,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +44.090789,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +44.090954,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +44.091118,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +44.091282,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +44.091447,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +44.091611,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +44.091775,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +44.091940,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +44.092105,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +44.092269,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +44.092433,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +44.092598,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +44.092762,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +44.092926,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +44.093090,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +44.093254,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +44.093418,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +44.093582,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +44.093747,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +44.093911,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +44.094075,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +44.094239,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +44.094403,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +44.094567,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +44.094731,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +44.094894,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +44.095059,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +44.095223,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +44.095387,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +44.095551,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +44.095715,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +44.095879,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +44.096043,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +44.096208,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +44.096372,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +44.096537,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +44.096701,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +44.096865,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +44.097029,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +44.097194,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +44.097358,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +44.097522,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +44.097687,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +44.097851,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +44.098015,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +44.098180,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +44.098344,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +44.098508,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +44.098672,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +44.098837,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +44.099000,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +44.099165,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +44.099329,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +44.099493,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +44.099657,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +44.099822,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +44.099986,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +44.100151,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +44.100315,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +44.100479,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +44.100643,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +44.100807,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +44.100971,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +44.101135,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +44.101299,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +44.101463,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +44.101627,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +44.101791,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +44.101955,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +44.102120,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +44.102284,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +44.102448,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +44.102612,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +44.102776,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +44.102940,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +44.103104,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +44.103269,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +44.103433,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +44.103597,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +44.103761,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +44.103926,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +44.104090,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +44.104254,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +44.104418,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +44.104582,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +44.104746,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +44.104910,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +44.105074,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +44.105238,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +44.105403,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +44.105567,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +44.105731,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +44.105895,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +44.106059,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +44.106223,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +44.106387,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +44.106551,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +44.106715,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +44.106879,0.035488,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +44.107011,14.718464,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","63",,,"square",611 +44.122084,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +44.122096,13.993068,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","62",,,"reduce(float*, float*, float*, int)",618 +44.136146,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +44.136169,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +45.295897,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +45.296061,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +45.296225,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +45.296389,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +45.296552,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +45.296716,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +45.296880,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +45.297044,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +45.297208,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +45.297372,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +45.297536,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +45.297699,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +45.297863,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +45.298027,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +45.298191,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +45.298355,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +45.298519,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +45.298683,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +45.298847,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +45.299011,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +45.299175,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +45.299339,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +45.299503,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +45.299667,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +45.299831,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +45.299995,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +45.300161,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +45.300325,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +45.300489,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +45.300654,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +45.300818,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +45.300983,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +45.301147,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +45.301311,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +45.301475,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +45.301639,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +45.301804,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +45.301969,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +45.302133,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +45.302299,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +45.302463,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +45.302628,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +45.302793,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +45.302958,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +45.303122,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +45.303286,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +45.303451,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +45.303615,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +45.303779,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +45.303943,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +45.304108,0.177726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +45.304287,0.198557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +45.304487,0.210173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +45.304698,0.214652,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +45.304914,0.211773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +45.305127,0.212637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +45.305341,0.216892,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +45.305560,0.213405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +45.305775,0.207485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +45.305983,0.213885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +45.306198,0.216348,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +45.306416,0.213085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +45.306630,0.211133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +45.306843,0.218333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +45.307062,0.207068,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +45.307271,0.200477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +45.307472,0.165086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +45.307638,0.164669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +45.307804,0.173246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +45.307979,0.213532,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +45.308193,0.224957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +45.308420,0.214301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +45.308636,0.217372,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +45.308854,0.213149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +45.309069,0.211357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +45.309281,0.213277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +45.309496,0.198493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +45.309696,0.214716,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +45.309912,0.211997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +45.310125,0.220733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +45.310347,0.215804,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +45.310564,0.225245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +45.310790,0.213469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +45.311005,0.178429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +45.311185,0.168221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +45.311354,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +45.311519,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +45.311683,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +45.311849,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +45.312013,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +45.312178,0.165981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +45.312345,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +45.312509,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +45.312673,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +45.312838,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +45.313002,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +45.313166,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +45.313330,0.192350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +45.313524,0.201277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +45.313726,0.193885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +45.313922,0.193757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +45.314117,0.182398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +45.314301,0.204349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +45.314506,0.199837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +45.314707,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +45.314897,0.190173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +45.315088,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +45.315282,0.196029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +45.315479,0.164765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +45.315645,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +45.315809,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +45.315974,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +45.316138,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +45.316302,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +45.316466,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +45.316631,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +45.316795,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +45.316959,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +45.317123,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +45.317287,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +45.317451,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +45.317615,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +45.317780,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +45.317944,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +45.318107,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +45.318272,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +45.318437,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +45.318602,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +45.318766,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +45.318930,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +45.319094,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +45.319258,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +45.319422,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +45.319587,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +45.319751,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +45.319915,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +45.320079,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +45.320243,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +45.320408,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +45.320572,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +45.320736,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +45.320901,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +45.321065,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +45.321229,0.177694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +45.321408,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +45.321573,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +45.321737,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +45.321901,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +45.322065,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +45.322229,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +45.322393,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +45.322557,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +45.322722,0.095934,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +45.323297,15.229337,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","64",,,"square",630 +45.323625,0.061599,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +45.323738,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +45.323902,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +45.324066,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +45.324230,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +45.324394,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +45.324557,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +45.324721,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +45.324885,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +45.325048,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +45.325213,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +45.325376,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +45.325540,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +45.325704,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +45.325868,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +45.326032,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +45.326196,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +45.326360,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +45.326524,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +45.326688,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +45.326851,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +45.327015,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +45.327179,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +45.327343,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +45.327506,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +45.327670,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +45.327834,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +45.327998,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +45.328162,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +45.328327,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +45.328491,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +45.328656,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +45.328820,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +45.328984,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +45.329149,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +45.329313,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +45.329477,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +45.329642,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +45.329806,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +45.329970,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +45.330134,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +45.330299,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +45.330463,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +45.330627,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +45.330792,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +45.330956,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +45.331121,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +45.331285,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +45.331449,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +45.331613,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +45.331778,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +45.331943,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +45.332106,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +45.332270,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +45.332435,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +45.332599,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +45.332763,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +45.332928,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +45.333092,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +45.333256,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +45.333421,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +45.333585,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +45.333749,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +45.333914,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +45.334077,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +45.334241,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +45.334406,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +45.334570,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +45.334733,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +45.334897,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +45.335061,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +45.335226,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +45.335390,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +45.335553,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +45.335717,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +45.335881,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +45.336046,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +45.336209,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +45.336373,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +45.336537,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +45.336702,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +45.336865,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +45.337029,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +45.337193,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +45.337357,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +45.337521,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +45.337685,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +45.337849,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +45.338013,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +45.338178,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +45.338342,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +45.338506,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +45.338670,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +45.338833,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +45.338998,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +45.339162,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +45.339325,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +45.339489,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +45.339654,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +45.339818,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +45.339982,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +45.340146,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +45.340310,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +45.340474,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +45.340639,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +45.340802,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +45.340967,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +45.341131,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +45.341296,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +45.341460,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +45.341625,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +45.341789,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +45.341953,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +45.342117,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +45.342281,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +45.342445,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +45.342610,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +45.342774,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +45.342938,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +45.343102,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +45.343266,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +45.343430,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +45.343594,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +45.343758,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +45.343923,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +45.344087,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +45.344252,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +45.344416,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +45.344580,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +45.344744,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +45.344908,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +45.345072,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +45.345237,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +45.345401,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +45.345565,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +45.345729,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +45.345893,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +45.346057,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +45.346221,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +45.346385,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +45.346549,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +45.346714,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +45.346878,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +45.347042,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +45.347206,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +45.347371,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +45.347535,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +45.347699,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +45.347863,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +45.348027,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +45.348192,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +45.348356,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +45.348520,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +45.348684,0.035424,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +45.348818,14.695553,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","65",,,"square",636 +45.363868,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +45.363878,13.971499,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","64",,,"reduce(float*, float*, float*, int)",643 +45.377899,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +45.377924,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +46.537629,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +46.537793,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +46.537956,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +46.538120,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +46.538284,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +46.538447,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +46.538611,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +46.538774,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +46.538939,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +46.539103,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +46.539267,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +46.539431,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +46.539595,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +46.539759,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +46.539923,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +46.540087,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +46.540251,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +46.540415,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +46.540579,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +46.540743,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +46.540906,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +46.541070,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +46.541234,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +46.541398,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +46.541561,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +46.541726,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +46.541890,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +46.542054,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +46.542219,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +46.542383,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +46.542548,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +46.542713,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +46.542877,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +46.543041,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +46.543206,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +46.543371,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +46.543536,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +46.543700,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +46.543865,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +46.544029,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +46.544193,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +46.544358,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +46.544521,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +46.544686,0.164766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +46.544852,0.168541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +46.545022,0.169469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +46.545192,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +46.545357,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +46.545522,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +46.545687,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +46.545851,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +46.546015,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +46.546179,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +46.546343,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +46.546508,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +46.546673,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +46.546838,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +46.547002,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +46.547166,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +46.547330,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +46.547494,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +46.547659,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +46.547823,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +46.547987,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +46.548151,0.177150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +46.548329,0.200637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +46.548531,0.213308,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +46.548746,0.213085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +46.548960,0.218397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +46.549180,0.207421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +46.549388,0.199645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +46.549590,0.201341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +46.549792,0.209724,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +46.550003,0.220125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +46.550225,0.207037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +46.550433,0.204413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +46.550639,0.212092,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +46.550852,0.215293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +46.551068,0.206685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +46.551276,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +46.551471,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +46.551636,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +46.551802,0.171741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +46.551975,0.196765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +46.552173,0.200221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +46.552374,0.204509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +46.552580,0.203869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +46.552785,0.201693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +46.552988,0.202941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +46.553193,0.191997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +46.553386,0.197821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +46.553585,0.210397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +46.553797,0.203005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +46.554001,0.218908,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +46.554221,0.205693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +46.554428,0.212477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +46.554642,0.181181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +46.554824,0.167934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +46.554993,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +46.555158,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +46.555322,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +46.555487,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +46.555651,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +46.555815,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +46.555979,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +46.556143,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +46.556307,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +46.556471,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +46.556636,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +46.556799,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +46.556963,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +46.557148,0.184765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +46.557334,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +46.557518,0.187005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +46.557706,0.190397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +46.557898,0.188382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +46.558088,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +46.558275,0.189277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +46.558465,0.189437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +46.558656,0.184477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +46.558841,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +46.559031,0.165886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +46.559198,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +46.559382,0.187677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +46.559571,0.190109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +46.559763,0.187677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +46.559952,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +46.560143,0.190333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +46.560334,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +46.560527,0.192446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +46.560720,0.192829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +46.560914,0.202109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +46.561118,0.193470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +46.561312,0.189789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +46.561503,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +46.561684,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +46.561868,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +46.562057,0.178590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +46.562236,0.180446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +46.562418,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +46.562602,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +46.562787,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +46.562975,0.193149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +46.563169,0.196157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +46.563366,0.194301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +46.563562,0.180350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +46.563743,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +46.563925,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +46.564109,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +46.564293,0.185181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +46.564479,0.186846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +46.564667,0.180125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +46.564848,0.111486,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +46.565410,15.176314,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","66",,,"square",655 +46.565832,0.074911,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +46.565975,0.184477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +46.566161,0.189277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +46.566351,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +46.566542,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +46.566729,0.179550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +46.566910,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +46.567099,0.186909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +46.567287,0.183005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +46.567471,0.183485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +46.567656,0.183517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +46.567841,0.182110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +46.568025,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +46.568209,0.179549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +46.568390,0.179261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +46.568570,0.186589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +46.568758,0.185246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +46.568944,0.187645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +46.569133,0.192413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +46.569327,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +46.569515,0.186685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +46.569703,0.183005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +46.569887,0.184669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +46.570073,0.186686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +46.570261,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +46.570448,0.182301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +46.570632,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +46.570814,0.180765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +46.570996,0.172830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +46.571170,0.177309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +46.571349,0.179869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +46.571530,0.179326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +46.571711,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +46.571890,0.188029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +46.572080,0.190685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +46.572272,0.189469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +46.572462,0.180349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +46.572644,0.180766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +46.572826,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +46.573010,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +46.573194,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +46.573376,0.182622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +46.573560,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +46.573743,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +46.573928,0.195197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +46.574125,0.180669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +46.574307,0.168766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +46.574477,0.180765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +46.574659,0.177949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +46.574838,0.177597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +46.575017,0.179294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +46.575197,0.179837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +46.575379,0.176605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +46.575556,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +46.575737,0.181822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +46.575920,0.185597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +46.576107,0.180157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +46.576289,0.178685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +46.576469,0.179038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +46.576649,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +46.576832,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +46.577012,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +46.577201,0.184797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +46.577387,0.192029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +46.577580,0.180766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +46.577762,0.196989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +46.577960,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +46.578158,0.204061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +46.578363,0.191677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +46.578556,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +46.578749,0.192317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +46.578943,0.195965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +46.579140,0.192445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +46.579334,0.191709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +46.579526,0.196029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +46.579724,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +46.579917,0.172893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +46.580091,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +46.580255,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +46.580419,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +46.580583,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +46.580748,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +46.580911,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +46.581075,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +46.581239,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +46.581403,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +46.581567,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +46.581732,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +46.581896,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +46.582060,0.171422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +46.582232,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +46.582396,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +46.582561,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +46.582725,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +46.582889,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +46.583053,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +46.583217,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +46.583382,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +46.583546,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +46.583710,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +46.583874,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +46.584038,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +46.584202,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +46.584367,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +46.584531,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +46.584695,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +46.584859,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +46.585023,0.171614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +46.585196,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +46.585360,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +46.585525,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +46.585689,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +46.585853,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +46.586018,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +46.586182,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +46.586346,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +46.586510,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +46.586674,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +46.586838,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +46.587002,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +46.587167,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +46.587330,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +46.587494,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +46.587659,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +46.587823,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +46.587987,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +46.588151,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +46.588315,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +46.588480,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +46.588644,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +46.588808,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +46.588972,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +46.589136,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +46.589301,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +46.589465,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +46.589629,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +46.589793,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +46.589957,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +46.590122,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +46.590286,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +46.590450,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +46.590614,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +46.590778,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +46.590942,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +46.591107,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +46.591271,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +46.591435,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +46.591600,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +46.591764,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +46.591929,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +46.592093,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +46.592257,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +46.592422,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +46.592586,0.035455,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +46.592723,14.719905,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","67",,,"square",661 +46.607777,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +46.607787,14.010987,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","66",,,"reduce(float*, float*, float*, int)",668 +46.621912,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +46.621938,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +47.779507,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +47.779740,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +47.779976,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +47.780207,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +47.780443,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +47.780675,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +47.780905,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +47.781132,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +47.781360,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +47.781589,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +47.781816,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +47.782042,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +47.782269,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +47.782498,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +47.782723,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +47.782949,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +47.783175,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +47.783339,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +47.783503,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +47.783666,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +47.783830,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +47.783994,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +47.784158,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +47.784322,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +47.784486,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +47.784650,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +47.784815,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +47.784978,0.171709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +47.785151,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +47.785315,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +47.785479,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +47.785643,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +47.785808,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +47.785973,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +47.786137,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +47.786302,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +47.786466,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +47.786631,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +47.786796,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +47.786960,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +47.787125,0.166302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +47.787292,0.169661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +47.787463,0.165374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +47.787630,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +47.787796,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +47.787960,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +47.788125,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +47.788289,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +47.788454,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +47.788620,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +47.788788,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +47.788953,0.174045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +47.789128,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +47.789296,0.165790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +47.789463,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +47.789628,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +47.789793,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +47.789959,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +47.790125,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +47.790290,0.176254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +47.790468,0.193629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +47.790663,0.191037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +47.790855,0.195709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +47.791052,0.197469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +47.791251,0.193085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +47.791445,0.193885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +47.791640,0.198621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +47.791840,0.213820,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +47.792055,0.215229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +47.792271,0.207453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +47.792480,0.211549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +47.792693,0.213501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +47.792908,0.206044,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +47.793115,0.192605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +47.793309,0.173950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +47.793484,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +47.793650,0.171102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +47.793822,0.200509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +47.794024,0.201149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +47.794227,0.198141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +47.794426,0.209405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +47.794637,0.201309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +47.794839,0.203581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +47.795044,0.207581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +47.795253,0.211549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +47.795466,0.207197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +47.795674,0.209628,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +47.795885,0.207965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +47.796094,0.213949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +47.796310,0.211165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +47.796522,0.184541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +47.796708,0.170141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +47.796879,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +47.797043,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +47.797207,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +47.797372,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +47.797536,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +47.797700,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +47.797864,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +47.798028,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +47.798193,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +47.798356,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +47.798520,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +47.798684,0.174141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +47.798860,0.185469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +47.799046,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +47.799233,0.180574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +47.799415,0.193181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +47.799609,0.191037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +47.799802,0.191069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +47.799994,0.183485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +47.800179,0.185885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +47.800366,0.186493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +47.800554,0.186270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +47.800741,0.176637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +47.800919,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +47.801083,0.181246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +47.801266,0.189021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +47.801456,0.191837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +47.801649,0.194781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +47.801845,0.194301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +47.802041,0.194877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +47.802237,0.195741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +47.802434,0.191645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +47.802627,0.189853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +47.802818,0.190141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +47.803009,0.195357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +47.803206,0.190109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +47.803397,0.176062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +47.803575,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +47.803759,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +47.803947,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +47.804134,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +47.804318,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +47.804502,0.184830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +47.804688,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +47.804873,0.187069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +47.805061,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +47.805242,0.181693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +47.805425,0.181438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +47.805608,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +47.805790,0.182077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +47.805973,0.194173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +47.806169,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +47.806354,0.186525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +47.806542,0.182878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +47.806726,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +47.806908,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +47.807090,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +47.807271,0.183614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +47.807456,0.181853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +47.807639,0.176125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +47.807816,0.103263,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +47.808114,15.151289,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","68",,,"square",680 +47.808522,0.076799,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +47.808663,0.197725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +47.808862,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +47.809053,0.199581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +47.809254,0.190269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +47.809445,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +47.809637,0.194269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +47.809833,0.190654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +47.810025,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +47.810214,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +47.810403,0.183901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +47.810588,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +47.810775,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +47.810967,0.192381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +47.811160,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +47.811350,0.185566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +47.811537,0.185021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +47.811723,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +47.811907,0.184733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +47.812093,0.190429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +47.812285,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +47.812469,0.182302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +47.812653,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +47.812835,0.175997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +47.813013,0.167966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +47.813182,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +47.813362,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +47.813546,0.177949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +47.813725,0.178878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +47.813905,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +47.814091,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +47.814279,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +47.814462,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +47.814643,0.184990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +47.814829,0.184669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +47.815015,0.176765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +47.815193,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +47.815375,0.180446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +47.815557,0.182621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +47.815741,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +47.815925,0.185245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +47.816111,0.173245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +47.816286,0.179102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +47.816466,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +47.816649,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +47.816832,0.178653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +47.817012,0.178462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +47.817191,0.179389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +47.817372,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +47.817554,0.180509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +47.817736,0.187230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +47.817924,0.180413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +47.818106,0.181533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +47.818289,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +47.818470,0.180862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +47.818652,0.180157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +47.818834,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +47.819017,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +47.819208,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +47.819397,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +47.819583,0.190909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +47.819775,0.197725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +47.819974,0.204541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +47.820180,0.195357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +47.820376,0.193885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +47.820572,0.194557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +47.820767,0.189438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +47.820958,0.189086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +47.821148,0.191581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +47.821341,0.197885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +47.821540,0.194109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +47.821735,0.182589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +47.821919,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +47.822083,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +47.822247,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +47.822410,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +47.822575,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +47.822738,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +47.822902,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +47.823067,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +47.823231,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +47.823395,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +47.823559,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +47.823723,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +47.823887,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +47.824051,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +47.824215,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +47.824379,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +47.824544,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +47.824708,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +47.824873,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +47.825038,0.171453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +47.825210,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +47.825375,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +47.825539,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +47.825703,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +47.825868,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +47.826032,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +47.826196,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +47.826361,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +47.826525,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +47.826689,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +47.826853,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +47.827018,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +47.827182,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +47.827346,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +47.827511,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +47.827675,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +47.827839,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +47.828003,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +47.828167,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +47.828331,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +47.828496,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +47.828660,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +47.828824,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +47.828989,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +47.829152,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +47.829317,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +47.829482,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +47.829646,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +47.829811,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +47.829974,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +47.830139,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +47.830303,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +47.830467,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +47.830632,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +47.830796,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +47.830960,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +47.831124,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +47.831288,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +47.831452,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +47.831617,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +47.831781,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +47.831945,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +47.832109,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +47.832273,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +47.832437,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +47.832601,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +47.832765,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +47.832929,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +47.833093,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +47.833257,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +47.833422,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +47.833586,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +47.833751,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +47.833915,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +47.834079,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +47.834243,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +47.834407,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +47.834571,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +47.834735,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +47.834899,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +47.835063,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +47.835228,0.035551,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +47.835346,14.698081,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","69",,,"square",686 +47.850344,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +47.850355,14.016203,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","68",,,"reduce(float*, float*, float*, int)",693 +47.864469,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +47.864495,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +49.039535,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +49.039699,0.162173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +49.039862,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +49.040026,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +49.040190,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +49.040354,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +49.040518,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +49.040682,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +49.040846,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +49.041010,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +49.041174,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +49.041338,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +49.041502,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +49.041666,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +49.041830,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +49.041993,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +49.042158,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +49.042322,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +49.042486,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +49.042650,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +49.042814,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +49.042978,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +49.043143,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +49.043307,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +49.043471,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +49.043636,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +49.043800,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +49.043964,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +49.044128,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +49.044292,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +49.044457,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +49.044621,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +49.044785,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +49.044949,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +49.045114,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +49.045278,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +49.045443,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +49.045608,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +49.045772,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +49.045936,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +49.046101,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +49.046265,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +49.046432,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +49.046598,0.169629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +49.046768,0.165054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +49.046935,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +49.047100,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +49.047264,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +49.047428,0.165438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +49.047595,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +49.047760,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +49.047923,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +49.048087,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +49.048252,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +49.048416,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +49.048581,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +49.048745,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +49.048909,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +49.049073,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +49.049237,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +49.049401,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +49.049567,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +49.049731,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +49.049896,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +49.050087,0.202301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +49.050291,0.202429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +49.050495,0.218204,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +49.050715,0.208701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +49.050925,0.214237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +49.051140,0.207901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +49.051349,0.210589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +49.051561,0.214908,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +49.051777,0.206749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +49.051985,0.211485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +49.052198,0.205661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +49.052405,0.216156,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +49.052622,0.200573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +49.052824,0.209341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +49.053035,0.183517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +49.053220,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +49.053385,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +49.053551,0.194269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +49.053747,0.205917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +49.053954,0.205693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +49.054161,0.212925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +49.054375,0.200861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +49.054577,0.205469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +49.054784,0.203101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +49.054988,0.203101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +49.055193,0.212733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +49.055407,0.208669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +49.055617,0.202013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +49.055820,0.200285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +49.056022,0.213981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +49.056237,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +49.056416,0.165949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +49.056583,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +49.056747,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +49.056911,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +49.057076,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +49.057240,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +49.057404,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +49.057569,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +49.057733,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +49.057897,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +49.058062,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +49.058225,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +49.058389,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +49.058555,0.184030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +49.058740,0.186909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +49.058928,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +49.059114,0.195325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +49.059310,0.191069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +49.059503,0.190269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +49.059694,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +49.059880,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +49.060062,0.186142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +49.060250,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +49.060437,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +49.060624,0.169693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +49.060794,0.168446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +49.060964,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +49.061151,0.187005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +49.061339,0.186301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +49.061527,0.190461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +49.061718,0.189213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +49.061909,0.193757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +49.062104,0.194077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +49.062299,0.183710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +49.062484,0.196029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +49.062681,0.198749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +49.062881,0.196989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +49.063080,0.178525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +49.063259,0.172221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +49.063433,0.176318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +49.063610,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +49.063793,0.177693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +49.063972,0.172989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +49.064146,0.175838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +49.064323,0.182333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +49.064506,0.176573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +49.064684,0.177438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +49.064863,0.176637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +49.065041,0.174621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +49.065217,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +49.065394,0.175518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +49.065570,0.176861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +49.065748,0.174397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +49.065924,0.179422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +49.066105,0.181661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +49.066287,0.178429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +49.066467,0.175773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +49.066644,0.104799,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +49.066943,15.188313,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","70",,,"square",705 +49.067341,0.075103,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +49.067486,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +49.067669,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +49.067848,0.174974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +49.068025,0.180830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +49.068207,0.177085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +49.068385,0.176317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +49.068563,0.175166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +49.068739,0.179133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +49.068920,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +49.069109,0.178685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +49.069289,0.176574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +49.069466,0.178301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +49.069646,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +49.069825,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +49.070008,0.175134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +49.070185,0.178493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +49.070365,0.175325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +49.070541,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +49.070725,0.177214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +49.070903,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +49.071085,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +49.071268,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +49.071451,0.182846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +49.071635,0.176157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +49.071813,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +49.071996,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +49.072179,0.179326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +49.072360,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +49.072540,0.176765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +49.072718,0.177566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +49.072897,0.173310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +49.073071,0.167485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +49.073240,0.175550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +49.073417,0.174813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +49.073593,0.175773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +49.073770,0.178014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +49.073949,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +49.074136,0.180157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +49.074317,0.174685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +49.074493,0.173374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +49.074668,0.173629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +49.074842,0.175037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +49.075019,0.185821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +49.075206,0.174654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +49.075382,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +49.075565,0.173213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +49.075739,0.175102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +49.075915,0.178301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +49.076095,0.186557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +49.076283,0.174045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +49.076458,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +49.076623,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +49.076802,0.174718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +49.076978,0.183613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +49.077163,0.173405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +49.077337,0.174301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +49.077513,0.174750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +49.077689,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +49.077864,0.176797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +49.078042,0.183934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +49.078227,0.176701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +49.078405,0.173501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +49.078580,0.175198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +49.078756,0.171646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +49.078929,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +49.079112,0.175037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +49.079288,0.173054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +49.079462,0.173085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +49.079636,0.176733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +49.079814,0.177278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +49.079993,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +49.080172,0.192381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +49.080366,0.188573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +49.080556,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +49.080751,0.197277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +49.080949,0.196477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +49.081147,0.191133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +49.081339,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +49.081529,0.195581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +49.081726,0.193021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +49.081920,0.197853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +49.082120,0.192062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +49.082313,0.168030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +49.082482,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +49.082646,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +49.082810,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +49.082974,0.171934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +49.083147,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +49.083311,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +49.083476,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +49.083640,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +49.083804,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +49.083968,0.171806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +49.084141,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +49.084305,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +49.084469,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +49.084634,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +49.084798,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +49.084962,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +49.085127,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +49.085291,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +49.085456,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +49.085620,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +49.085784,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +49.085948,0.172094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +49.086121,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +49.086285,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +49.086449,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +49.086613,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +49.086777,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +49.086941,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +49.087106,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +49.087271,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +49.087434,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +49.087598,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +49.087763,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +49.087927,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +49.088091,0.171741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +49.088264,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +49.088428,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +49.088592,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +49.088756,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +49.088920,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +49.089084,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +49.089248,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +49.089412,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +49.089577,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +49.089741,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +49.089905,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +49.090070,0.171357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +49.090242,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +49.090406,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +49.090570,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +49.090735,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +49.090899,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +49.091063,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +49.091227,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +49.091391,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +49.091555,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +49.091719,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +49.091883,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +49.092048,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +49.092212,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +49.092376,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +49.092540,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +49.092705,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +49.092869,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +49.093033,0.171933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +49.093206,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +49.093370,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +49.093535,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +49.093699,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +49.093863,0.035584,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +49.093981,14.709921,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","71",,,"square",711 +49.109020,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +49.109031,14.034347,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","70",,,"reduce(float*, float*, float*, int)",718 +49.123161,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +49.123187,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +50.283077,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +50.283241,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +50.283404,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +50.283568,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +50.283732,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +50.283895,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +50.284059,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +50.284223,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +50.284387,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +50.284551,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +50.284715,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +50.284879,0.162206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +50.285042,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +50.285206,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +50.285370,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +50.285534,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +50.285698,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +50.285863,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +50.286026,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +50.286190,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +50.286354,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +50.286518,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +50.286682,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +50.286846,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +50.287011,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +50.287175,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +50.287339,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +50.287503,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +50.287667,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +50.287832,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +50.287996,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +50.288160,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +50.288326,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +50.288490,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +50.288654,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +50.288819,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +50.288984,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +50.289148,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +50.289312,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +50.289476,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +50.289641,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +50.289805,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +50.289969,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +50.290134,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +50.290302,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +50.290470,0.168350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +50.290639,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +50.290806,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +50.290973,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +50.291138,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +50.291304,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +50.291470,0.166814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +50.291637,0.166173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +50.291805,0.165118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +50.291971,0.166237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +50.292139,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +50.292304,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +50.292468,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +50.292634,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +50.292800,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +50.292965,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +50.293129,0.166910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +50.293298,0.205116,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +50.293504,0.208125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +50.293713,0.212125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +50.293927,0.212381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +50.294140,0.218332,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +50.294360,0.215837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +50.294577,0.197117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +50.294775,0.212477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +50.294989,0.210877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +50.295201,0.209148,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +50.295412,0.209277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +50.295623,0.215805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +50.295840,0.203421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +50.296044,0.212669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +50.296259,0.202396,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +50.296462,0.168254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +50.296632,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +50.296798,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +50.296989,0.198685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +50.297189,0.210429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +50.297400,0.205469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +50.297607,0.207837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +50.297816,0.201917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +50.298019,0.215165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +50.298236,0.189565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +50.298426,0.207004,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +50.298635,0.205117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +50.298841,0.204413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +50.299047,0.205597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +50.299254,0.205373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +50.299460,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +50.299644,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +50.299812,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +50.299976,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +50.300140,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +50.300305,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +50.300469,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +50.300634,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +50.300798,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +50.300962,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +50.301126,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +50.301290,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +50.301454,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +50.301618,0.197309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +50.301817,0.191773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +50.302010,0.183485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +50.302195,0.181054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +50.302377,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +50.302567,0.195997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +50.302764,0.189693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +50.302955,0.200957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +50.303158,0.201309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +50.303360,0.202813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +50.303564,0.188253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +50.303754,0.187869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +50.303943,0.186269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +50.304130,0.180317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +50.304312,0.191421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +50.304505,0.191901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +50.304698,0.196509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +50.304895,0.189277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +50.305086,0.189918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +50.305277,0.193981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +50.305473,0.201693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +50.305675,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +50.305864,0.192029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +50.306058,0.192605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +50.306251,0.189085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +50.306442,0.182333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +50.306625,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +50.306808,0.179550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +50.306989,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +50.307176,0.190845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +50.307368,0.190461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +50.307559,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +50.307749,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +50.307936,0.180797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +50.308118,0.184062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +50.308303,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +50.308482,0.180189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +50.308664,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +50.308849,0.183646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +50.309034,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +50.309214,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +50.309405,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +50.309592,0.179837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +50.309773,0.182110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +50.309956,0.180158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +50.310138,0.179037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +50.310318,0.184509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +50.310504,0.107967,,,,,,,,,,"GeForce GTX 960 (0)",,,1232896.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +50.310811,15.172923,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","72",,,"square",730 +50.311172,0.071487,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1118140000","[Unified Memory Memcpy HtoD]", +50.311301,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +50.311483,0.182078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +50.311666,0.187549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +50.311855,0.189661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +50.312046,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +50.312229,0.183517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +50.312413,0.184637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +50.312599,0.185470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +50.312786,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +50.312971,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +50.313153,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +50.313340,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +50.313527,0.185981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +50.313714,0.189534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +50.313905,0.188253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +50.314095,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +50.314281,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +50.314465,0.186493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +50.314652,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +50.314837,0.187390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +50.315026,0.185374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +50.315213,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +50.315396,0.184477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +50.315582,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +50.315764,0.169630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +50.315934,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +50.316116,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +50.316297,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +50.316478,0.179230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +50.316658,0.185597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +50.316845,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +50.317028,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +50.317211,0.181854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +50.317394,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +50.317577,0.185469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +50.317764,0.176029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +50.317941,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +50.318123,0.180670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +50.318305,0.182013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +50.318488,0.184541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +50.318674,0.185597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +50.318861,0.171582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +50.319034,0.177213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +50.319212,0.183421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +50.319397,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +50.319578,0.179422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +50.319758,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +50.319939,0.177533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +50.320118,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +50.320300,0.180990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +50.320482,0.185181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +50.320668,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +50.320853,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +50.321034,0.180350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +50.321216,0.181598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +50.321399,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +50.321581,0.180413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +50.321763,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +50.321945,0.188926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +50.322135,0.184989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +50.322321,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +50.322515,0.195485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +50.322712,0.199037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +50.322912,0.191933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +50.323105,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +50.323297,0.190589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +50.323489,0.191069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +50.323681,0.192861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +50.323875,0.193725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +50.324071,0.198973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +50.324271,0.192349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +50.324464,0.184669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +50.324650,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +50.324814,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +50.324978,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +50.325141,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +50.325305,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +50.325470,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +50.325634,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +50.325798,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +50.325962,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +50.326126,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +50.326290,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +50.326454,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +50.326619,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +50.326783,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +50.326947,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +50.327110,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +50.327275,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +50.327439,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +50.327603,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +50.327768,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +50.327932,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +50.328096,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +50.328259,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +50.328423,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +50.328587,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +50.328751,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +50.328915,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +50.329079,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +50.329243,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +50.329407,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +50.329571,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +50.329736,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +50.329901,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +50.330064,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +50.330228,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +50.330393,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +50.330556,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +50.330721,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +50.330885,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +50.331049,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +50.331213,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +50.331377,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +50.331541,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +50.331705,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +50.331869,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +50.332033,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +50.332197,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +50.332362,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +50.332526,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +50.332690,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +50.332854,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +50.333018,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +50.333182,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +50.333347,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +50.333511,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +50.333675,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +50.333839,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +50.334003,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +50.334168,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +50.334332,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +50.334496,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +50.334661,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +50.334824,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +50.334988,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +50.335152,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +50.335317,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +50.335481,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +50.335645,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +50.335810,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +50.335974,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +50.336139,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +50.336302,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +50.336467,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +50.336631,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +50.336795,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +50.336959,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +50.337123,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +50.337288,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +50.337452,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +50.337617,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +50.337781,0.035263,,,,,,,,,,"GeForce GTX 960 (0)",,,446464.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +50.337898,14.695426,64,1,1,32,1,1,8,0,0,"GeForce GTX 960 (0)","1","73",,,"square",736 +50.352952,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +50.352966,13.978221,64,1,1,32,1,1,11,0,0,"GeForce GTX 960 (0)","1","72",,,"reduce(float*, float*, float*, int)",743 +50.367025,,,,,,,,,,,,,,"PC 0x4fb458ae","0x1100a80000","[Unified Memory CPU page faults]", +50.367052,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", diff --git a/data/nvprof_log/2020_07_20/b5_808.csv b/data/nvprof_log/2020_07_20/b5_808.csv new file mode 100644 index 00000000..1ba1b59b --- /dev/null +++ b/data/nvprof_log/2020_07_20/b5_808.csv @@ -0,0 +1,12935 @@ +==808== NVPROF is profiling process 808, command: java -classpath /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -XX:MaxHeapSize=24G com.oracle.g +==808== Profiling application: java -classpath /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -XX:MaxHeapSize=24G com.oracle.g +==808== Profiling result: +"Start","Duration","Grid X","Grid Y","Grid Z","Block X","Block Y","Block Z","Registers Per Thread","Static SMem","Dynamic SMem","Device","Context","Stream","Unified Memory","Virtual Address","Name","Correlation_ID" +s,ms,,,,,,,,B,B,,,,B,,, +8.846326,0.167648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +8.846495,0.171968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +8.846668,0.172128,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +8.846842,0.171744,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +8.847015,0.173696,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +8.847190,0.166720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +8.847358,0.165984,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +8.847525,0.176128,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +8.847702,0.165696,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +8.847869,0.167552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +8.848038,0.171232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +8.848210,0.178624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +8.848390,0.218848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +8.848610,0.220032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +8.848831,0.223616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +8.849056,0.229056,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +8.849287,0.219872,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +8.849508,0.225632,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +8.849735,0.222560,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +8.849959,0.213024,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +8.850173,0.212608,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +8.850387,0.221408,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +8.850610,0.229312,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +8.850840,0.220768,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +8.851062,0.210560,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +8.851274,0.218848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +8.851494,0.202112,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +8.851698,0.207296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +8.851906,0.168384,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +8.852076,0.166112,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +8.852243,0.183808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +8.852428,0.204832,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +8.852635,0.203040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +8.852839,0.205888,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +8.853046,0.215840,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +8.853264,0.225056,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +8.853490,0.223968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +8.853716,0.234016,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +8.853951,0.032064,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +8.854184,0.149312,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +8.854335,0.240704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +8.854577,0.249344,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +8.854827,0.237536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +8.855066,0.245056,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +8.855313,0.239104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +8.855553,0.241728,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +8.855796,0.225664,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +8.856023,0.177728,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +8.856202,0.172288,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +8.856375,0.169344,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +8.856546,0.174784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +8.856722,0.183648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +8.856907,0.173184,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +8.857081,0.168032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +8.857250,0.171520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +8.857423,0.169728,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +8.857594,0.167168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +8.857762,0.164704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +8.857928,0.170752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +8.858100,0.176320,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +8.858278,0.166144,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +8.858445,0.170496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +8.858617,0.232864,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +8.858851,0.200352,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +8.859053,0.199072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +8.859253,0.203264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +8.859459,0.235552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +8.859696,0.201920,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +8.859899,0.200160,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +8.860100,0.231040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +8.860333,0.208800,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +8.860543,0.206464,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +8.860750,0.196832,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +8.860949,0.249184,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +8.861199,0.216800,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +8.861417,0.199200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +8.861618,0.202880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +8.861822,0.131744,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +8.861955,0.045952,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +8.862002,0.164576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +8.862168,0.196768,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +8.862366,0.204320,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +8.862572,0.239040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +8.862812,0.204736,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +8.863018,0.202112,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +8.863222,0.199552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +8.863422,0.202272,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +8.863626,0.208352,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +8.863835,0.211456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +8.864048,0.203200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +8.864253,0.211264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +8.864465,0.209952,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +8.864676,0.211104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +8.864889,0.209280,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +8.865099,0.203872,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +8.865305,0.200032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +8.865506,0.197696,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +8.865705,0.196480,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +8.865902,0.206272,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +8.866110,0.199488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +8.866311,0.197696,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +8.866510,0.205760,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +8.866717,0.197536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +8.866916,0.201824,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +8.867119,0.194752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +8.867315,0.193216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +8.867509,0.197376,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +8.867708,0.191200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +8.867901,0.195552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +8.868098,0.197856,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +8.868297,0.187680,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +8.868486,0.198432,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +8.868686,0.198144,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +8.868885,0.199552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +8.869086,0.199264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +8.869287,0.198624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +8.869487,0.172448,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +8.869661,0.169440,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +8.869831,0.195584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +8.870028,0.191840,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +8.870221,0.197152,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +8.870420,0.197664,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +8.870619,0.197600,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +8.870818,0.195424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +8.871014,0.194368,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +8.871210,0.194080,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +8.871405,0.192896,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +8.871600,0.199456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +8.871801,0.198208,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +8.872000,0.193184,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +8.872194,0.192032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +8.872388,0.201216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +8.872590,0.194336,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +8.872786,0.198976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +8.872986,0.195488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +8.873183,0.194432,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +8.873379,0.190336,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +8.873570,0.184096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +8.873755,0.189760,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +8.873947,0.183872,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +8.874132,0.184000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +8.874317,0.173952,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +8.874492,0.165248,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +8.874658,0.165856,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +8.874826,0.165920,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +8.874993,0.165856,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +8.875160,0.165952,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +8.875327,0.166144,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +8.875494,0.165792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +8.875661,0.166176,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +8.875828,0.166144,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +8.875996,0.165952,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +8.876163,0.166944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +8.876331,0.166048,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +8.876498,0.166496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +8.876666,0.046944,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +8.876714,0.083840,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +8.876799,0.165504,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +8.876966,0.167104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +8.877134,0.165184,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +8.877301,0.166304,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +8.877468,0.166880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +8.877636,0.166816,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +8.877804,0.166464,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +8.877972,0.166592,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +8.878140,0.167040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +8.878308,0.165600,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +8.878475,0.165568,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +8.878642,0.166400,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +8.878809,0.165760,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +8.878976,0.164960,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +8.879142,0.165792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +8.879309,0.165088,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +8.879476,0.165952,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +8.879643,0.164384,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +8.879808,0.164544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +8.879974,0.164448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +8.880140,0.185952,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +8.880327,0.194816,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +8.880523,0.190752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +8.880715,0.192864,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +8.880909,0.191328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +8.881102,0.187072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +8.881290,0.182720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +8.881475,0.183904,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +8.881660,0.184896,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +8.881846,0.189856,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +8.882037,0.184064,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +8.882222,0.187648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +8.882411,0.180096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +8.882593,0.182368,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +8.882776,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +8.882940,0.162464,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +8.883104,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +8.883268,0.105728,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +8.883375,0.021280,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +8.883397,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +8.883562,0.162688,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +8.883726,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +8.883890,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +8.884054,0.163392,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +8.884219,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +8.884383,0.180480,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +8.884565,0.168096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +8.884734,0.185952,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +8.884921,0.194112,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +8.885117,0.195776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +8.885314,0.183040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +8.885498,0.182880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +8.885682,0.188992,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +8.885872,0.189312,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +8.886063,0.182496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +8.886247,0.185728,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +8.886434,0.188608,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +8.886624,0.186784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +8.886812,0.188032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +8.887001,0.187712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +8.887190,0.175200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +8.887367,0.169984,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +8.887538,0.179776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +8.887719,0.178336,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +8.887898,0.183712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +8.888083,0.177408,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +8.888262,0.184576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +8.888448,0.183680,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +8.888633,0.188736,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +8.888823,0.180704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +8.889005,0.176704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +8.889183,0.175744,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +8.889360,0.178176,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +8.889539,0.176672,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +8.889717,0.179648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +8.889898,0.175488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +8.890075,0.182144,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +8.890258,0.005472,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +8.890265,0.136480,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +8.890402,0.166624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +8.890570,0.164544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +8.890736,0.163456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +8.890901,0.163872,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +8.891066,0.163488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +8.891230,0.168608,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +8.891400,0.169920,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +8.891571,0.167200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +8.891740,0.170944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +8.891912,0.172704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +8.892086,0.167616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +8.892255,0.173632,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +8.892430,0.177632,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +8.892608,0.174528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +8.892784,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +8.892949,0.164576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +8.893114,0.192544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +8.893308,0.194400,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +8.893504,0.193600,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +8.893699,0.190656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +8.893890,0.190528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +8.894082,0.193440,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +8.894277,0.192832,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +8.894471,0.187008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +8.894660,0.191584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +8.894852,0.191136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +8.895045,0.186304,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +8.895232,0.188736,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +8.895422,0.191552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +8.895615,0.194176,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +8.895811,0.192000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +8.896004,0.189600,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +8.896195,0.186912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +8.896383,0.188256,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +8.896572,0.191744,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +8.896765,0.188320,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +8.896955,0.198624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +8.897155,0.076288,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +8.897232,0.070912,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +8.897304,0.176928,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +8.897482,0.163968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +8.897648,0.192160,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +8.897841,0.197472,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +8.898040,0.198368,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +8.898240,0.193376,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +8.898434,0.201440,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +8.898637,0.198496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +8.898837,0.197472,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +8.899035,0.197824,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +8.899235,0.194400,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +8.899430,0.209536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +8.899641,0.199200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +8.899842,0.192032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +8.900035,0.187424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +8.900224,0.179840,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +8.900405,0.184672,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +8.900591,0.194048,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +8.900786,0.185920,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +8.900973,0.184160,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +8.901158,0.187328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +8.901347,0.183840,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +8.901532,0.180352,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +8.901714,0.187552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +8.901902,0.182528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +8.902086,0.180128,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +8.902267,0.187040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +8.902456,0.181760,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +8.902638,0.180544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +8.902820,0.187200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +8.903009,0.184704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +8.903195,0.186720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +8.903383,0.177216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +8.903561,0.180320,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +8.903743,0.180256,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +8.903924,0.180160,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +8.904106,0.181664,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +8.904289,0.141664,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +8.904432,0.177344,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +8.904610,0.171232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +8.904783,0.170656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +8.904955,0.170976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +8.905127,0.168064,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +8.905296,0.167424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +8.905465,0.165824,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +8.905632,0.166016,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +8.905799,0.167008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +8.905967,0.166528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +8.906135,0.167424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +8.906303,0.166560,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +8.906471,0.166400,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +8.906639,0.165216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +8.906805,0.164544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +8.906971,0.165216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +8.907137,0.165312,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +8.907304,0.165248,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +8.907470,0.171360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +8.907643,0.162912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +8.907807,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +8.907971,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +8.908135,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +8.908300,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +8.908463,0.171200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +8.908636,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +8.908800,0.162528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +8.908964,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +8.909128,0.162624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +8.909292,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +8.909456,0.163712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +8.909621,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +8.909785,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +8.909949,0.162592,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +8.910113,0.163584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +8.910278,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +8.910442,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +8.910606,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +8.910771,0.025024,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +8.910797,0.102560,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +8.910900,0.162720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +8.911064,0.162912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +8.911228,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +8.911393,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +8.911557,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +8.911722,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +8.911886,0.162656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +8.912050,0.162720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +8.912214,0.162624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +8.912377,0.162656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +8.912541,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +8.912706,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +8.912870,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +8.913034,0.163584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +8.913199,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +8.913363,0.162624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +8.913527,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +8.913691,0.162912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +8.913856,0.162912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +8.914020,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +8.914185,0.162720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +8.914349,0.162848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +8.914513,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +8.914677,0.162912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +8.914842,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +8.915006,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +8.915170,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +8.915335,0.162720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +8.915499,0.162656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +8.915663,0.162464,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +8.915826,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +8.915991,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +8.916155,0.162592,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +8.916319,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +8.916483,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +8.916647,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +8.916811,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +8.916976,0.085664,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +8.917052,41.754466,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","14",,,"bs",5 +8.937889,41.481350,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","15",,,"bs",11 +8.958908,40.604659,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","16",,,"bs",17 +8.959649,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +8.959809,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +8.959810,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +8.979525,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +8.979689,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +8.979690,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +8.998486,39.752897,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","17",,,"bs",23 +8.999584,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +8.999738,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +8.999739,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +9.018491,39.944926,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","18",,,"bs",29 +9.038301,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +9.038454,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +9.038455,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +9.038820,40.143162,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","19",,,"bs",35 +9.058495,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +9.058646,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +9.058647,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +9.076989,40.207898,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","20",,,"bs",41 +9.079007,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +9.079160,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +9.079161,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +9.097421,40.100924,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","21",,,"bs",47 +9.117236,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +9.117386,0.001376,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +9.117388,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +9.118226,40.263065,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","22",,,"bs",53 +9.137560,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +9.137712,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +9.137713,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +9.155552,27.851831,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","23",,,"bs",59 +9.158526,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +9.158678,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +9.158679,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +9.183444,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +9.183597,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +9.183599,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +11.092037,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +11.092201,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +11.092365,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +11.092529,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +11.092692,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +11.092856,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +11.093019,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +11.093184,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +11.093348,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +11.093511,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +11.093675,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +11.093840,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +11.094004,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +11.094168,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +11.094332,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +11.094495,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +11.094659,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +11.094823,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +11.094987,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +11.095151,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +11.095315,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +11.095480,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +11.095644,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +11.095807,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +11.095972,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +11.096136,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +11.096300,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +11.096464,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +11.096628,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +11.096792,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +11.096956,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +11.097121,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +11.097285,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +11.097449,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +11.097613,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +11.097777,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +11.097941,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +11.098105,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +11.098269,0.024992,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +11.098411,39.574499,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","24",,,"bs",87 +11.098741,0.102238,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +11.098845,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +11.099011,0.166845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +11.099179,0.167166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +11.099347,0.165341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +11.099513,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +11.099680,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +11.099845,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +11.100009,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +11.100173,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +11.100337,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +11.100503,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +11.100668,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +11.100833,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +11.100998,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +11.101162,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +11.101327,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +11.101493,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +11.101658,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +11.101823,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +11.101987,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +11.102151,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +11.102315,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +11.102480,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +11.102645,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +11.102811,0.200701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +11.103013,0.203005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +11.103217,0.219292,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +11.103438,0.204061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +11.103643,0.207005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +11.103851,0.202269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +11.104055,0.200509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +11.104256,0.201917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +11.104459,0.210204,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +11.104671,0.211901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +11.104884,0.205629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +11.105091,0.205597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +11.105298,0.206813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +11.105506,0.107550,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +11.106119,0.042144,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +11.106221,0.192669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +11.106415,0.219548,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +11.106636,0.214237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +11.106852,0.212189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +11.107065,0.217372,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +11.107284,0.212445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +11.107498,0.213917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +11.107713,0.208125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +11.107923,0.211580,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +11.108136,0.227581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +11.108364,0.213629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +11.108579,0.220156,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +11.108801,0.229437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +11.109032,0.221724,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +11.109254,0.214269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +11.109470,0.213725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +11.109685,0.168925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +11.109855,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +11.110019,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +11.110185,0.167966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +11.110354,0.166365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +11.110521,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +11.110686,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +11.110852,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +11.111017,0.164542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +11.111182,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +11.111347,0.167742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +11.111516,0.168701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +11.111686,0.167166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +11.111855,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +11.112019,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +11.112202,0.202045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +11.112406,0.189501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +11.112597,0.198237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +11.112796,0.192413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +11.112990,0.190781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +11.113182,0.200573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +11.113384,0.169822,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +11.114253,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +11.114417,0.209917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +11.114629,0.202301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +11.114832,0.207933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +11.115041,0.202813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +11.115245,0.197917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +11.115445,0.204733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +11.115651,0.204189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +11.115856,0.197757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +11.116055,0.203389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +11.116260,0.198909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +11.116460,0.199197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +11.116660,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +11.116848,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +11.117037,0.189054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +11.117228,0.184989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +11.117414,0.188125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +11.117603,0.188797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +11.117793,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +11.117984,0.186909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +11.118129,39.742689,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","25",,,"bs",93 +11.118172,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +11.118359,0.185693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +11.118546,0.183422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +11.118730,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +11.118910,0.180765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +11.119092,0.180733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +11.119274,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +11.119458,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +11.119654,0.186814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +11.119842,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +11.120023,0.183485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +11.120207,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +11.120388,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +11.120575,0.178558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +11.120755,0.180509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +11.120936,0.182781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +11.121120,0.179069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +11.121301,0.179870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +11.121482,0.050527,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +11.121945,0.095359,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +11.122049,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +11.122236,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +11.122419,0.188541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +11.122608,0.182398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +11.122792,0.185405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +11.122979,0.184317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +11.123164,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +11.123347,0.185181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +11.123533,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +11.123720,0.187037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +11.123908,0.189662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +11.124099,0.188253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +11.124289,0.194461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +11.124485,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +11.124672,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +11.124856,0.185405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +11.125043,0.188605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +11.125232,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +11.125418,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +11.125612,0.186526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +11.125800,0.182493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +11.125983,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +11.126168,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +11.126350,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +11.126532,0.180894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +11.126714,0.184157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +11.126899,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +11.127080,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +11.127263,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +11.127444,0.178878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +11.127624,0.185565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +11.127811,0.181885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +11.127994,0.170941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +11.128166,0.167646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +11.128335,0.174749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +11.128511,0.174173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +11.128686,0.177342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +11.128865,0.114654,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +11.129395,0.025631,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +11.129499,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +11.129686,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +11.129876,0.182014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +11.130059,0.186814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +11.130247,0.178429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +11.130427,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +11.130610,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +11.130794,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +11.130983,0.180126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +11.131164,0.200317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +11.131366,0.194173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +11.131561,0.201660,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +11.131764,0.206269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +11.131972,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +11.132163,0.203453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +11.132367,0.190333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +11.132559,0.194301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +11.132754,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +11.132949,0.197597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +11.133147,0.192445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +11.133341,0.182590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +11.133525,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +11.133689,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +11.133853,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +11.134017,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +11.134182,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +11.134346,0.171677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +11.134519,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +11.134683,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +11.134847,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +11.135012,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +11.135176,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +11.135340,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +11.135504,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +11.135669,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +11.135833,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +11.135997,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +11.136161,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +11.136326,0.004832,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +11.136712,0.122686,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +11.136836,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +11.137000,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +11.137164,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +11.137329,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +11.137493,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +11.137657,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +11.137822,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +11.137986,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +11.138046,39.960094,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","26",,,"bs",99 +11.138151,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +11.138315,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +11.138480,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +11.138644,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +11.138808,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +11.138973,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +11.139137,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +11.139301,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +11.139465,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +11.139630,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +11.139794,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +11.139958,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +11.140122,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +11.140286,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +11.140451,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +11.140615,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +11.140780,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +11.140944,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +11.141108,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +11.141273,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +11.141437,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +11.141601,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +11.141765,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +11.141930,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +11.142094,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +11.142259,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +11.142423,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +11.142588,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +11.142751,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +11.142915,0.065343,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +11.143265,0.061887,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +11.143361,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +11.143525,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +11.143689,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +11.143854,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +11.144018,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +11.144182,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +11.144346,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +11.144510,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +11.144674,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +11.144839,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +11.145003,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +11.145167,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +11.145332,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +11.145496,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +11.145660,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +11.145824,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +11.145988,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +11.146153,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +11.146318,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +11.146482,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +11.146646,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +11.146810,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +11.146974,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +11.147138,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +11.147303,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +11.147468,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +11.147632,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +11.147796,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +11.147961,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +11.148125,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +11.148290,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +11.148454,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +11.148618,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +11.148783,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +11.148947,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +11.149112,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +11.149276,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +11.149440,0.126590,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +11.149894,0.166590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +11.150061,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +11.150228,0.165534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +11.150394,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +11.150560,0.164766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +11.150727,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +11.150892,0.166846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +11.151060,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +11.151226,0.165438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +11.151392,0.167933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +11.151562,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +11.151728,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +11.151894,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +11.152063,0.165502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +11.152230,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +11.152397,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +11.152563,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +11.152728,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +11.152893,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +11.153057,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +11.153221,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +11.153385,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +11.153550,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +11.153714,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +11.153879,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +11.154044,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +11.154208,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +11.154372,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +11.154536,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +11.154701,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +11.154865,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +11.155029,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +11.155194,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +11.155358,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +11.155522,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +11.155687,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +11.155851,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +11.156016,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +11.156180,0.024960,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +11.156789,0.104254,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +11.156894,0.165022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +11.157061,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +11.157226,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +11.157390,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +11.157555,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +11.157719,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +11.157883,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +11.158047,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +11.158212,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +11.158376,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +11.158540,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +11.158705,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +11.158869,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +11.159033,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +11.159198,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +11.159363,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +11.159527,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +11.159691,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +11.159855,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +11.160019,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +11.160183,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +11.160347,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +11.160512,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +11.160677,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +11.160842,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +11.161007,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +11.161171,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +11.161335,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +11.161500,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +11.161664,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +11.161829,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +11.161993,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +11.162157,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +11.162321,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +11.162485,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +11.162649,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +11.162814,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +11.162978,0.085982,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +11.163429,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +11.163444,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +11.163446,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +11.163680,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +11.163692,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +11.163693,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +11.177018,39.586339,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","27",,,"bs",105 +11.178099,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +11.178115,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +11.178116,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +11.196900,40.188570,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","28",,,"bs",111 +11.216685,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +11.216702,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +11.216704,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +11.217310,40.283097,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","29",,,"bs",117 +11.237134,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +11.237146,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +11.237147,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +11.255581,39.819519,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","30",,,"bs",123 +11.257627,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +11.257638,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +11.257639,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +11.275842,40.566228,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","31",,,"bs",129 +11.295437,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +11.295447,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +11.295449,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +11.296572,40.421431,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","32",,,"bs",135 +11.316439,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +11.316449,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +11.316450,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +11.334107,31.018726,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","33",,,"bs",141 +11.337032,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +11.337043,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +11.337044,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +11.365157,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +11.365168,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +11.365169,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +13.066547,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +13.066710,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +13.066874,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +13.067038,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +13.067202,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +13.067366,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +13.067530,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +13.067694,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +13.067858,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +13.068022,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +13.068186,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +13.068350,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +13.068513,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +13.068677,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +13.068840,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +13.069004,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +13.069167,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +13.069332,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +13.069496,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +13.069660,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +13.069824,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +13.069988,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +13.070152,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +13.070315,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +13.070480,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +13.070643,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +13.070807,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +13.070971,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +13.071135,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +13.071300,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +13.071464,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +13.071628,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +13.071792,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +13.071956,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +13.072120,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +13.072284,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +13.072448,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +13.072612,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +13.072776,0.025055,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +13.073203,39.605283,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","34",,,"bs",169 +13.073532,0.103294,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +13.073637,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +13.073801,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +13.073965,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +13.074131,0.168765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +13.074301,0.174878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +13.074477,0.174941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +13.074653,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +13.074820,0.169406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +13.074990,0.167389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +13.075159,0.167646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +13.075328,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +13.075496,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +13.075662,0.165917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +13.075829,0.165341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +13.075995,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +13.076161,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +13.076328,0.165502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +13.076495,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +13.076661,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +13.076827,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +13.076992,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +13.077158,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +13.077324,0.172093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +13.077498,0.198525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +13.077697,0.213053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +13.077912,0.208765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +13.078122,0.211261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +13.078334,0.203421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +13.078539,0.205372,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +13.078746,0.198685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +13.078946,0.201117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +13.079148,0.208765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +13.079358,0.206685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +13.079566,0.207101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +13.079774,0.199997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +13.079976,0.201981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +13.080179,0.199164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +13.080379,0.087711,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +13.081105,0.055456,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +13.081216,0.211516,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +13.081429,0.208701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +13.081639,0.207645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +13.081848,0.207965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +13.082057,0.207005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +13.082265,0.202909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +13.082469,0.207036,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +13.082678,0.210269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +13.082889,0.214813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +13.083105,0.210525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +13.083317,0.203676,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +13.083522,0.196797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +13.083720,0.167550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +13.083889,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +13.084053,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +13.084218,0.168509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +13.084387,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +13.084552,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +13.084716,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +13.084881,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +13.085045,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +13.085209,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +13.085375,0.168958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +13.085545,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +13.085710,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +13.085873,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +13.086037,0.187613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +13.086227,0.198045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +13.086426,0.192157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +13.086619,0.199165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +13.086820,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +13.087006,0.197277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +13.087204,0.196829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +13.087403,0.191037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +13.087595,0.199965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +13.087796,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +13.087988,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +13.088177,0.156862,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +13.088967,0.172830,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +13.089141,0.199069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +13.089342,0.202524,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +13.089545,0.208509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +13.089755,0.201309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +13.089958,0.194781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +13.090154,0.202173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +13.090357,0.199965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +13.090559,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +13.090745,0.188029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +13.090935,0.187453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +13.091123,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +13.091311,0.183870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +13.091496,0.187805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +13.091686,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +13.091874,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +13.092063,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +13.092251,0.193981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +13.092447,0.184797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +13.092633,0.180157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +13.092814,0.182462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +13.092939,39.741184,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","35",,,"bs",175 +13.092998,0.181981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +13.093181,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +13.093365,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +13.093553,0.186877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +13.093741,0.182174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +13.093924,0.181438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +13.094107,0.179101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +13.094287,0.176701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +13.094465,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +13.094646,0.183454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +13.094830,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +13.095015,0.176189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +13.095193,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +13.095375,0.184158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +13.095560,0.180382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +13.095742,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +13.095924,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +13.096111,0.050527,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +13.096738,0.094175,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +13.096841,0.188029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +13.097030,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +13.097219,0.188893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +13.097409,0.185981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +13.097596,0.191325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +13.097789,0.189342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +13.097979,0.189053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +13.098170,0.188413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +13.098359,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +13.098544,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +13.098730,0.188573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +13.098920,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +13.099105,0.182910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +13.099290,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +13.099473,0.188253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +13.099663,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +13.099849,0.188829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +13.100039,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +13.100226,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +13.100412,0.183006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +13.100597,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +13.100781,0.180317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +13.100962,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +13.101146,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +13.101328,0.182910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +13.101512,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +13.101697,0.177821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +13.101876,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +13.102043,0.173150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +13.102218,0.175869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +13.102395,0.174909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +13.102571,0.176318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +13.102748,0.176573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +13.102926,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +13.103109,0.183389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +13.103293,0.179102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +13.103474,0.174365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +13.103649,0.115102,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +13.104194,0.025919,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +13.104295,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +13.104484,0.190781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +13.104676,0.190461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +13.104867,0.200445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +13.105069,0.204509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +13.105275,0.199165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +13.105475,0.197917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +13.105674,0.200317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +13.105876,0.197949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +13.106075,0.199357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +13.106276,0.193661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +13.106471,0.189245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +13.106662,0.196061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +13.106859,0.193213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +13.107053,0.192221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +13.107247,0.168221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +13.107416,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +13.107580,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +13.107745,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +13.107909,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +13.108074,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +13.108238,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +13.108402,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +13.108566,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +13.108731,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +13.108895,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +13.109060,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +13.109224,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +13.109388,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +13.109553,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +13.109718,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +13.109882,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +13.110046,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +13.110211,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +13.110375,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +13.110539,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +13.110704,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +13.110868,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +13.111033,0.004832,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +13.111446,0.122174,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +13.111569,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +13.111733,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +13.111897,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +13.112061,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +13.112225,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +13.112389,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +13.112554,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +13.112718,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +13.112809,39.990045,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","36",,,"bs",181 +13.112882,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +13.113046,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +13.113211,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +13.113375,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +13.113539,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +13.113703,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +13.113868,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +13.114032,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +13.114196,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +13.114360,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +13.114524,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +13.114688,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +13.114853,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +13.115017,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +13.115181,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +13.115346,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +13.115510,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +13.115674,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +13.115839,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +13.116003,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +13.116167,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +13.116331,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +13.116496,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +13.116660,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +13.116824,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +13.116989,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +13.117153,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +13.117317,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +13.117482,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +13.117646,0.065311,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +13.117992,0.061823,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +13.118087,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +13.118251,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +13.118415,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +13.118580,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +13.118744,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +13.118908,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +13.119072,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +13.119236,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +13.119401,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +13.119565,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +13.119729,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +13.119894,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +13.120058,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +13.120222,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +13.120386,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +13.120551,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +13.120715,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +13.120879,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +13.121043,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +13.121208,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +13.121372,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +13.121536,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +13.121701,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +13.121865,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +13.122029,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +13.122194,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +13.122359,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +13.122523,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +13.122688,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +13.122852,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +13.123017,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +13.123182,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +13.123346,0.167261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +13.123514,0.167806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +13.123683,0.166717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +13.123851,0.165758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +13.124018,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +13.124185,0.128510,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +13.124798,0.174749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +13.124974,0.170013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +13.125145,0.170686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +13.125317,0.167901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +13.125486,0.167038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +13.125654,0.166973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +13.125822,0.166878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +13.125990,0.166685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +13.126158,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +13.126325,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +13.126490,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +13.126654,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +13.126818,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +13.126982,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +13.127146,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +13.127310,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +13.127474,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +13.127638,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +13.127802,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +13.127967,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +13.128131,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +13.128295,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +13.128459,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +13.128623,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +13.128788,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +13.128953,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +13.129117,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +13.129281,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +13.129446,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +13.129610,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +13.129774,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +13.129938,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +13.130102,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +13.130266,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +13.130431,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +13.130595,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +13.130759,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +13.130923,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +13.131088,0.024895,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +13.131601,0.102494,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +13.131704,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +13.131868,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +13.132033,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +13.132197,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +13.132361,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +13.132525,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +13.132690,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +13.132855,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +13.133019,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +13.133183,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +13.133348,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +13.133512,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +13.133676,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +13.133840,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +13.134005,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +13.134170,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +13.134334,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +13.134498,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +13.134663,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +13.134827,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +13.134991,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +13.135156,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +13.135320,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +13.135486,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +13.135650,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +13.135814,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +13.135978,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +13.136143,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +13.136307,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +13.136471,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +13.136636,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +13.136800,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +13.136964,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +13.137128,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +13.137292,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +13.137457,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +13.137622,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +13.137787,0.085503,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +13.138174,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +13.138190,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +13.138191,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +13.138403,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +13.138420,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +13.138421,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +13.151887,39.661730,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","37",,,"bs",187 +13.152936,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +13.152957,0.001344,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +13.152958,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +13.171798,40.048316,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","38",,,"bs",193 +13.191685,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +13.191705,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +13.191707,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +13.192136,40.202266,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","39",,,"bs",199 +13.211876,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +13.211888,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +13.211890,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +13.230481,39.844127,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","40",,,"bs",205 +13.232367,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +13.232379,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +13.232381,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +13.250616,40.449878,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","41",,,"bs",211 +13.270354,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +13.270365,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +13.270366,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +13.271399,40.488981,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","42",,,"bs",217 +13.291090,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +13.291101,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +13.291102,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +13.309010,27.723737,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","43",,,"bs",223 +13.311914,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +13.311925,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +13.311927,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +13.336769,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +13.336780,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +13.336782,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +14.715329,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +14.715576,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +14.715808,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +14.716039,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +14.716268,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +14.716501,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +14.716731,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +14.716959,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +14.717187,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +14.717419,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +14.717646,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +14.717875,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +14.718102,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +14.718332,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +14.718565,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +14.718794,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +14.719018,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +14.719246,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +14.719478,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +14.719703,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +14.719927,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +14.720154,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +14.720378,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +14.720608,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +14.720834,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +14.721061,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +14.721285,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +14.721513,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +14.721741,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +14.721965,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +14.722190,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +14.722419,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +14.722643,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +14.722867,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +14.723090,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +14.723312,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +14.723540,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +14.723763,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +14.723927,0.024895,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +14.724331,39.583108,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","44",,,"bs",251 +14.725016,0.102238,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +14.725201,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +14.725386,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +14.725578,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +14.725760,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +14.725943,0.186845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +14.726137,0.191325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +14.726336,0.192413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +14.726536,0.203037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +14.726740,0.200605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +14.726942,0.201116,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +14.727144,0.197725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +14.727343,0.194109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +14.727539,0.192445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +14.727733,0.195741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +14.727930,0.201277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +14.728133,0.193565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +14.728328,0.192477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +14.728521,0.188350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +14.728711,0.187774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +14.728900,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +14.729085,0.189469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +14.729275,0.184637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +14.729461,0.173789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +14.729636,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +14.729802,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +14.729967,0.182302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +14.730150,0.189662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +14.730341,0.194301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +14.730537,0.196445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +14.730734,0.192253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +14.730928,0.191997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +14.731121,0.196989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +14.731319,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +14.731508,0.200733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +14.731710,0.197309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +14.731909,0.202461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +14.732113,0.207580,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +14.732322,0.102687,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +14.733047,0.041408,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +14.733156,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +14.733319,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +14.733486,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +14.733653,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +14.733817,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +14.733982,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +14.734147,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +14.734313,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +14.734477,0.170558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +14.734649,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +14.734815,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +14.734980,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +14.735145,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +14.735309,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +14.735492,0.200477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +14.735694,0.190173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +14.735885,0.200925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +14.736087,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +14.736283,0.191549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +14.736476,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +14.736673,0.202557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +14.736877,0.196093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +14.737074,0.195357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +14.737271,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +14.737460,0.196317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +14.737657,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +14.737822,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +14.738006,0.198493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +14.738206,0.198141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +14.738405,0.199101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +14.738605,0.198621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +14.738805,0.192477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +14.738999,0.194429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +14.739194,0.195901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +14.739391,0.192445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +14.739585,0.196477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +14.739783,0.197789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +14.739982,0.166654,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +14.740657,0.172957,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +14.740832,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +14.741017,0.192478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +14.741210,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +14.741400,0.185373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +14.741586,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +14.741771,0.188893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +14.741961,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +14.742145,0.179069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +14.742325,0.176990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +14.742503,0.180061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +14.742685,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +14.742865,0.179005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +14.743046,0.182974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +14.743230,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +14.743412,0.178173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +14.743591,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +14.743771,0.177758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +14.743950,0.177757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +14.744053,39.693283,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","45",,,"bs",257 +14.744129,0.176893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +14.744307,0.176701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +14.744485,0.178846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +14.744665,0.179165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +14.744845,0.176701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +14.745023,0.173886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +14.745198,0.179325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +14.745378,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +14.745561,0.181181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +14.745743,0.176862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +14.745921,0.180349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +14.746103,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +14.746288,0.179709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +14.746469,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +14.746659,0.179294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +14.746840,0.183230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +14.747024,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +14.747206,0.178269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +14.747385,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +14.747568,0.050304,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +14.748052,0.093727,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +14.748164,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +14.748349,0.179742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +14.748530,0.189117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +14.748720,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +14.748906,0.187389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +14.749095,0.183645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +14.749280,0.178237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +14.749459,0.186654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +14.749647,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +14.749828,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +14.750016,0.187101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +14.750205,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +14.750393,0.182013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +14.750576,0.185598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +14.750763,0.185373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +14.750950,0.182333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +14.751133,0.184989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +14.751320,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +14.751503,0.184957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +14.751690,0.187326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +14.751878,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +14.752062,0.168317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +14.752231,0.171901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +14.752404,0.174878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +14.752580,0.174141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +14.752756,0.174781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +14.752932,0.176062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +14.753109,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +14.753292,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +14.753475,0.186525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +14.753663,0.173182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +14.753837,0.176061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +14.754014,0.178461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +14.754194,0.174429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +14.754370,0.175294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +14.754546,0.176317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +14.754724,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +14.754906,0.118718,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +14.755440,0.026240,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +14.755551,0.197725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +14.755750,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +14.755948,0.206557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +14.756156,0.206173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +14.756363,0.216285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +14.756581,0.210492,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +14.756793,0.206077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +14.757000,0.211133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +14.757212,0.205789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +14.757419,0.195773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +14.757616,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +14.757781,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +14.757945,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +14.758110,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +14.758274,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +14.758439,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +14.758603,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +14.758767,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +14.758931,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +14.759095,0.164542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +14.759261,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +14.759428,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +14.759592,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +14.759757,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +14.759921,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +14.760086,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +14.760250,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +14.760414,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +14.760578,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +14.760743,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +14.760907,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +14.761072,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +14.761236,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +14.761401,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +14.761574,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +14.761738,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +14.761903,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +14.762068,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +14.762232,0.004832,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +14.762710,0.122654,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +14.762834,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +14.762998,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +14.763163,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +14.763327,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +14.763491,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +14.763655,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +14.763819,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +14.763945,39.971518,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","46",,,"bs",263 +14.763984,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +14.764148,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +14.764312,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +14.764476,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +14.764640,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +14.764805,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +14.764969,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +14.765133,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +14.765298,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +14.765463,0.172253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +14.765636,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +14.765801,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +14.765966,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +14.766131,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +14.766296,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +14.766460,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +14.766625,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +14.766789,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +14.766954,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +14.767118,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +14.767283,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +14.767447,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +14.767612,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +14.767776,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +14.767941,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +14.768105,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +14.768269,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +14.768434,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +14.768607,0.174589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +14.768783,0.177822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +14.768962,0.065439,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +14.769365,0.061695,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +14.769468,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +14.769632,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +14.769796,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +14.769961,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +14.770126,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +14.770290,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +14.770454,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +14.770618,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +14.770782,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +14.770947,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +14.771111,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +14.771275,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +14.771440,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +14.771604,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +14.771769,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +14.771933,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +14.772097,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +14.772261,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +14.772425,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +14.772590,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +14.772755,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +14.772919,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +14.773083,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +14.773248,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +14.773412,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +14.773577,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +14.773741,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +14.773907,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +14.774073,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +14.774239,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +14.774405,0.164766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +14.774571,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +14.774736,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +14.774901,0.165405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +14.775068,0.166558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +14.775236,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +14.775402,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +14.775568,0.128222,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +14.776187,0.164990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +14.776354,0.176189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +14.776531,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +14.776698,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +14.776862,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +14.777026,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +14.777190,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +14.777355,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +14.777519,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +14.777684,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +14.777848,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +14.778012,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +14.778177,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +14.778341,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +14.778505,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +14.778669,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +14.778833,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +14.778998,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +14.779162,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +14.779326,0.171614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +14.779499,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +14.779663,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +14.779827,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +14.779992,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +14.780156,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +14.780320,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +14.780484,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +14.780649,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +14.780813,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +14.780978,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +14.781141,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +14.781306,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +14.781470,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +14.781635,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +14.781800,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +14.781963,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +14.782128,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +14.782292,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +14.782457,0.024992,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +14.782875,0.102622,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +14.782979,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +14.783143,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +14.783308,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +14.783472,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +14.783636,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +14.783800,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +14.783965,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +14.784128,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +14.784293,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +14.784457,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +14.784622,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +14.784786,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +14.784950,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +14.785115,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +14.785279,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +14.785444,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +14.785608,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +14.785772,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +14.785937,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +14.786101,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +14.786265,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +14.786429,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +14.786594,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +14.786758,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +14.786923,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +14.787087,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +14.787252,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +14.787416,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +14.787581,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +14.787745,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +14.787909,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +14.788074,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +14.788238,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +14.788403,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +14.788567,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +14.788731,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +14.788896,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +14.789060,0.085791,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +14.789427,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +14.789443,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +14.789444,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +14.789650,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +14.789663,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +14.789665,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +14.803026,39.532645,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","47",,,"bs",269 +14.803965,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +14.803979,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +14.803981,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +14.822948,40.118812,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","48",,,"bs",275 +14.842603,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +14.842616,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +14.842617,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +14.843275,40.166235,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","49",,,"bs",281 +14.863109,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +14.863122,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +14.863123,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +14.881548,39.815040,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","50",,,"bs",287 +14.883465,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +14.883477,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +14.883478,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +14.901732,40.522902,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","51",,,"bs",293 +14.921384,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +14.921396,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +14.921398,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +14.922577,40.367736,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","52",,,"bs",299 +14.942277,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +14.942288,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +14.942289,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +14.960071,27.756249,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","53",,,"bs",305 +14.962965,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +14.962977,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +14.962979,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +14.987850,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +14.987862,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +14.987863,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +16.341466,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +16.341630,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +16.341793,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +16.341957,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +16.342121,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +16.342285,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +16.342448,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +16.342612,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +16.342775,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +16.342939,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +16.343104,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +16.343267,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +16.343431,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +16.343594,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +16.343758,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +16.343922,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +16.344086,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +16.344250,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +16.344414,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +16.344579,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +16.344743,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +16.344907,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +16.345071,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +16.345235,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +16.345400,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +16.345564,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +16.345728,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +16.345892,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +16.346057,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +16.346220,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +16.346385,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +16.346549,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +16.346713,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +16.346877,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +16.347041,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +16.347205,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +16.347369,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +16.347533,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +16.347697,0.025120,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +16.348122,39.617508,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","54",,,"bs",333 +16.348371,0.102431,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +16.348474,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +16.348640,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +16.348805,0.168798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +16.348975,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +16.349141,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +16.349305,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +16.349470,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +16.349634,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +16.349799,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +16.349963,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +16.350127,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +16.350293,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +16.350458,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +16.350624,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +16.350788,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +16.350953,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +16.351117,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +16.351281,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +16.351445,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +16.351610,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +16.351774,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +16.351938,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +16.352104,0.199101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +16.352304,0.202205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +16.352507,0.208861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +16.352718,0.205629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +16.352924,0.212316,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +16.353138,0.203133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +16.353342,0.196989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +16.353540,0.199773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +16.353741,0.205149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +16.353948,0.206237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +16.354155,0.209469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +16.354366,0.205020,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +16.354572,0.202173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +16.354776,0.221277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +16.354999,0.184829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +16.355185,0.088703,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +16.355969,0.056735,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +16.356081,0.211229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +16.356293,0.200989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +16.356496,0.204925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +16.356702,0.201853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +16.356905,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +16.357101,0.197917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +16.357300,0.206237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +16.357508,0.208605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +16.357718,0.206973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +16.357926,0.209533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +16.358137,0.205181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +16.358343,0.205757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +16.358550,0.194461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +16.358746,0.166941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +16.358914,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +16.359078,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +16.359243,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +16.359407,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +16.359572,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +16.359737,0.165597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +16.359904,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +16.360068,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +16.360233,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +16.360398,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +16.360564,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +16.360728,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +16.360893,0.166590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +16.361061,0.167486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +16.361229,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +16.361394,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +16.361559,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +16.361724,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +16.361888,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +16.362053,0.165630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +16.362220,0.190429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +16.362412,0.196317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +16.362610,0.201821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +16.362813,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +16.363664,0.176701,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +16.363842,0.202685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +16.364046,0.196957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +16.364244,0.185885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +16.364431,0.166462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +16.364599,0.197565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +16.364798,0.206205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +16.365005,0.203549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +16.365210,0.202333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +16.365414,0.203485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +16.365618,0.198749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +16.365818,0.198589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +16.366018,0.201565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +16.366221,0.198653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +16.366421,0.198109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +16.366620,0.198301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +16.366820,0.207228,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +16.367028,0.199037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +16.367229,0.181310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +16.367411,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +16.367594,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +16.367785,0.184477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +16.367847,39.774305,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","55",,,"bs",339 +16.367971,0.185405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +16.368158,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +16.368342,0.189278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +16.368532,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +16.368718,0.185981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +16.368906,0.180477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +16.369087,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +16.369269,0.180670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +16.369451,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +16.369633,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +16.369818,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +16.370006,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +16.370194,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +16.370376,0.186334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +16.370564,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +16.370743,0.175773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +16.370920,0.052863,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +16.371451,0.091039,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +16.371550,0.185630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +16.371737,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +16.371923,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +16.372108,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +16.372292,0.184989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +16.372478,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +16.372666,0.184254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +16.372851,0.183741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +16.373036,0.183517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +16.373221,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +16.373409,0.182077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +16.373593,0.182462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +16.373776,0.183549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +16.373961,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +16.374149,0.186269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +16.374337,0.194429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +16.374533,0.191517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +16.374725,0.188189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +16.374915,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +16.375100,0.182558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +16.375284,0.182493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +16.375467,0.183837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +16.375652,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +16.375833,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +16.376013,0.183902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +16.376199,0.184989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +16.376385,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +16.376569,0.178237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +16.376748,0.181021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +16.376930,0.185822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +16.377117,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +16.377302,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +16.377482,0.181661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +16.377665,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +16.377847,0.181886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +16.378031,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +16.378214,0.172509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +16.378388,0.106463,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +16.378818,0.024959,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +16.378918,0.192157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +16.379112,0.184669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +16.379297,0.181374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +16.379480,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +16.379665,0.189213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +16.379855,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +16.380043,0.183613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +16.380228,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +16.380410,0.185150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +16.380597,0.185630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +16.380784,0.183581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +16.380968,0.183965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +16.381154,0.192125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +16.381347,0.181181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +16.381529,0.186557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +16.381717,0.196381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +16.381915,0.195805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +16.382112,0.193405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +16.382308,0.193597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +16.382502,0.190622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +16.382695,0.191678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +16.382887,0.190013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +16.383079,0.186365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +16.383267,0.196029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +16.383464,0.189565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +16.383655,0.178365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +16.383834,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +16.383998,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +16.384163,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +16.384327,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +16.384491,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +16.384656,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +16.384820,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +16.384984,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +16.385148,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +16.385312,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +16.385476,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +16.385641,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +16.385805,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +16.386135,0.122302,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +16.386258,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +16.386422,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +16.386587,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +16.386751,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +16.386915,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +16.387079,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +16.387243,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +16.387407,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +16.387571,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +16.387719,40.042205,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","56",,,"bs",345 +16.387735,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +16.387900,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +16.388064,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +16.388228,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +16.388392,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +16.388556,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +16.388721,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +16.388885,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +16.389049,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +16.389213,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +16.389378,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +16.389541,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +16.389706,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +16.389870,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +16.390034,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +16.390199,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +16.390364,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +16.390528,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +16.390693,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +16.390857,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +16.391021,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +16.391185,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +16.391350,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +16.391514,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +16.391679,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +16.391843,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +16.392007,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +16.392171,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +16.392335,0.065567,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +16.392658,0.061824,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +16.392752,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +16.392916,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +16.393080,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +16.393244,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +16.393408,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +16.393572,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +16.393736,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +16.393900,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +16.394064,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +16.394228,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +16.394393,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +16.394557,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +16.394721,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +16.394886,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +16.395050,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +16.395214,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +16.395379,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +16.395543,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +16.395707,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +16.395871,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +16.396036,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +16.396199,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +16.396363,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +16.396528,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +16.396693,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +16.396857,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +16.397021,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +16.397185,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +16.397350,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +16.397514,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +16.397678,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +16.397843,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +16.398007,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +16.398171,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +16.398336,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +16.398501,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +16.398665,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +16.398829,0.126238,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +16.399272,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +16.399437,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +16.399600,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +16.399765,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +16.399929,0.166589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +16.400097,0.166045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +16.400264,0.165854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +16.400431,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +16.400598,0.165726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +16.400765,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +16.400932,0.165502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +16.401098,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +16.401266,0.168478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +16.401435,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +16.401602,0.167421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +16.401771,0.167230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +16.401940,0.168093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +16.402109,0.167838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +16.402278,0.166813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +16.402446,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +16.402613,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +16.402780,0.166014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +16.402947,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +16.403111,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +16.403275,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +16.403440,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +16.403605,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +16.403770,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +16.403934,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +16.404098,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +16.404262,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +16.404427,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +16.404591,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +16.404755,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +16.404919,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +16.405084,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +16.405248,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +16.405412,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +16.405577,0.025024,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +16.405985,0.102655,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +16.406088,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +16.406252,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +16.406416,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +16.406581,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +16.406746,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +16.406909,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +16.407074,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +16.407238,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +16.407402,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +16.407566,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +16.407730,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +16.407895,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +16.408059,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +16.408223,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +16.408388,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +16.408553,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +16.408717,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +16.408881,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +16.409045,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +16.409210,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +16.409374,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +16.409538,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +16.409702,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +16.409866,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +16.410031,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +16.410195,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +16.410359,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +16.410524,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +16.410688,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +16.410852,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +16.411016,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +16.411180,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +16.411345,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +16.411509,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +16.411674,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +16.411838,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +16.412002,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +16.412166,0.085407,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +16.412468,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +16.412484,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +16.412486,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +16.412623,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +16.412637,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +16.412638,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +16.426815,39.645572,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","57",,,"bs",351 +16.427842,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +16.427861,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +16.427862,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +16.446770,40.045949,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","58",,,"bs",357 +16.466488,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +16.466502,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +16.466504,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +16.467048,40.232058,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","59",,,"bs",363 +16.486839,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +16.486852,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +16.486854,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +16.505408,39.876447,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","60",,,"bs",369 +16.507305,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +16.507319,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +16.507320,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +16.525685,40.226107,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","61",,,"bs",375 +16.545344,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +16.545362,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +16.545363,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +16.546549,40.258106,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","62",,,"bs",381 +16.565933,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +16.565946,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +16.565947,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +16.583930,27.725337,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","63",,,"bs",387 +16.586828,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +16.586840,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +16.586842,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +16.611675,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +16.611688,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +16.611689,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +18.009293,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +18.009457,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +18.009621,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +18.009785,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +18.009948,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +18.010112,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +18.010276,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +18.010441,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +18.010605,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +18.010769,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +18.010933,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +18.011097,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +18.011260,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +18.011424,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +18.011588,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +18.011752,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +18.011916,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +18.012080,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +18.012243,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +18.012407,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +18.012571,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +18.012735,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +18.012900,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +18.013064,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +18.013228,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +18.013393,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +18.013557,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +18.013721,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +18.013885,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +18.014049,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +18.014214,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +18.014378,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +18.014542,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +18.014706,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +18.014870,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +18.015034,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +18.015198,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +18.015361,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +18.015525,0.025152,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +18.015607,39.608964,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","64",,,"bs",415 +18.015905,0.105662,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +18.016012,0.166557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +18.016179,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +18.016343,0.165501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +18.016510,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +18.016675,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +18.016839,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +18.017004,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +18.017169,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +18.017333,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +18.017498,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +18.017662,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +18.017827,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +18.017992,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +18.018156,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +18.018321,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +18.018486,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +18.018649,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +18.018813,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +18.018978,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +18.019144,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +18.019309,0.195133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +18.019506,0.203229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +18.019710,0.213757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +18.019925,0.214173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +18.020141,0.214685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +18.020357,0.208636,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +18.020567,0.203101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +18.020771,0.200701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +18.020973,0.203901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +18.021178,0.205277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +18.021385,0.201661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +18.021588,0.211005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +18.021800,0.202621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +18.022004,0.203260,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +18.022209,0.191773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +18.022401,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +18.022567,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +18.022734,0.098047,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +18.023369,0.054911,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +18.023484,0.205853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +18.023691,0.201437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +18.023894,0.200669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +18.024095,0.202013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +18.024299,0.208188,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +18.024508,0.211709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +18.024721,0.212029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +18.024934,0.212253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +18.025148,0.210876,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +18.025360,0.187293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +18.025549,0.164830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +18.025715,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +18.025879,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +18.026044,0.167709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +18.026213,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +18.026378,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +18.026542,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +18.026707,0.167037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +18.026875,0.168638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +18.027045,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +18.027210,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +18.027375,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +18.027539,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +18.027703,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +18.027868,0.190877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +18.028061,0.199901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +18.028262,0.190685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +18.028454,0.206397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +18.028661,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +18.028854,0.198269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +18.029053,0.196381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +18.029251,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +18.029441,0.189725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +18.029632,0.191005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +18.029824,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +18.030010,0.174782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +18.030186,0.196893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +18.030385,0.178589,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +18.031024,0.175133,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +18.031201,0.198749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +18.031401,0.200957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +18.031603,0.198589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +18.031803,0.203037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +18.032007,0.207581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +18.032216,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +18.032404,0.191293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +18.032597,0.191965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +18.032790,0.195709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +18.032987,0.193917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +18.033182,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +18.033370,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +18.033559,0.192445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +18.033752,0.189373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +18.033943,0.186686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +18.034131,0.189917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +18.034322,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +18.034507,0.185821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +18.034694,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +18.034883,0.182333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +18.035067,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +18.035250,0.187230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +18.035338,39.713346,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","65",,,"bs",421 +18.035439,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +18.035625,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +18.035807,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +18.035988,0.180029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +18.036170,0.179934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +18.036351,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +18.036532,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +18.036714,0.180829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +18.036896,0.176510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +18.037073,0.181757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +18.037256,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +18.037440,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +18.037621,0.180286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +18.037802,0.186461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +18.037990,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +18.038172,0.050367,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +18.038556,0.099262,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +18.038661,0.188158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +18.038850,0.192029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +18.039044,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +18.039232,0.184093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +18.039417,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +18.039605,0.190365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +18.039796,0.190525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +18.039988,0.190493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +18.040180,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +18.040368,0.180414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +18.040550,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +18.040742,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +18.040931,0.187037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +18.041119,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +18.041304,0.186461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +18.041492,0.184093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +18.041678,0.182686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +18.041862,0.187773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +18.042051,0.188157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +18.042240,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +18.042422,0.185021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +18.042609,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +18.042794,0.182110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +18.042978,0.183613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +18.043162,0.183037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +18.043347,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +18.043527,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +18.043709,0.180254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +18.043891,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +18.044059,0.172509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +18.044233,0.176318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +18.044410,0.175965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +18.044587,0.177053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +18.044766,0.182302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +18.044949,0.181502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +18.045132,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +18.045315,0.178653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +18.045495,0.114398,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +18.045942,0.025792,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +18.046041,0.179645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +18.046222,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +18.046403,0.181982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +18.046587,0.183197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +18.046771,0.184637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +18.046957,0.201693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +18.047160,0.197661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +18.047359,0.191165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +18.047552,0.195197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +18.047748,0.189309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +18.047939,0.193725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +18.048134,0.196349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +18.048331,0.190973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +18.048523,0.198685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +18.048723,0.194749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +18.048919,0.200573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +18.049121,0.166237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +18.049289,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +18.049452,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +18.049617,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +18.049781,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +18.049946,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +18.050110,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +18.050275,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +18.050439,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +18.050603,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +18.050767,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +18.050932,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +18.051096,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +18.051261,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +18.051425,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +18.051589,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +18.051753,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +18.051918,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +18.052082,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +18.052246,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +18.052410,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +18.052575,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +18.052739,0.004832,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +18.053200,0.122846,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +18.053324,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +18.053488,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +18.053653,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +18.053818,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +18.053982,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +18.054146,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +18.054310,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +18.054474,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +18.054638,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +18.054802,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +18.054966,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +18.055130,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +18.055213,39.994590,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","66",,,"bs",427 +18.055294,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +18.055458,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +18.055623,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +18.055788,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +18.055952,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +18.056116,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +18.056280,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +18.056444,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +18.056609,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +18.056773,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +18.056938,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +18.057101,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +18.057266,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +18.057430,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +18.057594,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +18.057759,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +18.057923,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +18.058087,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +18.058252,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +18.058416,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +18.058580,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +18.058746,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +18.058910,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +18.059074,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +18.059238,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +18.059402,0.065599,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +18.059680,0.061631,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +18.059775,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +18.059940,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +18.060105,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +18.060270,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +18.060434,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +18.060599,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +18.060763,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +18.060927,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +18.061091,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +18.061255,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +18.061420,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +18.061584,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +18.061748,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +18.061911,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +18.062076,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +18.062241,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +18.062405,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +18.062569,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +18.062733,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +18.062897,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +18.063061,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +18.063226,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +18.063390,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +18.063554,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +18.063719,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +18.063884,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +18.064048,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +18.064212,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +18.064376,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +18.064541,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +18.064705,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +18.064870,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +18.065034,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +18.065198,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +18.065362,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +18.065527,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +18.065694,0.164894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +18.065860,0.127518,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +18.066349,0.178397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +18.066529,0.171198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +18.066701,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +18.066877,0.171965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +18.067050,0.172478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +18.067224,0.173565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +18.067398,0.170493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +18.067570,0.166974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +18.067738,0.167581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +18.067907,0.167390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +18.068076,0.168349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +18.068246,0.168222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +18.068415,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +18.068581,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +18.068745,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +18.068909,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +18.069074,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +18.069239,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +18.069403,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +18.069568,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +18.069732,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +18.069897,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +18.070061,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +18.070226,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +18.070390,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +18.070555,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +18.070719,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +18.070883,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +18.071047,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +18.071211,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +18.071376,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +18.071541,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +18.071706,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +18.071870,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +18.072034,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +18.072199,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +18.072363,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +18.072527,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +18.072691,0.025120,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +18.073124,0.102174,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +18.073227,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +18.073391,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +18.073555,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +18.073720,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +18.073884,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +18.074048,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +18.074213,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +18.074377,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +18.074541,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +18.074705,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +18.074870,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +18.075034,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +18.075198,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +18.075363,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +18.075527,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +18.075691,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +18.075856,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +18.076020,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +18.076184,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +18.076348,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +18.076513,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +18.076677,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +18.076842,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +18.077006,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +18.077170,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +18.077335,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +18.077499,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +18.077664,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +18.077828,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +18.077993,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +18.078157,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +18.078321,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +18.078486,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +18.078650,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +18.078815,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +18.078979,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +18.079144,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +18.079308,0.085887,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +18.079635,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +18.079652,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +18.079653,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +18.079787,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +18.079802,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +18.079803,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +18.094266,39.675139,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","67",,,"bs",433 +18.095242,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +18.095257,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +18.095258,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +18.114192,40.167099,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","68",,,"bs",439 +18.133979,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +18.133994,0.001344,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +18.133996,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +18.134514,40.202491,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","69",,,"bs",445 +18.154390,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +18.154404,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +18.154405,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +18.172831,39.849920,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","70",,,"bs",451 +18.174748,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +18.174763,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +18.174764,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +18.193090,40.513526,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","71",,,"bs",457 +18.212718,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +18.212733,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +18.212734,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +18.213781,40.526710,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","72",,,"bs",463 +18.233634,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +18.233648,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +18.233649,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +18.251372,27.739960,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","73",,,"bs",469 +18.254358,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +18.254373,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +18.254375,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +18.279144,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +18.279158,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +18.279159,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +19.658991,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +19.659214,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +19.659446,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +19.659671,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +19.659893,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +19.660115,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +19.660338,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +19.660566,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +19.660788,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +19.661012,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +19.661235,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +19.661462,0.171966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +19.661664,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +19.661846,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +19.662026,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +19.662203,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +19.662379,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +19.662561,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +19.662736,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +19.662911,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +19.663087,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +19.663262,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +19.663440,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +19.663615,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +19.663789,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +19.663963,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +19.664138,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +19.664314,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +19.664492,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +19.664669,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +19.664843,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +19.665017,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +19.665190,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +19.665366,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +19.665545,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +19.665721,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +19.665896,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +19.666070,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +19.666234,0.024896,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +19.666472,39.575332,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","74",,,"bs",497 +19.666857,0.102142,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +19.667005,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +19.667169,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +19.667333,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +19.667497,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +19.667662,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +19.667828,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +19.667993,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +19.668157,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +19.668321,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +19.668486,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +19.668650,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +19.668815,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +19.668980,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +19.669145,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +19.669309,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +19.669474,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +19.669639,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +19.669804,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +19.669968,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +19.670132,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +19.670296,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +19.670461,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +19.670625,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +19.670790,0.178013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +19.670969,0.193053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +19.671163,0.203549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +19.671368,0.214205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +19.671584,0.207101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +19.671792,0.207869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +19.672001,0.198396,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +19.672201,0.196989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +19.672399,0.204957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +19.672605,0.200669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +19.672807,0.199549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +19.673008,0.203645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +19.673213,0.206397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +19.673420,0.207389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +19.673629,0.102494,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +19.674282,0.041823,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +19.674384,0.201181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +19.674587,0.201853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +19.674790,0.201149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +19.674992,0.205981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +19.675200,0.202045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +19.675403,0.206460,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +19.675611,0.198941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +19.675811,0.199421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +19.676011,0.209885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +19.676223,0.208797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +19.676433,0.211933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +19.676646,0.209340,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +19.676856,0.212125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +19.677070,0.194141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +19.677266,0.166622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +19.677433,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +19.677597,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +19.677762,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +19.677928,0.166270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +19.678095,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +19.678259,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +19.678424,0.175325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +19.678600,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +19.678769,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +19.678934,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +19.679098,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +19.679263,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +19.679428,0.171422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +19.679601,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +19.679768,0.198813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +19.679968,0.192765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +19.680162,0.200221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +19.680364,0.191101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +19.680556,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +19.680746,0.203421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +19.680951,0.194237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +19.681146,0.194077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +19.681342,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +19.682098,0.173950,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +19.682273,0.206205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +19.682481,0.210492,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +19.682693,0.203901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +19.682898,0.201373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +19.683101,0.201789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +19.683304,0.195773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +19.683501,0.196509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +19.683699,0.198333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +19.683898,0.202461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +19.684102,0.201341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +19.684304,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +19.684496,0.184765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +19.684682,0.184477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +19.684868,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +19.685056,0.188605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +19.685246,0.188670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +19.685436,0.192957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +19.685630,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +19.685815,0.187133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +19.686004,0.191581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +19.686197,0.178077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +19.686197,39.688035,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","75",,,"bs",503 +19.686376,0.177758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +19.686555,0.180606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +19.686737,0.179197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +19.686917,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +19.687099,0.188029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +19.687288,0.183454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +19.687473,0.191614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +19.687666,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +19.687847,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +19.688028,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +19.688208,0.178558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +19.688387,0.179965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +19.688568,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +19.688751,0.177117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +19.688929,0.178270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +19.689109,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +19.689290,0.050975,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +19.689953,0.096830,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +19.690060,0.184669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +19.690246,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +19.690433,0.189565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +19.690624,0.190814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +19.690816,0.189662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +19.691007,0.189437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +19.691197,0.193437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +19.691392,0.184989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +19.691578,0.196925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +19.691776,0.193085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +19.691971,0.190205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +19.692162,0.194205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +19.692358,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +19.692548,0.185693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +19.692735,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +19.692921,0.191837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +19.693114,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +19.693308,0.188894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +19.693498,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +19.693685,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +19.693872,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +19.694059,0.183517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +19.694244,0.193213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +19.694438,0.185245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +19.694624,0.182942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +19.694809,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +19.694993,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +19.695181,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +19.695365,0.182333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +19.695548,0.187229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +19.695737,0.183102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +19.695921,0.189245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +19.696112,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +19.696303,0.181853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +19.696487,0.172829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +19.696661,0.180894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +19.696843,0.178237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +19.697023,0.117886,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +19.697744,0.024031,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +19.697876,0.192029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +19.698070,0.192605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +19.698264,0.189309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +19.698454,0.185405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +19.698641,0.189853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +19.698832,0.190717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +19.699024,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +19.699216,0.197981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +19.699416,0.189597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +19.699607,0.188638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +19.699796,0.187454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +19.699985,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +19.700182,0.201181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +19.700384,0.205884,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +19.700592,0.200381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +19.700793,0.203389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +19.700998,0.206653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +19.701206,0.196317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +19.701403,0.200925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +19.701606,0.193149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +19.701800,0.192573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +19.701994,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +19.702191,0.200093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +19.702392,0.199741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +19.702593,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +19.702783,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +19.702947,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +19.703112,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +19.703276,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +19.703441,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +19.703605,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +19.703769,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +19.703933,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +19.704098,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +19.704262,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +19.704426,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +19.704591,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +19.704755,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +19.704919,0.004864,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +19.705494,0.131422,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +19.705635,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +19.705799,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +19.705964,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +19.706104,39.996926,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","76",,,"bs",509 +19.706128,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +19.706292,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +19.706457,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +19.706621,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +19.706785,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +19.706949,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +19.707114,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +19.707278,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +19.707442,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +19.707607,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +19.707771,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +19.707936,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +19.708099,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +19.708264,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +19.708428,0.171965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +19.708601,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +19.708765,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +19.708929,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +19.709094,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +19.709258,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +19.709422,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +19.709586,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +19.709750,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +19.709915,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +19.710079,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +19.710244,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +19.710408,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +19.710572,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +19.710737,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +19.710901,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +19.711065,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +19.711230,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +19.711394,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +19.711558,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +19.711723,0.065471,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +19.712062,0.062175,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +19.712162,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +19.712326,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +19.712490,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +19.712655,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +19.712819,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +19.712983,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +19.713148,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +19.713312,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +19.713476,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +19.713640,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +19.713805,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +19.713969,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +19.714133,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +19.714297,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +19.714462,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +19.714626,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +19.714791,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +19.714955,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +19.715119,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +19.715283,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +19.715448,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +19.715612,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +19.715776,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +19.715941,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +19.716106,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +19.716271,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +19.716435,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +19.716600,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +19.716764,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +19.716928,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +19.717093,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +19.717258,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +19.717422,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +19.717586,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +19.717751,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +19.717915,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +19.718079,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +19.718244,0.126622,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +19.718675,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +19.718840,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +19.719006,0.165534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +19.719173,0.166045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +19.719340,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +19.719505,0.165405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +19.719672,0.165086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +19.719838,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +19.720004,0.165438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +19.720171,0.170685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +19.720343,0.167806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +19.720512,0.168286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +19.720682,0.169341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +19.720852,0.168254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +19.721022,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +19.721190,0.168670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +19.721360,0.167581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +19.721529,0.168285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +19.721698,0.166846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +19.721866,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +19.722031,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +19.722196,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +19.722360,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +19.722525,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +19.722689,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +19.722854,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +19.723019,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +19.723183,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +19.723347,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +19.723511,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +19.723675,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +19.723840,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +19.724004,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +19.724169,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +19.724333,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +19.724498,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +19.724662,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +19.724827,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +19.724992,0.025088,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +19.725518,0.102207,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +19.725628,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +19.725792,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +19.725956,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +19.726120,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +19.726285,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +19.726449,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +19.726613,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +19.726777,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +19.726941,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +19.727106,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +19.727270,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +19.727434,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +19.727598,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +19.727763,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +19.727927,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +19.728092,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +19.728256,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +19.728420,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +19.728585,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +19.728749,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +19.728913,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +19.729077,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +19.729241,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +19.729405,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +19.729569,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +19.729733,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +19.729897,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +19.730062,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +19.730226,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +19.730391,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +19.730555,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +19.730719,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +19.730883,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +19.731047,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +19.731212,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +19.731376,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +19.731540,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +19.731704,0.085438,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +19.732083,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +19.732102,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +19.732103,0.005152,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +19.732331,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +19.732348,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +19.732349,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +19.745142,39.689698,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","77",,,"bs",515 +19.746179,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +19.746199,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +19.746200,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +19.765098,40.079677,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","78",,,"bs",521 +19.784871,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +19.784887,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +19.784889,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +19.785406,40.186971,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","79",,,"bs",527 +19.805205,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +19.805220,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +19.805221,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +19.823614,40.014941,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","80",,,"bs",533 +19.825625,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +19.825641,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +19.825643,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +19.844045,40.324793,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","81",,,"bs",539 +19.863673,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +19.863689,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +19.863690,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +19.864811,40.288602,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","82",,,"bs",545 +19.884399,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +19.884416,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +19.884417,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +19.902102,31.161253,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","83",,,"bs",551 +19.905125,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +19.905139,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +19.905140,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +19.933298,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +19.933312,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +19.933313,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +21.306916,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +21.307080,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +21.307244,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +21.307407,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +21.307571,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +21.307735,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +21.307899,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +21.308063,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +21.308226,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +21.308390,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +21.308554,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +21.308718,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +21.308882,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +21.309046,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +21.309211,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +21.309376,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +21.309540,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +21.309704,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +21.309868,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +21.310033,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +21.310196,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +21.310360,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +21.310524,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +21.310688,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +21.310865,0.209181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +21.311075,0.210749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +21.311287,0.216061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +21.311504,0.216956,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +21.311723,0.215997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +21.311940,0.207773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +21.312149,0.204733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +21.312355,0.207708,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +21.312564,0.217821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +21.312783,0.216733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +21.313001,0.213916,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +21.313216,0.218205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +21.313435,0.211773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +21.313648,0.200797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +21.313851,0.035775,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +21.314081,39.564454,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","84",,,"bs",579 +21.314539,0.126622,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +21.314667,0.203485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +21.314871,0.208893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +21.315082,0.211165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +21.315294,0.205245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +21.315500,0.209660,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +21.315711,0.203773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +21.315917,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +21.316108,0.203837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +21.316314,0.208029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +21.316523,0.210781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +21.316735,0.213757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +21.316950,0.213532,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +21.317165,0.205437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +21.317371,0.178781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +21.317551,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +21.317717,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +21.317881,0.165566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +21.318048,0.166269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +21.318215,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +21.318379,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +21.318544,0.172190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +21.318717,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +21.318883,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +21.319047,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +21.319211,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +21.319376,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +21.319540,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +21.319705,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +21.319869,0.176285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +21.320046,0.198269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +21.320246,0.192509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +21.320440,0.195261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +21.320636,0.188829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +21.320826,0.189469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +21.321017,0.194269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +21.321212,0.191966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +21.321406,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +21.321596,0.105598,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +21.322379,0.050239,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +21.322494,0.205629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +21.322701,0.198589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +21.322901,0.195005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +21.323098,0.202269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +21.323301,0.195933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +21.323498,0.202269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +21.323702,0.197852,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +21.323901,0.202077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +21.324105,0.200445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +21.324306,0.183741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +21.324491,0.185758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +21.324678,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +21.324868,0.187549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +21.325057,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +21.325248,0.187965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +21.325437,0.192445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +21.325631,0.189053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +21.325821,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +21.326008,0.190141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +21.326200,0.183134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +21.326384,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +21.326567,0.183453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +21.326752,0.179453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +21.326932,0.181181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +21.327115,0.191454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +21.327307,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +21.327491,0.183741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +21.327676,0.185181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +21.327862,0.179837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +21.328043,0.178718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +21.328223,0.179069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +21.328404,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +21.328587,0.178269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +21.328767,0.175454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +21.328943,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +21.329124,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +21.329306,0.179005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +21.329486,0.161342,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +21.330028,0.160766,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +21.330190,0.184125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +21.330376,0.197917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +21.330575,0.184957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +21.330761,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +21.330944,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +21.331128,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +21.331315,0.185566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +21.331502,0.192445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +21.331695,0.193597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +21.331890,0.186557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +21.332078,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +21.332264,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +21.332446,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +21.332629,0.189565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +21.332820,0.186078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +21.333007,0.180765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +21.333189,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +21.333375,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +21.333558,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +21.333748,0.186269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +21.333804,39.705636,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","85",,,"bs",585 +21.333935,0.181662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +21.334118,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +21.334305,0.185885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +21.334492,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +21.334675,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +21.334859,0.178238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +21.335038,0.179837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +21.335219,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +21.335405,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +21.335584,0.170686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +21.335756,0.169821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +21.335927,0.175261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +21.336104,0.177054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +21.336282,0.175261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +21.336458,0.175037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +21.336635,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +21.336817,0.182110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +21.337001,0.048799,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +21.337374,0.089055,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +21.337481,0.179838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +21.337662,0.180189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +21.337844,0.180253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +21.338025,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +21.338207,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +21.338393,0.183614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +21.338578,0.198205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +21.338777,0.194269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +21.338973,0.197245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +21.339171,0.192125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +21.339365,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +21.339556,0.197277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +21.339755,0.191517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +21.339948,0.193437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +21.340142,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +21.340342,0.198173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +21.340541,0.198429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +21.340741,0.178429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +21.340920,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +21.341084,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +21.341248,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +21.341412,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +21.341577,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +21.341741,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +21.341905,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +21.342070,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +21.342234,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +21.342399,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +21.342563,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +21.342728,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +21.342891,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +21.343056,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +21.343221,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +21.343385,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +21.343550,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +21.343714,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +21.343879,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +21.344043,0.106111,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +21.344368,0.021152,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +21.344468,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +21.344632,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +21.344797,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +21.344960,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +21.345125,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +21.345289,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +21.345453,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +21.345617,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +21.345781,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +21.345946,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +21.346110,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +21.346275,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +21.346439,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +21.346604,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +21.346769,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +21.346933,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +21.347098,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +21.347262,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +21.347426,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +21.347590,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +21.347754,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +21.347919,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +21.348083,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +21.348248,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +21.348412,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +21.348577,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +21.348741,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +21.348905,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +21.349069,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +21.349234,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +21.349398,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +21.349563,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +21.349727,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +21.349891,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +21.350056,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +21.350220,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +21.350385,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +21.350549,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +21.350714,0.004992,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +21.350974,0.122591,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +21.351098,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +21.351262,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +21.351427,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +21.351591,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +21.351755,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +21.351920,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +21.352084,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +21.352248,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +21.352413,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +21.352577,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +21.352741,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +21.352906,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +21.353070,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +21.353235,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +21.353399,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +21.353563,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +21.353725,40.002944,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","86",,,"bs",591 +21.353727,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +21.353891,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +21.354055,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +21.354220,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +21.354384,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +21.354549,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +21.354713,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +21.354877,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +21.355041,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +21.355205,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +21.355370,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +21.355534,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +21.355698,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +21.355862,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +21.356026,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +21.356191,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +21.356355,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +21.356519,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +21.356683,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +21.356848,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +21.357012,0.164958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +21.357178,0.066527,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +21.357498,0.067135,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +21.357601,0.172958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +21.357775,0.167325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +21.357944,0.166974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +21.358112,0.166685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +21.358280,0.168573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +21.358450,0.169438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +21.358621,0.170973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +21.358793,0.168478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +21.358962,0.170205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +21.359134,0.170077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +21.359305,0.166910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +21.359473,0.167741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +21.359642,0.167518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +21.359811,0.167197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +21.359979,0.166494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +21.360147,0.170909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +21.360319,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +21.360485,0.167198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +21.360653,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +21.360818,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +21.360982,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +21.361147,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +21.361312,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +21.361476,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +21.361641,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +21.361805,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +21.361969,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +21.362134,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +21.362298,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +21.362462,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +21.362627,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +21.362791,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +21.362955,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +21.363119,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +21.363284,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +21.363449,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +21.363613,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +21.363777,0.126334,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +21.364447,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +21.364610,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +21.364775,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +21.364939,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +21.365103,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +21.365268,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +21.365431,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +21.365596,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +21.365761,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +21.365925,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +21.366089,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +21.366254,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +21.366417,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +21.366582,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +21.366746,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +21.366910,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +21.367075,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +21.367239,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +21.367405,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +21.367569,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +21.367733,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +21.367897,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +21.368061,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +21.368225,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +21.368391,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +21.368555,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +21.368719,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +21.368883,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +21.369047,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +21.369212,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +21.369376,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +21.369540,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +21.369705,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +21.369870,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +21.370034,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +21.370198,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +21.370362,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +21.370527,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +21.370691,0.024959,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +21.371101,0.102335,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +21.371209,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +21.371373,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +21.371538,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +21.371702,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +21.371867,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +21.372031,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +21.372195,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +21.372359,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +21.372524,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +21.372688,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +21.372852,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +21.373016,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +21.373181,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +21.373345,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +21.373510,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +21.373674,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +21.373839,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +21.374003,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +21.374167,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +21.374332,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +21.374496,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +21.374660,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +21.374825,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +21.374989,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +21.375153,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +21.375317,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +21.375481,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +21.375645,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +21.375810,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +21.375975,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +21.376139,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +21.376304,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +21.376468,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +21.376632,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +21.376797,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +21.376961,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +21.377125,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +21.377289,0.085983,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +21.377615,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +21.377634,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +21.377635,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +21.377798,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +21.377815,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +21.377817,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +21.392765,39.696452,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","87",,,"bs",597 +21.393759,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +21.393776,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +21.393777,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +21.412641,40.185213,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","88",,,"bs",603 +21.432497,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +21.432512,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +21.432514,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +21.433022,40.279324,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","89",,,"bs",609 +21.452849,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +21.452864,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +21.452865,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +21.471260,40.009440,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","90",,,"bs",615 +21.473327,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +21.473341,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +21.473343,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +21.491547,40.526903,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","91",,,"bs",621 +21.511294,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +21.511308,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +21.511310,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +21.512437,40.414169,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","92",,,"bs",627 +21.532096,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +21.532110,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +21.532111,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +21.549814,31.064935,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","93",,,"bs",633 +21.552880,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +21.552896,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +21.552897,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +21.580903,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +21.580918,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +21.580919,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +22.927959,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +22.928123,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +22.928286,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +22.928450,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +22.928614,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +22.928778,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +22.928942,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +22.929105,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +22.929270,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +22.929434,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +22.929598,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +22.929761,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +22.929925,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +22.930090,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +22.930254,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +22.930418,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +22.930582,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +22.930746,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +22.930910,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +22.931074,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +22.931238,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +22.931402,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +22.931566,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +22.931730,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +22.931894,0.175517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +22.932070,0.197917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +22.932270,0.208925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +22.932480,0.214429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +22.932696,0.207645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +22.932904,0.203676,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +22.933109,0.196605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +22.933307,0.189566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +22.933498,0.199101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +22.933698,0.207261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +22.933907,0.200189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +22.934108,0.201725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +22.934311,0.195901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +22.934508,0.205565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +22.934715,0.031296,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +22.934877,39.617605,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","94",,,"bs",661 +22.935207,0.109630,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +22.935320,0.199005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +22.935520,0.203581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +22.935725,0.207293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +22.935934,0.206076,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +22.936141,0.204989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +22.936347,0.205053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +22.936553,0.202301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +22.936757,0.192157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +22.936950,0.201405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +22.937153,0.215325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +22.937370,0.216060,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +22.937587,0.209341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +22.937797,0.209629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +22.938008,0.215389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +22.938225,0.168573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +22.938395,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +22.938559,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +22.938722,0.167678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +22.938891,0.168541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +22.939061,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +22.939226,0.172734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +22.939400,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +22.939566,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +22.939731,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +22.939895,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +22.940059,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +22.940224,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +22.940388,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +22.940553,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +22.940717,0.188125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +22.940906,0.198397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +22.941106,0.191933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +22.941299,0.198301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +22.941499,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +22.941686,0.202557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +22.941890,0.185853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +22.942077,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +22.942266,0.101535,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +22.942808,0.041407,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +22.942904,0.187869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +22.943093,0.201533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +22.943296,0.198909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +22.943496,0.210172,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +22.943707,0.208061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +22.943917,0.196413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +22.944114,0.199453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +22.944315,0.197853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +22.944514,0.203677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +22.944719,0.198429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +22.944918,0.198717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +22.945118,0.200061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +22.945320,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +22.945502,0.179709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +22.945683,0.180862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +22.945865,0.181630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +22.946048,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +22.946229,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +22.946410,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +22.946590,0.183358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +22.946775,0.181885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +22.946958,0.176797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +22.947136,0.178461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +22.947316,0.172478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +22.947489,0.175965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +22.947667,0.177213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +22.947845,0.174942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +22.948021,0.181789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +22.948204,0.189469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +22.948395,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +22.948582,0.184317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +22.948768,0.179390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +22.948949,0.180029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +22.949130,0.177949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +22.949309,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +22.949490,0.182366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +22.949674,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +22.949860,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +22.950338,0.159294,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +22.950498,0.179133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +22.950678,0.187133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +22.950867,0.188862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +22.951057,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +22.951242,0.180029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +22.951423,0.190525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +22.951615,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +22.951802,0.185981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +22.951989,0.184478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +22.952175,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +22.952357,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +22.952542,0.186525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +22.952730,0.190173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +22.952922,0.187229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +22.953110,0.190685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +22.953302,0.184862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +22.953488,0.190845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +22.953680,0.187997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +22.953869,0.186909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +22.954057,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +22.954242,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +22.954423,0.186974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +22.954598,39.837602,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","95",,,"bs",667 +22.954611,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +22.954793,0.180669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +22.954974,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +22.955160,0.180189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +22.955341,0.179230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +22.955522,0.192413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +22.955716,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +22.955900,0.179965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +22.956081,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +22.956265,0.179838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +22.956447,0.181981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +22.956630,0.184477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +22.956815,0.173373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +22.956990,0.168030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +22.957159,0.176669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +22.957337,0.049599,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +22.957679,0.089279,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +22.957779,0.180766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +22.957961,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +22.958144,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +22.958327,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +22.958510,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +22.958692,0.177982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +22.958871,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +22.959055,0.181533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +22.959238,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +22.959421,0.188222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +22.959610,0.186142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +22.959798,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +22.959984,0.196733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +22.960182,0.194493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +22.960378,0.195485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +22.960575,0.194589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +22.960771,0.197469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +22.960970,0.203901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +22.961175,0.189693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +22.961366,0.193757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +22.961561,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +22.961753,0.192189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +22.961947,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +22.962134,0.171998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +22.962307,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +22.962472,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +22.962636,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +22.962800,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +22.962964,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +22.963129,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +22.963293,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +22.963457,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +22.963622,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +22.963786,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +22.963951,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +22.964115,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +22.964279,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +22.964444,0.106110,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +22.964790,0.021471,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +22.964886,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +22.965050,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +22.965214,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +22.965378,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +22.965543,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +22.965707,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +22.965871,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +22.966036,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +22.966200,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +22.966365,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +22.966529,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +22.966693,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +22.966857,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +22.967022,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +22.967186,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +22.967350,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +22.967515,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +22.967679,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +22.967843,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +22.968007,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +22.968171,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +22.968336,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +22.968500,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +22.968664,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +22.968829,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +22.968993,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +22.969157,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +22.969322,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +22.969486,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +22.969650,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +22.969814,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +22.969979,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +22.970143,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +22.970308,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +22.970472,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +22.970636,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +22.970800,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +22.970965,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +22.971129,0.004800,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +22.971484,0.122398,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +22.971607,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +22.971771,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +22.971935,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +22.972099,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +22.972263,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +22.972427,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +22.972592,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +22.972756,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +22.972920,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +22.973084,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +22.973249,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +22.973413,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +22.973577,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +22.973741,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +22.973906,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +22.974070,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +22.974234,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +22.974398,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +22.974535,39.934336,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","96",,,"bs",673 +22.974562,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +22.974726,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +22.974890,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +22.975055,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +22.975220,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +22.975384,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +22.975549,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +22.975713,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +22.975877,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +22.976041,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +22.976205,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +22.976370,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +22.976534,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +22.976699,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +22.976863,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +22.977028,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +22.977192,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +22.977357,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +22.977521,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +22.977686,0.065439,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +22.977971,0.061759,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +22.978064,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +22.978228,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +22.978393,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +22.978560,0.165854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +22.978728,0.166365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +22.978895,0.166782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +22.979063,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +22.979230,0.165822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +22.979397,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +22.979563,0.164894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +22.979729,0.168221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +22.979899,0.165981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +22.980066,0.166910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +22.980234,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +22.980402,0.166046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +22.980569,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +22.980735,0.167934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +22.980904,0.166461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +22.981072,0.167166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +22.981240,0.165853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +22.981407,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +22.981573,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +22.981737,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +22.981902,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +22.982066,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +22.982231,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +22.982395,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +22.982559,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +22.982723,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +22.982888,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +22.983053,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +22.983217,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +22.983381,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +22.983546,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +22.983711,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +22.983876,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +22.984040,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +22.984204,0.126334,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +22.984888,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +22.985053,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +22.985217,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +22.985381,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +22.985545,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +22.985709,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +22.985873,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +22.986038,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +22.986203,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +22.986368,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +22.986532,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +22.986696,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +22.986860,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +22.987024,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +22.987189,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +22.987353,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +22.987518,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +22.987682,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +22.987846,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +22.988010,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +22.988175,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +22.988339,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +22.988504,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +22.988669,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +22.988833,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +22.988998,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +22.989162,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +22.989326,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +22.989490,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +22.989655,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +22.989819,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +22.989984,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +22.990148,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +22.990312,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +22.990477,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +22.990641,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +22.990806,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +22.990970,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +22.991134,0.025184,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +22.991474,0.102814,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +22.991578,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +22.991742,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +22.991906,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +22.992071,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +22.992235,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +22.992399,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +22.992564,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +22.992728,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +22.992893,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +22.993057,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +22.993222,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +22.993386,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +22.993550,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +22.993715,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +22.993879,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +22.994043,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +22.994207,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +22.994372,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +22.994536,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +22.994701,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +22.994865,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +22.995030,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +22.995193,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +22.995358,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +22.995521,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +22.995686,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +22.995850,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +22.996014,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +22.996179,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +22.996344,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +22.996509,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +22.996673,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +22.996837,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +22.997001,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +22.997166,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +22.997331,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +22.997495,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +22.997659,0.086079,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +22.997939,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +22.997959,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +22.997960,0.005312,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +22.998111,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +22.998127,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +22.998129,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +23.013568,39.627526,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","97",,,"bs",679 +23.014493,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +23.014510,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +23.014511,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +23.033530,39.983008,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","98",,,"bs",685 +23.053218,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +23.053235,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +23.053236,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +23.053786,40.164253,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","99",,,"bs",691 +23.073530,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +23.073546,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +23.073548,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +23.092114,40.000544,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","100",,,"bs",697 +23.093967,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +23.093984,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +23.093985,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +23.112367,40.405849,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","101",,,"bs",703 +23.132145,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +23.132162,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +23.132164,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +23.133192,40.307707,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","102",,,"bs",709 +23.152788,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +23.152804,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +23.152805,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +23.170640,27.779865,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","103",,,"bs",715 +23.173515,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +23.173531,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +23.173532,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +23.198437,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +23.198452,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +23.198454,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +24.548836,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +24.549000,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +24.549164,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +24.549328,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +24.549491,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +24.549655,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +24.549819,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +24.549983,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +24.550146,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +24.550311,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +24.550474,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +24.550638,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +24.550801,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +24.550965,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +24.551129,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +24.551293,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +24.551457,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +24.551620,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +24.551784,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +24.551948,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +24.552112,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +24.552276,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +24.552440,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +24.552604,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +24.552768,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +24.552932,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +24.553097,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +24.553261,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +24.553426,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +24.553590,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +24.553754,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +24.553918,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +24.554083,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +24.554247,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +24.554411,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +24.554575,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +24.554739,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +24.554902,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +24.555066,0.024960,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +24.555498,39.615237,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","104",,,"bs",743 +24.555794,0.103007,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +24.555901,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +24.556066,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +24.556233,0.165341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +24.556399,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +24.556565,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +24.556731,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +24.556897,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +24.557062,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +24.557228,0.165853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +24.557395,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +24.557562,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +24.557729,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +24.557895,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +24.558061,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +24.558226,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +24.558391,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +24.558556,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +24.558723,0.171645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +24.558896,0.205437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +24.559102,0.206429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +24.559310,0.214589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +24.559526,0.209820,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +24.559737,0.212445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +24.559951,0.194013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +24.560146,0.202333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +24.560350,0.197053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +24.560548,0.204797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +24.560754,0.207997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +24.560963,0.207261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +24.561172,0.201085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +24.561374,0.208349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +24.561584,0.210205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +24.561795,0.177981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +24.561974,0.165246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +24.562141,0.169309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +24.562311,0.198557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +24.562511,0.195773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +24.562708,0.103935,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +24.563319,0.053183,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +24.563435,0.197213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +24.563634,0.206269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +24.563842,0.208701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +24.564052,0.216156,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +24.564269,0.204957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +24.564475,0.210461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +24.564687,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +24.564891,0.167517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +24.565060,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +24.565224,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +24.565390,0.165950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +24.565557,0.167773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +24.565726,0.166878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +24.565894,0.169373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +24.566064,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +24.566230,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +24.566395,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +24.566559,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +24.566724,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +24.566889,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +24.567053,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +24.567218,0.171901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +24.567391,0.196413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +24.567589,0.190109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +24.567780,0.201181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +24.567983,0.190717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +24.568175,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +24.568363,0.196125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +24.568560,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +24.568751,0.194237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +24.568947,0.195645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +24.569143,0.195453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +24.569340,0.169470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +24.569511,0.191901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +24.569704,0.202461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +24.569908,0.201277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +24.570110,0.203581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +24.570315,0.176797,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +24.571048,0.177310,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +24.571227,0.199965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +24.571428,0.196957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +24.571626,0.186333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +24.571814,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +24.572000,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +24.572191,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +24.572383,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +24.572570,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +24.572764,0.189405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +24.572954,0.190558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +24.573146,0.187550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +24.573335,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +24.573525,0.184797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +24.573711,0.183037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +24.573896,0.186429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +24.574084,0.187133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +24.574272,0.186078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +24.574460,0.189725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +24.574650,0.187101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +24.574839,0.186845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +24.575027,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +24.575215,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +24.575224,39.748036,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","105",,,"bs",749 +24.575397,0.178142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +24.575577,0.179069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +24.575757,0.179613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +24.575938,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +24.576119,0.175038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +24.576296,0.178333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +24.576475,0.182621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +24.576659,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +24.576845,0.179870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +24.577026,0.182590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +24.577210,0.183549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +24.577395,0.176925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +24.577573,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +24.577755,0.180510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +24.577937,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +24.578118,0.050495,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +24.578531,0.094654,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +24.578632,0.191581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +24.578825,0.188893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +24.579015,0.188349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +24.579204,0.188222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +24.579394,0.181438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +24.579576,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +24.579763,0.188989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +24.579953,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +24.580139,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +24.580323,0.181278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +24.580506,0.186205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +24.580693,0.179453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +24.580874,0.189085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +24.581064,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +24.581252,0.186397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +24.581440,0.189022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +24.581630,0.189758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +24.581821,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +24.582013,0.183613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +24.582198,0.185277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +24.582384,0.180541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +24.582566,0.187197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +24.582754,0.196253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +24.582952,0.193341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +24.583147,0.177950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +24.583326,0.170909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +24.583498,0.179709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +24.583679,0.178814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +24.583859,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +24.584040,0.180061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +24.584222,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +24.584409,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +24.584593,0.185950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +24.584780,0.178781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +24.584960,0.177597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +24.585139,0.175709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +24.585316,0.176350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +24.585493,0.115582,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +24.585932,0.028736,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +24.586040,0.197693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +24.586239,0.190046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +24.586431,0.206524,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +24.586638,0.200893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +24.586841,0.200445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +24.587042,0.197021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +24.587241,0.198781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +24.587441,0.196061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +24.587638,0.203933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +24.587843,0.195805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +24.588040,0.196381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +24.588238,0.199485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +24.588439,0.208125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +24.588648,0.198845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +24.588848,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +24.589028,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +24.589193,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +24.589356,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +24.589529,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +24.589693,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +24.589857,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +24.590021,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +24.590186,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +24.590350,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +24.590514,0.171742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +24.590687,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +24.590851,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +24.591016,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +24.591181,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +24.591345,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +24.591509,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +24.591674,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +24.591838,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +24.592002,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +24.592166,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +24.592330,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +24.592495,0.172030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +24.592668,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +24.592832,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +24.593165,0.122270,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +24.593289,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +24.593453,0.171229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +24.593625,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +24.593789,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +24.593954,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +24.594118,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +24.594283,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +24.594447,0.171709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +24.594620,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +24.594785,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +24.594950,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +24.595113,39.995616,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","106",,,"bs",755 +24.595114,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +24.595278,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +24.595443,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +24.595606,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +24.595770,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +24.595935,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +24.596099,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +24.596264,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +24.596428,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +24.596592,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +24.596757,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +24.596921,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +24.597086,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +24.597250,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +24.597415,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +24.597579,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +24.597744,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +24.597908,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +24.598073,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +24.598237,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +24.598402,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +24.598566,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +24.598731,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +24.598896,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +24.599059,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +24.599224,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +24.599389,0.065471,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +24.599668,0.061727,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +24.599764,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +24.599929,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +24.600093,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +24.600258,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +24.600422,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +24.600586,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +24.600750,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +24.600914,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +24.601079,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +24.601243,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +24.601407,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +24.601572,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +24.601736,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +24.601900,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +24.602064,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +24.602229,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +24.602393,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +24.602557,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +24.602721,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +24.602885,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +24.603049,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +24.603213,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +24.603378,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +24.603542,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +24.603707,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +24.603872,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +24.604036,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +24.604201,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +24.604365,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +24.604529,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +24.604693,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +24.604857,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +24.605021,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +24.605188,0.167454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +24.605356,0.166621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +24.605524,0.165598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +24.605691,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +24.605857,0.127518,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +24.606340,0.166973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +24.606509,0.166654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +24.606677,0.167709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +24.606845,0.168254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +24.607015,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +24.607182,0.166301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +24.607350,0.165918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +24.607517,0.166173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +24.607684,0.167710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +24.607853,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +24.608019,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +24.608183,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +24.608348,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +24.608512,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +24.608677,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +24.608841,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +24.609005,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +24.609170,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +24.609334,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +24.609498,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +24.609663,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +24.609827,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +24.609991,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +24.610156,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +24.610320,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +24.610484,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +24.610648,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +24.610813,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +24.610977,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +24.611141,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +24.611306,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +24.611470,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +24.611634,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +24.611798,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +24.611962,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +24.612127,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +24.612292,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +24.612456,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +24.612620,0.025088,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +24.612994,0.102846,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +24.613098,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +24.613262,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +24.613426,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +24.613590,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +24.613754,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +24.613919,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +24.614083,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +24.614247,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +24.614412,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +24.614576,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +24.614741,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +24.614906,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +24.615070,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +24.615234,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +24.615398,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +24.615563,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +24.615727,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +24.615892,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +24.616056,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +24.616220,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +24.616384,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +24.616549,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +24.616714,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +24.616878,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +24.617042,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +24.617206,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +24.617370,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +24.617534,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +24.617699,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +24.617864,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +24.618028,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +24.618192,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +24.618356,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +24.618520,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +24.618685,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +24.618849,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +24.619014,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +24.619178,0.086014,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +24.619462,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +24.619482,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +24.619483,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +24.619614,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +24.619631,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +24.619632,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +24.634140,39.783203,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","107",,,"bs",761 +24.635134,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +24.635151,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +24.635152,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +24.654108,40.044448,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","108",,,"bs",767 +24.673944,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +24.673961,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +24.673963,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +24.674453,40.140734,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","109",,,"bs",773 +24.694170,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +24.694186,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +24.694187,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +24.712684,40.013439,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","110",,,"bs",779 +24.714610,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +24.714627,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +24.714628,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +24.732999,40.326939,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","111",,,"bs",785 +24.752718,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +24.752735,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +24.752736,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +24.753698,40.364186,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","112",,,"bs",791 +24.773379,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +24.773402,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +24.773404,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +24.791239,27.753210,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","113",,,"bs",797 +24.794079,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +24.794096,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +24.794097,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +24.819007,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +24.819024,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +24.819025,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +26.217601,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +26.217765,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +26.217929,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +26.218093,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +26.218257,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +26.218420,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +26.218585,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +26.218750,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +26.218913,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +26.219077,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +26.219241,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +26.219405,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +26.219569,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +26.219733,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +26.219897,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +26.220061,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +26.220225,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +26.220388,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +26.220552,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +26.220716,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +26.220880,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +26.221044,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +26.221209,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +26.221373,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +26.221537,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +26.221701,0.168669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +26.221871,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +26.222035,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +26.222198,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +26.222363,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +26.222527,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +26.222690,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +26.222854,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +26.223018,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +26.223182,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +26.223347,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +26.223511,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +26.223675,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +26.223839,0.024927,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +26.224010,39.569254,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","114",,,"bs",825 +26.224410,0.105630,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +26.224553,0.167549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +26.224722,0.166334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +26.224889,0.170141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +26.225061,0.170813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +26.225233,0.168030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +26.225402,0.167549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +26.225571,0.166622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +26.225738,0.168189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +26.225908,0.169597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +26.226078,0.167262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +26.226247,0.166973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +26.226415,0.167998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +26.226584,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +26.226751,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +26.226918,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +26.227085,0.165918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +26.227252,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +26.227418,0.166686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +26.227587,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +26.227752,0.180125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +26.227934,0.207965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +26.228143,0.214909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +26.228359,0.212797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +26.228573,0.218428,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +26.228792,0.211901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +26.229006,0.210653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +26.229217,0.208029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +26.229427,0.199581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +26.229628,0.199645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +26.229828,0.208157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +26.230038,0.209501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +26.230249,0.204445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +26.230454,0.202493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +26.230658,0.200477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +26.230860,0.209853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +26.231071,0.191933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +26.231264,0.165405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +26.231431,0.086911,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +26.232111,0.055743,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +26.232252,0.212700,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +26.232466,0.208733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +26.232676,0.199645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +26.232877,0.202525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +26.233080,0.202365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +26.233284,0.193885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +26.233479,0.202013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +26.233682,0.205437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +26.233889,0.208989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +26.234099,0.218844,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +26.234319,0.214333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +26.234535,0.215965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +26.234753,0.205532,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +26.234960,0.182046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +26.235143,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +26.235309,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +26.235474,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +26.235638,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +26.235803,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +26.235971,0.167773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +26.236140,0.168894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +26.236310,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +26.236476,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +26.236640,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +26.236804,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +26.236969,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +26.237134,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +26.237298,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +26.237462,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +26.237627,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +26.237809,0.202941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +26.238013,0.189085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +26.238203,0.197245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +26.238401,0.195229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +26.238598,0.191133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +26.238790,0.198685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +26.238990,0.194685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +26.239186,0.172958,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +26.240099,0.176606,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +26.240276,0.201629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +26.240479,0.213789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +26.240695,0.211997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +26.240908,0.208413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +26.241117,0.205149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +26.241324,0.199389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +26.241524,0.199741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +26.241726,0.202460,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +26.241929,0.202269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +26.242133,0.203965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +26.242338,0.186653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +26.242526,0.186078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +26.242713,0.185981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +26.242900,0.193021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +26.243095,0.190973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +26.243287,0.189245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +26.243477,0.190973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +26.243669,0.194717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +26.243736,39.723620,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","115",,,"bs",831 +26.243865,0.187965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +26.244054,0.191485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +26.244247,0.189245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +26.244437,0.182878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +26.244621,0.184989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +26.244808,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +26.244994,0.184957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +26.245181,0.186397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +26.245368,0.188317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +26.245558,0.187901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +26.245747,0.183646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +26.245932,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +26.246117,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +26.246300,0.178301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +26.246480,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +26.246666,0.186238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +26.246853,0.182557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +26.247037,0.180253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +26.247218,0.181725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +26.247401,0.052191,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +26.248240,0.092447,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +26.248371,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +26.248555,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +26.248739,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +26.248923,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +26.249110,0.183741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +26.249295,0.183006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +26.249479,0.187645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +26.249668,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +26.249859,0.189213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +26.250049,0.187613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +26.250238,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +26.250424,0.180798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +26.250606,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +26.250793,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +26.250979,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +26.251166,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +26.251348,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +26.251536,0.187262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +26.251724,0.183581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +26.251909,0.186877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +26.252097,0.187229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +26.252286,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +26.252470,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +26.252657,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +26.252846,0.180254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +26.253027,0.183517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +26.253212,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +26.253395,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +26.253579,0.184829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +26.253765,0.182878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +26.253949,0.172701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +26.254123,0.166078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +26.254290,0.175998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +26.254468,0.174941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +26.254644,0.174909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +26.254820,0.174270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +26.254995,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +26.255176,0.120062,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +26.255782,0.025311,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +26.255910,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +26.256098,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +26.256286,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +26.256470,0.182974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +26.256654,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +26.256845,0.190493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +26.257037,0.189789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +26.257228,0.202301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +26.257432,0.213660,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +26.257647,0.202397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +26.257851,0.187902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +26.258040,0.194654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +26.258236,0.200476,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +26.258437,0.192510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +26.258631,0.193534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +26.258826,0.191805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +26.259019,0.207388,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +26.259228,0.195837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +26.259425,0.193341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +26.259619,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +26.259783,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +26.259948,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +26.260112,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +26.260277,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +26.260441,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +26.260605,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +26.260770,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +26.260934,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +26.261098,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +26.261262,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +26.261426,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +26.261591,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +26.261755,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +26.261919,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +26.262083,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +26.262247,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +26.262412,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +26.262576,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +26.262740,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +26.263189,0.122302,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +26.263316,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +26.263481,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +26.263623,40.012255,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","116",,,"bs",837 +26.263645,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +26.263810,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +26.263974,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +26.264138,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +26.264302,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +26.264467,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +26.264631,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +26.264795,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +26.264959,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +26.265123,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +26.265287,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +26.265452,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +26.265616,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +26.265781,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +26.265945,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +26.266109,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +26.266274,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +26.266438,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +26.266602,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +26.266766,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +26.266930,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +26.267094,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +26.267259,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +26.267424,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +26.267588,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +26.267752,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +26.267917,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +26.268081,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +26.268245,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +26.268409,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +26.268573,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +26.268737,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +26.268901,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +26.269065,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +26.269230,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +26.269394,0.065343,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +26.269824,0.061631,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +26.269943,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +26.270107,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +26.270271,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +26.270435,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +26.270599,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +26.270764,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +26.270928,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +26.271092,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +26.271256,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +26.271421,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +26.271585,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +26.271750,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +26.271915,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +26.272079,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +26.272243,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +26.272407,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +26.272572,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +26.272736,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +26.272900,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +26.273065,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +26.273229,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +26.273393,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +26.273557,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +26.273721,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +26.273886,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +26.274051,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +26.274215,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +26.274380,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +26.274544,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +26.274709,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +26.274873,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +26.275038,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +26.275202,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +26.275366,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +26.275531,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +26.275695,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +26.275860,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +26.276026,0.127966,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +26.276472,0.165566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +26.276639,0.165565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +26.276806,0.166014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +26.276973,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +26.277140,0.166238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +26.277308,0.168285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +26.277477,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +26.277643,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +26.277811,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +26.277977,0.165086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +26.278144,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +26.278309,0.164894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +26.278475,0.165917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +26.278642,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +26.278808,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +26.278972,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +26.279137,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +26.279301,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +26.279465,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +26.279629,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +26.279794,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +26.279958,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +26.280122,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +26.280287,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +26.280451,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +26.280616,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +26.280780,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +26.280944,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +26.281109,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +26.281273,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +26.281437,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +26.281602,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +26.281766,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +26.281930,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +26.282094,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +26.282259,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +26.282423,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +26.282587,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +26.282751,0.024927,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +26.283236,0.101919,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +26.283345,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +26.283509,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +26.283674,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +26.283838,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +26.284002,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +26.284166,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +26.284331,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +26.284495,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +26.284659,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +26.284823,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +26.284987,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +26.285151,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +26.285316,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +26.285480,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +26.285644,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +26.285809,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +26.285974,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +26.286138,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +26.286302,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +26.286466,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +26.286631,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +26.286795,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +26.286959,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +26.287123,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +26.287288,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +26.287452,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +26.287617,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +26.287780,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +26.287945,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +26.288110,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +26.288274,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +26.288439,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +26.288603,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +26.288768,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +26.288933,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +26.289097,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +26.289261,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +26.289426,0.085727,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +26.289776,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +26.289798,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +26.289799,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +26.289994,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +26.290013,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +26.290014,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +26.302667,39.586822,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","117",,,"bs",843 +26.303668,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +26.303688,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +26.303689,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +26.322611,39.981856,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","118",,,"bs",849 +26.342287,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +26.342306,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +26.342307,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +26.342947,40.226397,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","119",,,"bs",855 +26.362617,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +26.362634,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +26.362636,0.005184,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +26.381205,39.941824,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","120",,,"bs",861 +26.383190,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +26.383207,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +26.383208,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +26.401588,40.052671,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","121",,,"bs",867 +26.421167,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +26.421184,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +26.421186,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +26.422413,40.257276,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","122",,,"bs",873 +26.441672,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +26.441689,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +26.441691,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +26.459746,27.751290,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","123",,,"bs",879 +26.462697,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +26.462715,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +26.462716,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +26.487520,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +26.487536,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +26.487538,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +27.826327,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +27.826491,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +27.826655,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +27.826819,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +27.826983,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +27.827147,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +27.827311,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +27.827475,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +27.827639,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +27.827802,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +27.827966,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +27.828130,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +27.828294,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +27.828457,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +27.828621,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +27.828785,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +27.828949,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +27.829113,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +27.829277,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +27.829442,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +27.829606,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +27.829770,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +27.829934,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +27.830098,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +27.830262,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +27.830427,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +27.830592,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +27.830756,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +27.830921,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +27.831085,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +27.831249,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +27.831413,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +27.831578,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +27.831742,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +27.831905,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +27.832069,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +27.832233,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +27.832397,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +27.832562,0.024959,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +27.833010,39.562377,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","124",,,"bs",907 +27.833335,0.102430,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +27.833450,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +27.833616,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +27.833781,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +27.833946,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +27.834110,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +27.834275,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +27.834440,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +27.834605,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +27.834769,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +27.834933,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +27.835097,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +27.835261,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +27.835425,0.173022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +27.835599,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +27.835763,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +27.835927,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +27.836091,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +27.836255,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +27.836419,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +27.836603,0.200925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +27.836805,0.204957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +27.837011,0.213341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +27.837226,0.213629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +27.837440,0.214300,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +27.837656,0.195197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +27.837852,0.188413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +27.838042,0.198365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +27.838242,0.199645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +27.838442,0.207741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +27.838651,0.207325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +27.838860,0.203677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +27.839065,0.203101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +27.839269,0.206269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +27.839477,0.175965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +27.839654,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +27.839819,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +27.839983,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +27.840171,0.100478,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +27.840825,0.053407,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +27.840945,0.204189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +27.841151,0.192317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +27.841345,0.200861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +27.841547,0.206653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +27.841755,0.208317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +27.841964,0.204829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +27.842170,0.211228,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +27.842383,0.210525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +27.842595,0.180669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +27.842776,0.164990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +27.842943,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +27.843107,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +27.843272,0.169757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +27.843443,0.168414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +27.843613,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +27.843779,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +27.843943,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +27.844108,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +27.844271,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +27.844436,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +27.844601,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +27.844765,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +27.844929,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +27.845093,0.171902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +27.845267,0.194557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +27.845462,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +27.845654,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +27.845853,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +27.846044,0.187613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +27.846233,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +27.846428,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +27.846617,0.193501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +27.846812,0.191325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +27.847004,0.196925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +27.847203,0.170781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +27.847375,0.187454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +27.847563,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +27.847763,0.177053,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +27.848497,0.182174,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +27.848680,0.196125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +27.848878,0.199165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +27.849078,0.200541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +27.849280,0.202045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +27.849483,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +27.849677,0.190494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +27.849869,0.185853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +27.850056,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +27.850246,0.189565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +27.850437,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +27.850629,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +27.850818,0.186365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +27.851006,0.188029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +27.851195,0.196381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +27.851393,0.182910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +27.851577,0.199901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +27.851778,0.205564,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +27.851985,0.200253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +27.852186,0.190685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +27.852378,0.186526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +27.852566,0.192861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +27.852731,39.691079,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","125",,,"bs",913 +27.852760,0.187197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +27.852949,0.186877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +27.853137,0.183741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +27.853322,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +27.853510,0.178429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +27.853690,0.176670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +27.853867,0.177949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +27.854047,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +27.854231,0.181725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +27.854413,0.185470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +27.854600,0.180349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +27.854782,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +27.854964,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +27.855149,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +27.855332,0.184318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +27.855518,0.187197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +27.855706,0.050591,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +27.856177,0.101950,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +27.856287,0.188957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +27.856478,0.193789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +27.856673,0.184157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +27.856858,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +27.857045,0.189822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +27.857236,0.187613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +27.857425,0.200125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +27.857627,0.185821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +27.857814,0.186333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +27.858001,0.177757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +27.858180,0.186589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +27.858368,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +27.858555,0.186782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +27.858744,0.180829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +27.858926,0.182077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +27.859109,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +27.859293,0.179486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +27.859474,0.195550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +27.859670,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +27.859856,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +27.860039,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +27.860226,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +27.860413,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +27.860596,0.179390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +27.860777,0.182621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +27.860960,0.180733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +27.861142,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +27.861325,0.179038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +27.861506,0.179197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +27.861686,0.166493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +27.861854,0.175902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +27.862031,0.176861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +27.862209,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +27.862385,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +27.862570,0.178782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +27.862750,0.178525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +27.862930,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +27.863114,0.114590,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +27.863540,0.032671,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +27.863655,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +27.863836,0.180541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +27.864018,0.181278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +27.864200,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +27.864382,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +27.864566,0.198973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +27.864766,0.196093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +27.864963,0.193565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +27.865158,0.193885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +27.865353,0.196669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +27.865551,0.201277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +27.865754,0.192157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +27.865947,0.201629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +27.866150,0.191229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +27.866342,0.194845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +27.866538,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +27.866730,0.173918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +27.866905,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +27.867069,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +27.867233,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +27.867398,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +27.867562,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +27.867726,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +27.867891,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +27.868056,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +27.868220,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +27.868385,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +27.868549,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +27.868714,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +27.868878,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +27.869042,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +27.869207,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +27.869371,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +27.869535,0.171965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +27.869708,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +27.869872,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +27.870037,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +27.870201,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +27.870365,0.004832,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +27.870647,0.122398,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +27.870770,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +27.870935,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +27.871099,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +27.871263,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +27.871428,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +27.871592,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +27.871756,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +27.871920,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +27.872084,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +27.872248,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +27.872412,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +27.872586,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +27.872637,39.952483,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","126",,,"bs",919 +27.872750,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +27.872914,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +27.873078,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +27.873243,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +27.873408,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +27.873572,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +27.873737,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +27.873901,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +27.874065,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +27.874230,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +27.874394,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +27.874559,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +27.874723,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +27.874887,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +27.875052,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +27.875216,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +27.875380,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +27.875545,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +27.875710,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +27.875874,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +27.876038,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +27.876203,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +27.876367,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +27.876532,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +27.876696,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +27.876861,0.065439,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +27.877136,0.061823,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +27.877231,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +27.877395,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +27.877559,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +27.877723,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +27.877888,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +27.878052,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +27.878216,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +27.878380,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +27.878545,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +27.878709,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +27.878874,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +27.879038,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +27.879203,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +27.879367,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +27.879532,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +27.879696,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +27.879860,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +27.880024,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +27.880188,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +27.880353,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +27.880518,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +27.880682,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +27.880846,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +27.881011,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +27.881175,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +27.881340,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +27.881505,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +27.881670,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +27.881834,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +27.881998,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +27.882163,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +27.882328,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +27.882492,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +27.882656,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +27.882821,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +27.882985,0.166525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +27.883152,0.167678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +27.883321,0.128638,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +27.883744,0.166814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +27.883912,0.166301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +27.884080,0.166014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +27.884247,0.167453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +27.884416,0.169502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +27.884586,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +27.884755,0.166270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +27.884922,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +27.885089,0.166717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +27.885257,0.165342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +27.885423,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +27.885589,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +27.885756,0.165405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +27.885923,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +27.886087,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +27.886251,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +27.886416,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +27.886580,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +27.886744,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +27.886909,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +27.887073,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +27.887237,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +27.887402,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +27.887565,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +27.887730,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +27.887894,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +27.888058,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +27.888223,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +27.888387,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +27.888551,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +27.888715,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +27.888879,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +27.889044,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +27.889208,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +27.889372,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +27.889536,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +27.889700,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +27.889865,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +27.890029,0.024928,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +27.890433,0.102046,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +27.890536,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +27.890701,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +27.890865,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +27.891029,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +27.891194,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +27.891358,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +27.891522,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +27.891686,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +27.891851,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +27.892015,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +27.892179,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +27.892343,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +27.892507,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +27.892672,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +27.892836,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +27.893000,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +27.893164,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +27.893329,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +27.893494,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +27.893658,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +27.893822,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +27.893987,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +27.894151,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +27.894316,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +27.894480,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +27.894645,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +27.894809,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +27.894974,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +27.895138,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +27.895303,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +27.895467,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +27.895632,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +27.895795,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +27.895960,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +27.896124,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +27.896289,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +27.896453,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +27.896617,0.085918,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +27.896946,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +27.896966,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +27.896968,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +27.897129,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +27.897147,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +27.897148,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +27.911671,39.583176,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","127",,,"bs",925 +27.912610,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +27.912627,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +27.912629,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +27.931523,40.033058,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","128",,,"bs",931 +27.951301,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +27.951324,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +27.951325,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +27.952073,40.036834,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","129",,,"bs",937 +27.971576,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +27.971594,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +27.971595,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +27.990163,39.880740,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","130",,,"bs",943 +27.992125,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +27.992142,0.001376,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +27.992144,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +28.010436,40.527386,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","131",,,"bs",949 +28.030062,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +28.030079,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +28.030081,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +28.031429,40.209439,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","132",,,"bs",955 +28.051024,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +28.051047,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +28.051048,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +28.068730,27.765820,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","133",,,"bs",961 +28.071657,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +28.071675,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +28.071676,0.005152,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +28.096513,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +28.096529,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +28.096531,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +29.643591,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +29.643754,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +29.643918,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +29.644082,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +29.644246,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +29.644410,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +29.644574,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +29.644737,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +29.644901,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +29.645065,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +29.645228,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +29.645392,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +29.645556,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +29.645720,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +29.645883,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +29.646047,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +29.646211,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +29.646375,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +29.646539,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +29.646703,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +29.646868,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +29.647032,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +29.647196,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +29.647359,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +29.647523,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +29.647687,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +29.647852,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +29.648016,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +29.648180,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +29.648344,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +29.648508,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +29.648672,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +29.648837,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +29.649001,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +29.649165,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +29.649329,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +29.649493,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +29.649657,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +29.649821,0.025215,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +29.650152,39.590376,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","134",,,"bs",989 +29.650516,0.103455,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +29.650661,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +29.650825,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +29.650989,0.165853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +29.651156,0.167806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +29.651325,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +29.651491,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +29.651656,0.166781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +29.651824,0.171166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +29.651997,0.167229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +29.652165,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +29.652329,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +29.652494,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +29.652660,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +29.652825,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +29.652989,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +29.653155,0.167614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +29.653324,0.210812,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +29.653536,0.203997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +29.653741,0.209917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +29.653952,0.211837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +29.654165,0.205821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +29.654373,0.203325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +29.654577,0.216924,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +29.654795,0.200509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +29.654997,0.202461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +29.655201,0.209533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +29.655411,0.204957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +29.655617,0.206205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +29.655825,0.195549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +29.656022,0.201533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +29.656224,0.206876,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +29.656433,0.180766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +29.656615,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +29.656780,0.169470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +29.656951,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +29.657147,0.192797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +29.657341,0.196029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +29.657538,0.104382,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +29.658261,0.050559,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +29.658375,0.222493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +29.658599,0.211196,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +29.658811,0.212957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +29.659025,0.214877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +29.659241,0.203549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +29.659446,0.183197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +29.659630,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +29.659796,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +29.659961,0.169661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +29.660131,0.170142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +29.660303,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +29.660470,0.172158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +29.660643,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +29.660808,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +29.660972,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +29.661139,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +29.661303,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +29.661467,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +29.661633,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +29.661797,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +29.661961,0.176989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +29.662140,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +29.662339,0.190749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +29.662531,0.199293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +29.662732,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +29.662920,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +29.663109,0.202333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +29.663312,0.190141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +29.663504,0.193213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +29.663698,0.193597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +29.663893,0.195390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +29.664090,0.170749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +29.664262,0.187901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +29.664451,0.198589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +29.664650,0.195197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +29.664847,0.204317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +29.665053,0.195613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +29.665250,0.170461,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +29.665905,0.175805,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +29.666082,0.206461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +29.666289,0.183965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +29.666474,0.194461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +29.666670,0.187006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +29.666859,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +29.667050,0.186269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +29.667238,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +29.667426,0.197053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +29.667624,0.186653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +29.667812,0.185245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +29.667999,0.184830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +29.668185,0.187838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +29.668374,0.189917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +29.668565,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +29.668752,0.184093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +29.668937,0.184989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +29.669124,0.187261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +29.669312,0.187838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +29.669501,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +29.669689,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +29.669878,0.183645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +29.669882,39.744134,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","135",,,"bs",995 +29.670063,0.183965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +29.670248,0.180126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +29.670429,0.181118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +29.670612,0.179037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +29.670792,0.183517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +29.670977,0.177854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +29.671156,0.176510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +29.671334,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +29.671516,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +29.671706,0.177469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +29.671885,0.182494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +29.672069,0.186589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +29.672257,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +29.672437,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +29.672614,0.179966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +29.672796,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +29.672978,0.050207,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +29.673326,0.089374,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +29.673431,0.194717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +29.673627,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +29.673814,0.191901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +29.674007,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +29.674197,0.187262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +29.674385,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +29.674569,0.186397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +29.674757,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +29.674946,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +29.675135,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +29.675319,0.183198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +29.675503,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +29.675692,0.181533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +29.675875,0.189021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +29.676065,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +29.676254,0.182558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +29.676438,0.185694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +29.676625,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +29.676813,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +29.676999,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +29.677182,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +29.677366,0.181406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +29.677548,0.190973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +29.677740,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +29.677925,0.173533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +29.678100,0.166302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +29.678268,0.175581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +29.678445,0.176733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +29.678623,0.176606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +29.678801,0.175709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +29.678978,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +29.679159,0.178590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +29.679338,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +29.679524,0.176989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +29.679702,0.174781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +29.679878,0.176798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +29.680056,0.178589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +29.680236,0.115486,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +29.680719,0.024895,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +29.680819,0.199133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +29.681019,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +29.681214,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +29.681413,0.194205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +29.681608,0.192413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +29.681802,0.196957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +29.682000,0.194333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +29.682196,0.195645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +29.682393,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +29.682585,0.200157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +29.682786,0.192573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +29.682980,0.176350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +29.683157,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +29.683321,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +29.683485,0.172061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +29.683659,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +29.683824,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +29.683988,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +29.684152,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +29.684316,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +29.684481,0.172157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +29.684655,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +29.684819,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +29.684983,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +29.685148,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +29.685312,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +29.685477,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +29.685641,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +29.685805,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +29.685970,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +29.686134,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +29.686299,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +29.686463,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +29.686627,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +29.686792,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +29.686956,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +29.687121,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +29.687285,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +29.687449,0.004960,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +29.687899,0.123006,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +29.688023,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +29.688187,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +29.688351,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +29.688515,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +29.688679,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +29.688844,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +29.689008,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +29.689172,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +29.689337,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +29.689501,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +29.689666,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +29.689764,39.984322,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","136",,,"bs",1001 +29.689830,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +29.689994,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +29.690158,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +29.690322,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +29.690486,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +29.690651,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +29.690815,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +29.690981,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +29.691145,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +29.691309,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +29.691473,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +29.691638,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +29.691802,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +29.691966,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +29.692130,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +29.692294,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +29.692459,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +29.692623,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +29.692788,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +29.692952,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +29.693116,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +29.693281,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +29.693446,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +29.693610,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +29.693775,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +29.693939,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +29.694104,0.065375,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +29.694614,0.061823,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +29.694709,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +29.694873,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +29.695037,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +29.695202,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +29.695366,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +29.695530,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +29.695694,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +29.695858,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +29.696023,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +29.696187,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +29.696352,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +29.696516,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +29.696681,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +29.696845,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +29.697009,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +29.697173,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +29.697337,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +29.697501,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +29.697666,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +29.697830,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +29.697994,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +29.698159,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +29.698323,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +29.698488,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +29.698652,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +29.698816,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +29.698980,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +29.699145,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +29.699311,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +29.699477,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +29.699643,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +29.699809,0.166365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +29.699976,0.165309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +29.700143,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +29.700308,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +29.700473,0.165054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +29.700640,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +29.700805,0.127615,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +29.701506,0.166301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +29.701673,0.165790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +29.701840,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +29.702007,0.167134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +29.702175,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +29.702340,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +29.702504,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +29.702668,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +29.702832,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +29.702996,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +29.703160,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +29.703324,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +29.703488,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +29.703653,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +29.703817,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +29.703982,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +29.704146,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +29.704310,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +29.704474,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +29.704639,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +29.704803,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +29.704967,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +29.705132,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +29.705296,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +29.705460,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +29.705624,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +29.705789,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +29.705953,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +29.706117,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +29.706281,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +29.706446,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +29.706610,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +29.706775,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +29.706939,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +29.707103,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +29.707268,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +29.707432,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +29.707596,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +29.707760,0.025056,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +29.708123,0.102910,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +29.708227,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +29.708391,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +29.708555,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +29.708720,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +29.708884,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +29.709048,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +29.709212,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +29.709376,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +29.709540,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +29.709704,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +29.709868,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +29.710033,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +29.710197,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +29.710361,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +29.710527,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +29.710691,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +29.710855,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +29.711019,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +29.711183,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +29.711347,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +29.711511,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +29.711675,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +29.711840,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +29.712004,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +29.712168,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +29.712333,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +29.712498,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +29.712662,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +29.712826,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +29.712991,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +29.713155,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +29.713320,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +29.713484,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +29.713648,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +29.713813,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +29.713977,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +29.714142,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +29.714306,0.086271,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +29.714727,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +29.714751,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +29.714752,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +29.715017,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +29.715038,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +29.715040,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +29.728813,39.607016,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","137",,,"bs",1007 +29.729796,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +29.729818,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +29.729820,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +29.748801,40.136256,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","138",,,"bs",1013 +29.768449,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +29.768470,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +29.768471,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +29.769060,40.235198,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","139",,,"bs",1019 +29.788962,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +29.788981,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +29.788983,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +29.807373,39.904196,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","140",,,"bs",1025 +29.809316,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +29.809335,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +29.809337,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +29.827587,40.319742,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","141",,,"bs",1031 +29.847300,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +29.847319,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +29.847321,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +29.848304,40.501466,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","142",,,"bs",1037 +29.867939,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +29.867958,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +29.867959,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +29.885921,27.749564,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","143",,,"bs",1043 +29.888846,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +29.888866,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +29.888867,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +29.913691,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +29.913710,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +29.913711,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +31.365983,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +31.366147,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +31.366310,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +31.366474,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +31.366638,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +31.366803,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +31.366967,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +31.367131,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +31.367295,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +31.367459,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +31.367623,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +31.367786,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +31.367950,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +31.368114,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +31.368278,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +31.368442,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +31.368606,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +31.368770,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +31.368934,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +31.369098,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +31.369263,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +31.369428,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +31.369593,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +31.369758,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +31.369922,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +31.370087,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +31.370251,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +31.370416,0.170014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +31.370587,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +31.370752,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +31.370916,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +31.371081,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +31.371245,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +31.371410,0.172094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +31.371583,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +31.371747,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +31.371911,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +31.372075,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +31.372239,0.025119,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +31.372545,39.622632,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","144",,,"bs",1071 +31.372887,0.102238,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +31.373010,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +31.373174,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +31.373338,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +31.373502,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +31.373666,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +31.373830,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +31.373994,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +31.374157,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +31.374322,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +31.374486,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +31.374650,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +31.374814,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +31.374977,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +31.375141,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +31.375305,0.169630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +31.375476,0.169309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +31.375646,0.168925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +31.375816,0.166014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +31.375983,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +31.376149,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +31.376314,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +31.376481,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +31.376647,0.169501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +31.376817,0.166590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +31.376985,0.169341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +31.377156,0.167934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +31.377325,0.168125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +31.377494,0.167102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +31.377662,0.166238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +31.377830,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +31.377995,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +31.378159,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +31.378324,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +31.378489,0.172221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +31.378663,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +31.378827,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +31.378992,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +31.379158,0.091518,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +31.379953,0.056639,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +31.380080,0.223804,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +31.380306,0.224093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +31.380531,0.222941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +31.380755,0.219132,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +31.380976,0.218781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +31.381196,0.219709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +31.381416,0.231164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +31.381649,0.224477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +31.381875,0.217628,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +31.382094,0.209213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +31.382304,0.219613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +31.382525,0.200509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +31.382727,0.171229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +31.382899,0.171550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +31.383072,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +31.383257,0.212285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +31.383470,0.217468,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +31.383689,0.215037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +31.383905,0.212477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +31.384119,0.212444,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +31.384333,0.215421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +31.384549,0.223453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +31.384774,0.205789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +31.384981,0.205789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +31.385188,0.211132,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +31.385401,0.215261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +31.385617,0.215389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +31.385834,0.220188,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +31.386055,0.215517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +31.386272,0.225277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +31.386499,0.176445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +31.386676,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +31.386843,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +31.387009,0.169213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +31.387180,0.171998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +31.387353,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +31.387519,0.171358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +31.387691,0.147613,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +31.388281,0.145597,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +31.388428,0.184766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +31.388614,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +31.388781,0.165502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +31.388948,0.167741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +31.389117,0.164894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +31.389283,0.166046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +31.389450,0.216125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +31.389668,0.214844,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +31.389884,0.204733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +31.390090,0.209661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +31.390301,0.211965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +31.390515,0.204157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +31.390720,0.202557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +31.390924,0.204029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +31.391129,0.198717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +31.391329,0.196797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +31.391528,0.198301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +31.391727,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +31.391925,0.202173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +31.392129,0.198365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +31.392278,39.702951,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","145",,,"bs",1077 +31.392328,0.173278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +31.392503,0.175101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +31.392679,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +31.392874,0.196765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +31.393072,0.196797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +31.393270,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +31.393468,0.198333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +31.393667,0.195005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +31.393863,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +31.394058,0.199037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +31.394258,0.195677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +31.394455,0.204989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +31.394662,0.198941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +31.394862,0.202365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +31.395066,0.193725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +31.395261,0.182557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +31.395444,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +31.395632,0.050144,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +31.396102,0.094463,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +31.396222,0.191038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +31.396415,0.200093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +31.396616,0.191518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +31.396809,0.197725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +31.397007,0.191965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +31.397201,0.192253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +31.397394,0.187805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +31.397583,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +31.397770,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +31.397958,0.187389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +31.398147,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +31.398337,0.191389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +31.398530,0.187998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +31.398719,0.194141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +31.398914,0.187773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +31.399103,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +31.399290,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +31.399483,0.186525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +31.399670,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +31.399854,0.188382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +31.400043,0.187549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +31.400232,0.185277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +31.400418,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +31.400607,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +31.400792,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +31.400981,0.184574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +31.401166,0.187005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +31.401355,0.181789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +31.401538,0.193213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +31.401732,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +31.401918,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +31.402102,0.179902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +31.402283,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +31.402467,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +31.402659,0.185405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +31.402846,0.183741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +31.403031,0.182494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +31.403214,0.120095,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +31.403890,0.023712,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +31.404011,0.189950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +31.404202,0.189981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +31.404394,0.195933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +31.404591,0.192221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +31.404785,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +31.404982,0.190077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +31.405174,0.187901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +31.405363,0.184701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +31.405549,0.195357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +31.405745,0.189885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +31.405936,0.181982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +31.406119,0.189853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +31.406310,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +31.406502,0.188957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +31.406692,0.186877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +31.406880,0.191869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +31.407073,0.188797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +31.407263,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +31.407452,0.183934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +31.407637,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +31.407825,0.187293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +31.408014,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +31.408203,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +31.408397,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +31.408588,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +31.408771,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +31.408936,0.176541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +31.409114,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +31.409295,0.192254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +31.409488,0.190142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +31.409680,0.178141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +31.409859,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +31.410040,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +31.410225,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +31.410414,0.192958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +31.410608,0.181885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +31.410791,0.178237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +31.410971,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +31.411155,0.005344,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +31.411920,0.142685,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +31.412064,0.190430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +31.412173,40.008834,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","146",,,"bs",1083 +31.412256,0.206748,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +31.412464,0.207389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +31.412672,0.193853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +31.412867,0.196125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +31.413065,0.195901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +31.413262,0.197373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +31.413461,0.198237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +31.413660,0.191485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +31.413853,0.196605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +31.414051,0.196925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +31.414249,0.201917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +31.414452,0.195741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +31.414649,0.195069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +31.414845,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +31.415010,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +31.415174,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +31.415338,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +31.415502,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +31.415666,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +31.415830,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +31.415995,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +31.416159,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +31.416323,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +31.416487,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +31.416651,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +31.416815,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +31.416979,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +31.417143,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +31.417308,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +31.417472,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +31.417645,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +31.417809,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +31.417973,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +31.418138,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +31.418302,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +31.418466,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +31.418639,0.065439,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +31.419083,0.061599,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +31.419195,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +31.419359,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +31.419523,0.172349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +31.419697,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +31.419861,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +31.420026,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +31.420190,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +31.420354,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +31.420518,0.172286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +31.420691,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +31.420856,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +31.421020,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +31.421185,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +31.421348,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +31.421513,0.172030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +31.421686,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +31.421850,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +31.422016,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +31.422182,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +31.422346,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +31.422511,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +31.422676,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +31.422840,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +31.423005,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +31.423169,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +31.423333,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +31.423497,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +31.423662,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +31.423826,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +31.423991,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +31.424155,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +31.424319,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +31.424484,0.171966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +31.424657,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +31.424821,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +31.424985,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +31.425150,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +31.425314,0.126302,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +31.425908,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +31.426072,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +31.426237,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +31.426401,0.171646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +31.426574,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +31.426738,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +31.426902,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +31.427067,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +31.427231,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +31.427396,0.172222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +31.427569,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +31.427734,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +31.427898,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +31.428062,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +31.428227,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +31.428391,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +31.428556,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +31.428720,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +31.428884,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +31.429049,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +31.429213,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +31.429378,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +31.429543,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +31.429708,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +31.429872,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +31.430036,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +31.430200,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +31.430364,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +31.430529,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +31.430693,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +31.430857,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +31.431023,0.168574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +31.431193,0.167677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +31.431361,0.168222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +31.431531,0.176221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +31.431708,0.169757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +31.431879,0.169086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +31.432049,0.167677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +31.432218,0.025824,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +31.432764,0.105918,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +31.432881,0.170782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +31.433053,0.171677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +31.433226,0.170941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +31.433399,0.168542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +31.433568,0.172701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +31.433742,0.170206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +31.433914,0.171709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +31.434087,0.170717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +31.434259,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +31.434423,0.172573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +31.434597,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +31.434763,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +31.434927,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +31.435092,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +31.435256,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +31.435421,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +31.435585,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +31.435749,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +31.435913,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +31.436077,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +31.436242,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +31.436406,0.171677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +31.436579,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +31.436743,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +31.436907,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +31.437071,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +31.437235,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +31.437399,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +31.437563,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +31.437728,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +31.437892,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +31.438056,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +31.438220,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +31.438385,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +31.438548,0.171774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +31.438721,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +31.438886,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +31.439050,0.085726,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +31.439514,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +31.439539,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +31.439540,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +31.439746,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +31.439768,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +31.439769,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +31.451255,39.566537,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","147",,,"bs",1089 +31.452260,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +31.452286,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +31.452287,0.005184,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +31.471190,40.088001,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","148",,,"bs",1095 +31.490890,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +31.490916,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +31.490917,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +31.491438,40.262303,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","149",,,"bs",1101 +31.511303,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +31.511324,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +31.511325,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +31.529822,39.881028,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","150",,,"bs",1107 +31.531726,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +31.531748,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +31.531749,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +31.550011,40.368829,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","151",,,"bs",1113 +31.569736,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +31.569758,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +31.569759,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +31.570970,40.274974,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","152",,,"bs",1119 +31.590404,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +31.590424,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +31.590426,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +31.608396,27.657149,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","153",,,"bs",1125 +31.611264,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +31.611284,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +31.611285,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +31.636076,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +31.636096,0.001183,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +31.636097,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +32.977467,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +32.977631,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +32.977795,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +32.977958,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +32.978122,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +32.978286,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +32.978450,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +32.978614,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +32.978778,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +32.978942,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +32.979105,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +32.979269,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +32.979433,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +32.979597,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +32.979761,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +32.979925,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +32.980089,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +32.980253,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +32.980417,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +32.980581,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +32.980745,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +32.980909,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +32.981073,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +32.981237,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +32.981401,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +32.981565,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +32.981729,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +32.981894,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +32.982058,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +32.982222,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +32.982385,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +32.982549,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +32.982714,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +32.982878,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +32.983042,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +32.983206,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +32.983370,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +32.983535,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +32.983699,0.024992,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +32.983784,39.615274,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","154",,,"bs",1153 +32.983994,0.101790,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +32.984097,0.162206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +32.984260,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +32.984424,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +32.984589,0.165853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +32.984756,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +32.984922,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +32.985089,0.165054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +32.985255,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +32.985420,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +32.985585,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +32.985749,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +32.985914,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +32.986078,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +32.986242,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +32.986407,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +32.986571,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +32.986736,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +32.986900,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +32.987064,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +32.987228,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +32.987392,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +32.987557,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +32.987723,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +32.987887,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +32.988051,0.178909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +32.988231,0.198269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +32.988431,0.212285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +32.988644,0.215293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +32.988861,0.203229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +32.989066,0.202717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +32.989269,0.199261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +32.989470,0.194877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +32.989666,0.208541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +32.989876,0.205212,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +32.990082,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +32.990287,0.203357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +32.990491,0.202749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +32.990695,0.106303,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +32.991198,0.041887,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +32.991295,0.166110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +32.991463,0.198877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +32.991663,0.203837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +32.991868,0.213149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +32.992083,0.208253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +32.992292,0.204253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +32.992498,0.205949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +32.992705,0.214236,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +32.992920,0.202749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +32.993124,0.209341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +32.993335,0.211165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +32.993547,0.210749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +32.993759,0.214268,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +32.993974,0.211485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +32.994187,0.197213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +32.994386,0.167230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +32.994554,0.168637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +32.994724,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +32.994899,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +32.995065,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +32.995230,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +32.995394,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +32.995559,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +32.995725,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +32.995889,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +32.996053,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +32.996219,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +32.996383,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +32.996547,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +32.996712,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +32.996876,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +32.997070,0.191709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +32.997263,0.196317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +32.997460,0.192349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +32.997654,0.186493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +32.997842,0.199965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +32.998043,0.190749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +32.998235,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +32.998865,0.146718,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +32.999013,0.199901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +32.999214,0.202237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +32.999418,0.202429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +32.999621,0.208797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +32.999832,0.209373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +33.000043,0.203900,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +33.000248,0.203805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +33.000453,0.205117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +33.000659,0.205661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +33.000866,0.209661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +33.001077,0.204029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +33.001283,0.200861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +33.001485,0.196797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +33.001683,0.183421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +33.001867,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +33.002050,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +33.002240,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +33.002429,0.186974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +33.002617,0.180765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +33.002799,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +33.002986,0.184541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +33.003171,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +33.003354,0.182430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +33.003509,39.743752,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","155",,,"bs",1159 +33.003538,0.183581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +33.003722,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +33.003903,0.178141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +33.004082,0.180542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +33.004264,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +33.004442,0.176061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +33.004620,0.178846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +33.004800,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +33.004984,0.179197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +33.005164,0.177661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +33.005343,0.177150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +33.005522,0.175485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +33.005698,0.175005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +33.005874,0.173470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +33.006049,0.047487,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +33.006512,0.097758,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +33.006622,0.176349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +33.006800,0.180733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +33.006982,0.178942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +33.007162,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +33.007339,0.177949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +33.007518,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +33.007708,0.178334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +33.007888,0.180349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +33.008069,0.179549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +33.008250,0.179134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +33.008430,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +33.008611,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +33.008793,0.176285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +33.008971,0.175486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +33.009147,0.178717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +33.009327,0.181533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +33.009510,0.186205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +33.009698,0.186590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +33.009885,0.188541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +33.010075,0.193661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +33.010270,0.184125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +33.010456,0.180669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +33.010638,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +33.010821,0.185598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +33.011008,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +33.011190,0.179325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +33.011370,0.175549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +33.011547,0.184542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +33.011733,0.170365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +33.011904,0.175965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +33.012082,0.179678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +33.012262,0.172381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +33.012436,0.181725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +33.012619,0.175709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +33.012796,0.182014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +33.012979,0.173789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +33.013154,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +33.013335,0.118238,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +33.013819,0.029087,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +33.013920,0.186174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +33.014108,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +33.014293,0.172509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +33.014467,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +33.014648,0.179134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +33.014829,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +33.015009,0.176285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +33.015187,0.174846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +33.015363,0.178205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +33.015542,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +33.015731,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +33.015912,0.179166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +33.016092,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +33.016271,0.175805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +33.016448,0.177533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +33.016627,0.176478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +33.016804,0.175549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +33.016981,0.176445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +33.017159,0.178558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +33.017338,0.179069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +33.017519,0.179133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +33.017699,0.179165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +33.017879,0.196573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +33.018077,0.188990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +33.018268,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +33.018460,0.188989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +33.018650,0.186685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +33.018838,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +33.019026,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +33.019211,0.191613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +33.019403,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +33.019597,0.189918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +33.019789,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +33.019976,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +33.020142,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +33.020306,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +33.020470,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +33.020635,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +33.020799,0.004800,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +33.021141,0.122238,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +33.021264,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +33.021427,0.171613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +33.021600,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +33.021764,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +33.021929,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +33.022093,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +33.022257,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +33.022422,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +33.022586,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +33.022750,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +33.022915,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +33.023079,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +33.023244,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +33.023394,39.970084,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","156",,,"bs",1165 +33.023407,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +33.023581,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +33.023744,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +33.023909,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +33.024073,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +33.024238,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +33.024402,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +33.024567,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +33.024731,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +33.024895,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +33.025060,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +33.025224,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +33.025388,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +33.025552,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +33.025717,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +33.025882,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +33.026046,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +33.026210,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +33.026375,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +33.026539,0.172094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +33.026712,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +33.026877,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +33.027041,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +33.027205,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +33.027370,0.065311,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +33.027666,0.061567,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +33.027761,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +33.027926,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +33.028090,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +33.028254,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +33.028418,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +33.028583,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +33.028747,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +33.028911,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +33.029076,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +33.029240,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +33.029404,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +33.029568,0.171294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +33.029741,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +33.029905,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +33.030069,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +33.030233,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +33.030398,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +33.030562,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +33.030726,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +33.030891,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +33.031055,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +33.031219,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +33.031384,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +33.031548,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +33.031712,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +33.031876,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +33.032041,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +33.032205,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +33.032370,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +33.032534,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +33.032699,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +33.032863,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +33.033027,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +33.033192,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +33.033357,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +33.033521,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +33.033685,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +33.033850,0.126654,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +33.034241,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +33.034405,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +33.034569,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +33.034734,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +33.034899,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +33.035063,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +33.035228,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +33.035392,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +33.035556,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +33.035720,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +33.035884,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +33.036048,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +33.036214,0.168125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +33.036383,0.166974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +33.036551,0.167517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +33.036720,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +33.036888,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +33.037054,0.165534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +33.037221,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +33.037387,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +33.037554,0.167358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +33.037723,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +33.037889,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +33.038055,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +33.038221,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +33.038387,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +33.038551,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +33.038716,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +33.038882,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +33.039047,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +33.039212,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +33.039376,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +33.039541,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +33.039705,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +33.039870,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +33.040034,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +33.040199,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +33.040363,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +33.040528,0.024960,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +33.040944,0.102143,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +33.041047,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +33.041212,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +33.041376,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +33.041540,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +33.041704,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +33.041869,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +33.042033,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +33.042197,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +33.042361,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +33.042526,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +33.042691,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +33.042855,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +33.043019,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +33.043183,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +33.043347,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +33.043511,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +33.043675,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +33.043840,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +33.044004,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +33.044168,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +33.044332,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +33.044496,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +33.044660,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +33.044824,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +33.044989,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +33.045153,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +33.045317,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +33.045482,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +33.045645,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +33.045809,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +33.045974,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +33.046138,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +33.046302,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +33.046467,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +33.046632,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +33.046796,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +33.046960,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +33.047125,0.086014,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +33.047433,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +33.047456,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +33.047457,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +33.047604,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +33.047624,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +33.047625,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +33.062446,39.559787,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","157",,,"bs",1171 +33.063388,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +33.063409,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +33.063410,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +33.082353,40.151458,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","158",,,"bs",1177 +33.102022,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +33.102043,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +33.102044,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +33.102667,40.201921,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","159",,,"bs",1183 +33.122520,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +33.122539,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +33.122540,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +33.140982,39.860582,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","160",,,"bs",1189 +33.142885,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +33.142905,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +33.142906,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +33.161189,40.449725,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","161",,,"bs",1195 +33.180907,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +33.180933,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +33.180934,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +33.182065,40.311103,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","162",,,"bs",1201 +33.201670,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +33.201690,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +33.201692,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +33.219475,27.823228,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","163",,,"bs",1207 +33.222391,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +33.222411,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +33.222412,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +33.247314,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +33.247334,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +33.247335,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +34.637060,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +34.637224,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +34.637388,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +34.637552,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +34.637716,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +34.637879,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +34.638043,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +34.638207,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +34.638371,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +34.638535,0.171901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +34.638708,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +34.638872,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +34.639035,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +34.639199,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +34.639363,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +34.639527,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +34.639691,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +34.639855,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +34.640019,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +34.640183,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +34.640348,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +34.640512,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +34.640676,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +34.640840,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +34.641004,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +34.641168,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +34.641333,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +34.641496,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +34.641661,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +34.641825,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +34.641989,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +34.642153,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +34.642317,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +34.642481,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +34.642645,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +34.642809,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +34.642973,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +34.643138,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +34.643301,0.024991,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +34.643702,39.559370,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","164",,,"bs",1235 +34.644047,0.102271,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +34.644200,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +34.644364,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +34.644529,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +34.644694,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +34.644858,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +34.645023,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +34.645187,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +34.645351,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +34.645516,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +34.645680,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +34.645845,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +34.646009,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +34.646173,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +34.646337,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +34.646502,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +34.646666,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +34.646830,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +34.646994,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +34.647158,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +34.647322,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +34.647486,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +34.647650,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +34.647815,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +34.647979,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +34.648143,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +34.648308,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +34.648472,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +34.648659,0.197021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +34.648857,0.203421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +34.649062,0.201021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +34.649264,0.199869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +34.649466,0.210108,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +34.649677,0.201597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +34.649880,0.191453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +34.650072,0.205661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +34.650279,0.208157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +34.650488,0.201085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +34.650691,0.102399,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +34.651710,0.042303,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +34.651843,0.167549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +34.652012,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +34.652192,0.202589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +34.652396,0.201693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +34.652599,0.200029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +34.652800,0.203709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +34.653005,0.200413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +34.653207,0.216093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +34.653424,0.200573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +34.653626,0.190749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +34.653818,0.191325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +34.654010,0.199645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +34.654211,0.198301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +34.654411,0.201821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +34.654614,0.201341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +34.654816,0.202045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +34.655019,0.198909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +34.655220,0.167965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +34.655389,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +34.655553,0.167165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +34.655722,0.167902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +34.655891,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +34.656056,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +34.656222,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +34.656387,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +34.656551,0.170973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +34.656723,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +34.656887,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +34.657051,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +34.657217,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +34.657381,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +34.657545,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +34.657710,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +34.657874,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +34.658039,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +34.658204,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +34.658368,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +34.658533,0.155549,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +34.659159,0.143486,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +34.659304,0.177821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +34.659483,0.204669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +34.659689,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +34.659878,0.196637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +34.660076,0.188893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +34.660266,0.185054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +34.660452,0.194717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +34.660648,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +34.660847,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +34.661035,0.189661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +34.661226,0.189469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +34.661416,0.192733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +34.661610,0.183389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +34.661795,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +34.661960,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +34.662147,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +34.662342,0.188669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +34.662532,0.193245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +34.662726,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +34.662920,0.187998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +34.663109,0.189757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +34.663300,0.191133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +34.663421,39.814855,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","165",,,"bs",1241 +34.663493,0.190461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +34.663684,0.194269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +34.663880,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +34.664072,0.197821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +34.664271,0.173533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +34.664446,0.173406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +34.664620,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +34.664796,0.175933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +34.664973,0.171742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +34.665146,0.171837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +34.665319,0.172126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +34.665492,0.173693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +34.665667,0.175549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +34.665844,0.173630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +34.666019,0.172637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +34.666192,0.047615,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +34.666620,0.093118,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +34.666753,0.175134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +34.666930,0.173821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +34.667105,0.177214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +34.667283,0.178942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +34.667463,0.178717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +34.667643,0.177053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +34.667821,0.174494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +34.667997,0.179165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +34.668177,0.173053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +34.668352,0.172094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +34.668525,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +34.668709,0.172445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +34.668883,0.176478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +34.669060,0.174205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +34.669236,0.172637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +34.669409,0.173854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +34.669584,0.173853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +34.669759,0.173853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +34.669934,0.176190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +34.670112,0.176221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +34.670289,0.174717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +34.670465,0.177694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +34.670644,0.172957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +34.670818,0.173981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +34.670993,0.173822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +34.671168,0.176349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +34.671346,0.176477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +34.671524,0.184926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +34.671710,0.174493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +34.671885,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +34.672059,0.171294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +34.672231,0.172509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +34.672405,0.171486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +34.672578,0.172733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +34.672752,0.172125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +34.672925,0.174238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +34.673101,0.170653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +34.673272,0.110974,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +34.673682,0.023104,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +34.673804,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +34.673979,0.172542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +34.674153,0.172861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +34.674327,0.170430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +34.674498,0.177405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +34.674677,0.175133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +34.674853,0.173726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +34.675028,0.175197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +34.675205,0.175645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +34.675382,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +34.675562,0.171166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +34.675734,0.174493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +34.675910,0.175038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +34.676086,0.175005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +34.676263,0.173501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +34.676437,0.175422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +34.676614,0.173501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +34.676789,0.169213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +34.676959,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +34.677124,0.170109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +34.677295,0.170654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +34.677467,0.172061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +34.677641,0.171837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +34.677814,0.170974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +34.677986,0.175517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +34.678163,0.176894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +34.678341,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +34.678514,0.171709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +34.678687,0.170238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +34.678858,0.168477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +34.679028,0.168606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +34.679198,0.169853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +34.679369,0.170013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +34.679540,0.170046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +34.679711,0.167357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +34.679880,0.175518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +34.680057,0.169981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +34.680228,0.177565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +34.680407,0.005824,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +34.680877,0.144926,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +34.681023,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +34.681210,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +34.681396,0.185822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +34.681583,0.184957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +34.681769,0.190749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +34.681961,0.192861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +34.682155,0.187261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +34.682344,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +34.682508,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +34.682672,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +34.682836,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +34.683001,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +34.683165,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +34.683329,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +34.683357,40.000900,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","166",,,"bs",1247 +34.683494,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +34.683658,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +34.683822,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +34.683987,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +34.684151,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +34.684315,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +34.684479,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +34.684643,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +34.684808,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +34.684972,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +34.685136,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +34.685301,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +34.685466,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +34.685630,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +34.685794,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +34.685958,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +34.686123,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +34.686287,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +34.686452,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +34.686616,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +34.686781,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +34.686945,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +34.687109,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +34.687274,0.065407,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +34.687577,0.061695,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +34.687673,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +34.687838,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +34.688001,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +34.688166,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +34.688331,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +34.688496,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +34.688660,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +34.688824,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +34.688989,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +34.689153,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +34.689317,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +34.689482,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +34.689646,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +34.689811,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +34.689975,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +34.690140,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +34.690304,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +34.690469,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +34.690633,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +34.690797,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +34.690961,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +34.691126,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +34.691290,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +34.691454,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +34.691619,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +34.691783,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +34.691948,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +34.692112,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +34.692276,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +34.692441,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +34.692605,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +34.692770,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +34.692934,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +34.693098,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +34.693263,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +34.693428,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +34.693592,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +34.693757,0.126078,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +34.694147,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +34.694311,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +34.694476,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +34.694640,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +34.694805,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +34.694969,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +34.695133,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +34.695298,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +34.695462,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +34.695627,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +34.695791,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +34.695956,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +34.696120,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +34.696284,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +34.696448,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +34.696612,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +34.696776,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +34.696940,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +34.697105,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +34.697269,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +34.697433,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +34.697598,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +34.697762,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +34.697927,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +34.698091,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +34.698256,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +34.698420,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +34.698586,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +34.698751,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +34.698916,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +34.699082,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +34.699247,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +34.699412,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +34.699577,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +34.699742,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +34.699906,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +34.700070,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +34.700235,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +34.700399,0.025472,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +34.700887,0.102558,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +34.701003,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +34.701168,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +34.701333,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +34.701498,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +34.701663,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +34.701828,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +34.701993,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +34.702158,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +34.702322,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +34.702487,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +34.702651,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +34.702815,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +34.702980,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +34.703144,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +34.703310,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +34.703474,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +34.703638,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +34.703802,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +34.703967,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +34.704131,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +34.704295,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +34.704459,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +34.704623,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +34.704787,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +34.704952,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +34.705116,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +34.705281,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +34.705446,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +34.705610,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +34.705775,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +34.705939,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +34.706103,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +34.706268,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +34.706432,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +34.706596,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +34.706761,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +34.706925,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +34.707089,0.085791,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +34.707482,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +34.707510,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +34.707511,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +34.707680,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +34.707705,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +34.707706,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +34.722330,39.655209,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","167",,,"bs",1253 +34.723427,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +34.723453,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +34.723455,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +34.742388,39.884230,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","168",,,"bs",1259 +34.762023,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +34.762047,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +34.762048,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +34.762651,40.252544,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","169",,,"bs",1265 +34.782283,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +34.782305,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +34.782306,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +34.800793,39.914950,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","170",,,"bs",1271 +34.802921,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +34.802943,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +34.802944,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +34.821310,40.156449,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","171",,,"bs",1277 +34.840716,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +34.840737,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +34.840739,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +34.842138,40.324703,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","172",,,"bs",1283 +34.861475,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +34.861496,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +34.861497,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +34.879369,27.840187,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","173",,,"bs",1289 +34.882470,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +34.882491,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +34.882492,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +34.907218,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +34.907239,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +34.907240,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +36.292694,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +36.292919,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +36.293146,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +36.293370,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +36.293600,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +36.293822,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +36.294045,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +36.294268,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +36.294495,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +36.294719,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +36.294942,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +36.295163,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +36.295386,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +36.295615,0.162174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +36.295839,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +36.296061,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +36.296277,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +36.296498,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +36.296717,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +36.296931,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +36.297147,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +36.297364,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +36.297584,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +36.297801,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +36.298015,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +36.298232,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +36.298452,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +36.298669,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +36.298887,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +36.299105,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +36.299321,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +36.299542,0.172509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +36.299743,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +36.299919,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +36.300104,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +36.300278,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +36.300456,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +36.300630,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +36.300794,0.024992,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +36.300967,39.579467,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","174",,,"bs",1317 +36.301478,0.101886,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +36.301698,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +36.301923,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +36.302145,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +36.302365,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +36.302591,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +36.302811,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +36.303033,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +36.303261,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +36.303492,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +36.303713,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +36.303933,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +36.304154,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +36.304374,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +36.304618,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +36.304804,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +36.304989,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +36.305172,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +36.305355,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +36.305536,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +36.305714,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +36.305893,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +36.306073,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +36.306250,0.180509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +36.306448,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +36.306650,0.193757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +36.306858,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +36.307069,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +36.307271,0.191293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +36.307482,0.193245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +36.307692,0.186685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +36.307899,0.193181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +36.308107,0.193117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +36.308313,0.187998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +36.308527,0.193917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +36.308731,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +36.308932,0.193597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +36.309135,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +36.309328,0.098623,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +36.309995,0.042463,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +36.310150,0.195229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +36.310347,0.199197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +36.310547,0.198749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +36.310747,0.199069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +36.310948,0.199357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +36.311148,0.191965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +36.311341,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +36.311538,0.194429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +36.311733,0.189309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +36.311924,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +36.312118,0.195741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +36.312315,0.205757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +36.312522,0.202077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +36.312725,0.199965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +36.312926,0.195517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +36.313123,0.203133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +36.313327,0.170301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +36.313499,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +36.313665,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +36.313830,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +36.313995,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +36.314159,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +36.314325,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +36.314489,0.171998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +36.314662,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +36.314827,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +36.314991,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +36.315156,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +36.315321,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +36.315486,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +36.315650,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +36.315814,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +36.315979,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +36.316143,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +36.316308,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +36.316472,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +36.316637,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +36.316801,0.146366,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +36.317463,0.168350,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +36.317633,0.202717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +36.317837,0.191517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +36.318029,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +36.318218,0.195069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +36.318414,0.196925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +36.318612,0.193821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +36.318807,0.189693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +36.318998,0.197949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +36.319198,0.197949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +36.319397,0.193213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +36.319592,0.173565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +36.319766,0.182174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +36.319950,0.194621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +36.320146,0.194685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +36.320342,0.195613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +36.320538,0.197085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +36.320689,39.707112,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","175",,,"bs",1323 +36.320737,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +36.320928,0.190781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +36.321120,0.195005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +36.321316,0.187741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +36.321505,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +36.321698,0.190781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +36.321890,0.193053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +36.322085,0.194718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +36.322281,0.180766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +36.322463,0.179037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +36.322643,0.178909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +36.322823,0.180286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +36.323005,0.188125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +36.323194,0.187645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +36.323383,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +36.323565,0.176253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +36.323742,0.179294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +36.323923,0.180189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +36.324104,0.177789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +36.324283,0.181694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +36.324466,0.176606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +36.324644,0.048703,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +36.325210,0.098271,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +36.325339,0.188637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +36.325530,0.188510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +36.325719,0.193213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +36.325914,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +36.326103,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +36.326286,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +36.326473,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +36.326660,0.187966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +36.326849,0.174397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +36.327025,0.177309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +36.327203,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +36.327389,0.182142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +36.327572,0.180061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +36.327754,0.177085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +36.327932,0.188285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +36.328122,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +36.328309,0.177406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +36.328488,0.176125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +36.328665,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +36.328847,0.179454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +36.329027,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +36.329209,0.178013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +36.329389,0.177949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +36.329568,0.178046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +36.329747,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +36.329928,0.189309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +36.330118,0.190237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +36.330310,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +36.330501,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +36.330692,0.178334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +36.330872,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +36.331056,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +36.331235,0.180766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +36.331417,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +36.331604,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +36.331790,0.185021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +36.331976,0.171485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +36.332148,0.117375,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +36.332778,0.022912,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +36.332899,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +36.333083,0.177310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +36.333261,0.176381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +36.333439,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +36.333621,0.178718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +36.333801,0.177181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +36.333979,0.177021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +36.334157,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +36.334339,0.180318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +36.334521,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +36.334701,0.175581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +36.334878,0.182334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +36.335062,0.179262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +36.335242,0.179069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +36.335423,0.189053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +36.335613,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +36.335794,0.178430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +36.335974,0.168733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +36.336144,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +36.336309,0.176093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +36.336486,0.176285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +36.336663,0.178590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +36.336843,0.177181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +36.337022,0.173053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +36.337196,0.179230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +36.337376,0.179261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +36.337557,0.177181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +36.337735,0.173373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +36.337910,0.172382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +36.338083,0.175293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +36.338260,0.171582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +36.338433,0.177053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +36.338611,0.173117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +36.338785,0.174590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +36.338961,0.175581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +36.339138,0.178429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +36.339317,0.175902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +36.339494,0.175709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +36.339671,0.005408,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +36.340310,0.141342,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +36.340453,0.187965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +36.340569,39.979269,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","176",,,"bs",1329 +36.340642,0.189085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +36.340833,0.192509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +36.341027,0.187582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +36.341216,0.196221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +36.341413,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +36.341602,0.193405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +36.341797,0.174045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +36.341972,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +36.342137,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +36.342301,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +36.342466,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +36.342630,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +36.342794,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +36.342958,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +36.343123,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +36.343287,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +36.343451,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +36.343615,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +36.343779,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +36.343943,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +36.344108,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +36.344272,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +36.344436,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +36.344600,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +36.344765,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +36.344929,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +36.345093,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +36.345258,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +36.345422,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +36.345586,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +36.345750,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +36.345914,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +36.346079,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +36.346243,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +36.346407,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +36.346571,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +36.346735,0.065439,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +36.347065,0.061919,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +36.347160,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +36.347324,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +36.347488,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +36.347653,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +36.347817,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +36.347981,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +36.348145,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +36.348310,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +36.348474,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +36.348638,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +36.348802,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +36.348966,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +36.349130,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +36.349294,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +36.349459,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +36.349623,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +36.349787,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +36.349951,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +36.350116,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +36.350280,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +36.350444,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +36.350608,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +36.350772,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +36.350937,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +36.351101,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +36.351265,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +36.351430,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +36.351593,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +36.351757,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +36.351922,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +36.352086,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +36.352250,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +36.352414,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +36.352579,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +36.352743,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +36.352908,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +36.353071,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +36.353236,0.126142,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +36.353853,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +36.354017,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +36.354181,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +36.354345,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +36.354509,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +36.354673,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +36.354838,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +36.355002,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +36.355167,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +36.355331,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +36.355495,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +36.355659,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +36.355823,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +36.355988,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +36.356153,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +36.356317,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +36.356481,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +36.356645,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +36.356810,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +36.356975,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +36.357139,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +36.357303,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +36.357467,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +36.357632,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +36.357796,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +36.357960,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +36.358125,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +36.358289,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +36.358454,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +36.358620,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +36.358784,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +36.358949,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +36.359115,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +36.359279,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +36.359444,0.165086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +36.359611,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +36.359778,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +36.359943,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +36.360108,0.025216,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +36.360631,0.102847,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +36.360747,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +36.360912,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +36.361077,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +36.361242,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +36.361407,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +36.361573,0.165598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +36.361739,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +36.361905,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +36.362069,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +36.362234,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +36.362398,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +36.362562,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +36.362727,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +36.362891,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +36.363055,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +36.363220,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +36.363384,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +36.363549,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +36.363712,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +36.363876,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +36.364041,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +36.364205,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +36.364369,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +36.364533,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +36.364698,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +36.364862,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +36.365026,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +36.365191,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +36.365355,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +36.365519,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +36.365684,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +36.365848,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +36.366012,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +36.366177,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +36.366341,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +36.366506,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +36.366669,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +36.366833,0.085854,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +36.367283,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +36.367312,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +36.367313,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +36.367512,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +36.367536,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +36.367537,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +36.379583,39.597642,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","177",,,"bs",1335 +36.380582,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +36.380605,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +36.380606,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +36.399518,40.043107,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","178",,,"bs",1341 +36.419204,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +36.419227,0.001183,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +36.419229,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +36.419989,40.034147,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","179",,,"bs",1347 +36.439578,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +36.439600,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +36.439601,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +36.458119,39.897958,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","180",,,"bs",1353 +36.460086,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +36.460115,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +36.460116,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +36.478465,40.264128,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","181",,,"bs",1359 +36.498033,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +36.498056,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +36.498057,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +36.499074,40.499868,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","182",,,"bs",1365 +36.518736,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +36.518757,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +36.518758,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +36.536654,31.056779,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","183",,,"bs",1371 +36.539596,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +36.539618,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +36.539619,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +36.567739,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +36.567761,0.001183,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +36.567763,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +37.941840,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +37.942004,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +37.942168,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +37.942332,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +37.942495,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +37.942659,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +37.942823,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +37.942987,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +37.943151,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +37.943314,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +37.943478,0.162205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +37.943642,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +37.943805,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +37.943969,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +37.944133,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +37.944297,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +37.944460,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +37.944625,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +37.944789,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +37.944954,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +37.945117,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +37.945281,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +37.945446,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +37.945610,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +37.945775,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +37.945939,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +37.946103,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +37.946267,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +37.946431,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +37.946595,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +37.946759,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +37.946922,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +37.947086,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +37.947251,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +37.947415,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +37.947578,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +37.947743,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +37.947906,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +37.948070,0.024991,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +37.948249,39.581930,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","184",,,"bs",1399 +37.948594,0.103358,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +37.948726,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +37.948892,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +37.949056,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +37.949220,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +37.949386,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +37.949550,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +37.949714,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +37.949879,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +37.950043,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +37.950208,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +37.950372,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +37.950537,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +37.950702,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +37.950867,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +37.951031,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +37.951195,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +37.951359,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +37.951524,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +37.951688,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +37.951853,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +37.952017,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +37.952182,0.182910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +37.952366,0.186877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +37.952554,0.192189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +37.952747,0.191677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +37.952940,0.193053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +37.953135,0.198493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +37.953334,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +37.953521,0.193565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +37.953716,0.195933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +37.953913,0.204317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +37.954119,0.207101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +37.954327,0.202525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +37.954531,0.207677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +37.954740,0.198941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +37.954940,0.187869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +37.955129,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +37.955294,0.086175,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +37.955964,0.054688,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +37.956120,0.213789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +37.956335,0.204189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +37.956541,0.214844,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +37.956757,0.200061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +37.956958,0.202813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +37.957162,0.193789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +37.957357,0.207805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +37.957566,0.212317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +37.957780,0.212669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +37.957994,0.225692,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +37.958221,0.212957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +37.958435,0.208445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +37.958645,0.197725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +37.958844,0.165245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +37.959010,0.170110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +37.959181,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +37.959346,0.168574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +37.959515,0.171805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +37.959688,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +37.959852,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +37.960016,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +37.960183,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +37.960347,0.165150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +37.960514,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +37.960679,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +37.960843,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +37.961007,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +37.961172,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +37.961336,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +37.961501,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +37.961665,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +37.961830,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +37.961994,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +37.962158,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +37.962323,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +37.962487,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +37.962675,0.204541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +37.962882,0.173085,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +37.963783,0.170558,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +37.963955,0.189693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +37.964146,0.191837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +37.964339,0.190813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +37.964531,0.201661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +37.964734,0.166237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +37.964901,0.172446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +37.965075,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +37.965266,0.192733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +37.965460,0.194813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +37.965656,0.195677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +37.965853,0.187101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +37.966041,0.185565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +37.966228,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +37.966420,0.186046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +37.966607,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +37.966797,0.194877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +37.966993,0.197693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +37.967192,0.184797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +37.967378,0.173117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +37.967552,0.178046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +37.967731,0.173245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +37.967906,0.177629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +37.967974,39.750344,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","185",,,"bs",1405 +37.968085,0.176926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +37.968263,0.174269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +37.968438,0.175773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +37.968615,0.179518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +37.968796,0.175581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +37.968973,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +37.969146,0.174334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +37.969322,0.175805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +37.969499,0.170909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +37.969671,0.175934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +37.969848,0.172157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +37.970021,0.174109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +37.970197,0.175006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +37.970373,0.176157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +37.970550,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +37.970736,0.049248,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +37.971166,0.088830,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +37.971291,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +37.971465,0.174174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +37.971640,0.177085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +37.971818,0.177565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +37.971997,0.175358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +37.972174,0.174685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +37.972349,0.172893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +37.972523,0.177054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +37.972702,0.174685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +37.972878,0.174077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +37.973053,0.177886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +37.973232,0.177661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +37.973411,0.177277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +37.973589,0.173822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +37.973764,0.177917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +37.973943,0.173853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +37.974118,0.178046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +37.974298,0.175005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +37.974474,0.173917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +37.974649,0.176990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +37.974827,0.175005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +37.975003,0.173181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +37.975178,0.174686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +37.975353,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +37.975533,0.174813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +37.975709,0.178494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +37.975888,0.171422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +37.976061,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +37.976233,0.173534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +37.976408,0.173309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +37.976582,0.172989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +37.976756,0.170238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +37.976928,0.173277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +37.977102,0.172414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +37.977276,0.171485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +37.977449,0.172637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +37.977622,0.171166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +37.977795,0.112542,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +37.978202,0.021503,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +37.978325,0.171421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +37.978497,0.172893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +37.978671,0.176766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +37.978849,0.177533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +37.979028,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +37.979211,0.179646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +37.979392,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +37.979567,0.172861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +37.979741,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +37.979905,0.168221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +37.980075,0.170430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +37.980246,0.171197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +37.980419,0.186493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +37.980606,0.187037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +37.980795,0.192125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +37.980988,0.182046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +37.981171,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +37.981354,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +37.981536,0.179134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +37.981716,0.179134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +37.981896,0.176189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +37.982073,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +37.982258,0.173022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +37.982432,0.169725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +37.982603,0.170942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +37.982775,0.176126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +37.982952,0.172573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +37.983126,0.174206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +37.983302,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +37.983477,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +37.983660,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +37.983848,0.188573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +37.984038,0.187230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +37.984227,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +37.984415,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +37.984601,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +37.984785,0.188637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +37.984975,0.189117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +37.985166,0.005344,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +37.985642,0.122558,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +37.985766,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +37.985931,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +37.986095,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +37.986259,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +37.986423,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +37.986587,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +37.986752,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +37.986916,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +37.987080,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +37.987244,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +37.987408,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +37.987573,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +37.987737,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +37.987843,40.001604,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","186",,,"bs",1411 +37.987901,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +37.988065,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +37.988230,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +37.988393,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +37.988558,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +37.988722,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +37.988887,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +37.989050,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +37.989214,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +37.989378,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +37.989543,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +37.989708,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +37.989872,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +37.990036,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +37.990201,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +37.990365,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +37.990529,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +37.990694,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +37.990858,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +37.991022,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +37.991187,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +37.991351,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +37.991516,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +37.991680,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +37.991844,0.065375,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +37.992138,0.061791,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +37.992234,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +37.992398,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +37.992562,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +37.992726,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +37.992890,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +37.993055,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +37.993219,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +37.993383,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +37.993547,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +37.993712,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +37.993877,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +37.994041,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +37.994206,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +37.994370,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +37.994534,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +37.994699,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +37.994863,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +37.995028,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +37.995193,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +37.995357,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +37.995521,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +37.995685,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +37.995849,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +37.996013,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +37.996178,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +37.996343,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +37.996507,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +37.996672,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +37.996836,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +37.997000,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +37.997165,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +37.997330,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +37.997494,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +37.997659,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +37.997823,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +37.997988,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +37.998152,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +37.998316,0.126718,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +37.998720,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +37.998884,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +37.999048,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +37.999212,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +37.999377,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +37.999541,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +37.999704,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +37.999869,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +38.000033,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +38.000198,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +38.000362,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +38.000526,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +38.000690,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +38.000855,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +38.001019,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +38.001183,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +38.001347,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +38.001511,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +38.001676,0.167550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +38.001845,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +38.002011,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +38.002176,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +38.002342,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +38.002507,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +38.002671,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +38.002836,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +38.003002,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +38.003168,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +38.003334,0.166078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +38.003501,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +38.003667,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +38.003832,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +38.003998,0.171389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +38.004170,0.169054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +38.004341,0.165309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +38.004507,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +38.004673,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +38.004839,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +38.005004,0.025087,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +38.005583,0.102367,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +38.005708,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +38.005872,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +38.006037,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +38.006201,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +38.006366,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +38.006530,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +38.006694,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +38.006858,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +38.007022,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +38.007186,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +38.007350,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +38.007514,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +38.007678,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +38.007843,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +38.008007,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +38.008171,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +38.008336,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +38.008500,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +38.008664,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +38.008828,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +38.008992,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +38.009156,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +38.009320,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +38.009485,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +38.009649,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +38.009814,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +38.009978,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +38.010142,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +38.010306,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +38.010471,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +38.010635,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +38.010800,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +38.010964,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +38.011129,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +38.011293,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +38.011457,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +38.011622,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +38.011786,0.086143,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +38.012145,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +38.012173,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +38.012174,0.005119,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +38.012348,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +38.012373,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +38.012374,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +38.026898,39.640778,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","187",,,"bs",1417 +38.027882,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +38.027907,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +38.027908,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +38.046788,40.178465,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","188",,,"bs",1423 +38.066567,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +38.066591,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +38.066593,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +38.067278,40.152898,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","189",,,"bs",1429 +38.087022,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +38.087050,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +38.087051,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +38.105357,40.038180,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","190",,,"bs",1435 +38.107451,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +38.107475,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +38.107476,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +38.125709,40.342111,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","191",,,"bs",1441 +38.145415,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +38.145438,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +38.145439,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +38.146502,40.484445,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","192",,,"bs",1447 +38.166068,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +38.166090,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +38.166091,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +38.183908,27.815164,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","193",,,"bs",1453 +38.186997,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +38.187019,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +38.187020,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +38.211742,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +38.211765,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +38.211766,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +39.546524,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +39.546749,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +39.546972,0.162205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +39.547194,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +39.547421,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +39.547643,0.162109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +39.547864,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +39.548086,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +39.548306,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +39.548533,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +39.548756,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +39.548979,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +39.549212,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +39.549438,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +39.549660,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +39.549878,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +39.550093,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +39.550309,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +39.550529,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +39.550744,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +39.550959,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +39.551174,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +39.551388,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +39.551608,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +39.551822,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +39.552039,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +39.552254,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +39.552473,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +39.552689,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +39.552903,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +39.553117,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +39.553333,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +39.553552,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +39.553767,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +39.554008,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +39.554224,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +39.554446,0.172957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +39.554664,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +39.554829,0.025312,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +39.555211,39.613837,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","194",,,"bs",1481 +39.555667,0.102207,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +39.555844,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +39.556028,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +39.556208,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +39.556386,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +39.556569,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +39.556749,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +39.556927,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +39.557107,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +39.557287,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +39.557477,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +39.557654,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +39.557841,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +39.558034,0.167357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +39.558213,0.189085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +39.558404,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +39.558592,0.192957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +39.558787,0.189885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +39.558978,0.190077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +39.559169,0.185918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +39.559356,0.187965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +39.559545,0.198877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +39.559745,0.204381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +39.559951,0.212476,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +39.560165,0.209885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +39.560376,0.210461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +39.560588,0.208861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +39.560798,0.204637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +39.561004,0.210365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +39.561216,0.201117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +39.561418,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +39.561585,0.172701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +39.561759,0.169278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +39.561929,0.192317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +39.562123,0.199293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +39.562323,0.200157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +39.562525,0.198397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +39.562724,0.209021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +39.562934,0.099902,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +39.563606,0.056960,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +39.563723,0.207805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +39.563932,0.218684,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +39.564153,0.213245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +39.564367,0.182333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +39.564550,0.165630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +39.564717,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +39.564882,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +39.565046,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +39.565212,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +39.565376,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +39.565542,0.172254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +39.565716,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +39.565881,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +39.566045,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +39.566210,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +39.566374,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +39.566539,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +39.566702,0.180093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +39.566884,0.201277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +39.567087,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +39.567276,0.199357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +39.567477,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +39.567668,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +39.567855,0.198333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +39.568054,0.191133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +39.568246,0.192861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +39.568441,0.198909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +39.568641,0.189918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +39.568832,0.180253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +39.569013,0.170749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +39.569185,0.194621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +39.569381,0.196861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +39.569579,0.197405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +39.569778,0.198141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +39.569977,0.199773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +39.570178,0.196317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +39.570376,0.193981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +39.570571,0.175550,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +39.571162,0.159102,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +39.571322,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +39.571505,0.188957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +39.571695,0.184286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +39.571880,0.181757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +39.572063,0.180125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +39.572244,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +39.572430,0.183005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +39.572615,0.178654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +39.572795,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +39.572976,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +39.573163,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +39.573346,0.177246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +39.573524,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +39.573707,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +39.573889,0.182621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +39.574073,0.184030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +39.574258,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +39.574443,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +39.574624,0.178237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +39.574803,0.177534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +39.574939,39.803593,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","195",,,"bs",1487 +39.574982,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +39.575163,0.172765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +39.575337,0.173950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +39.575512,0.173949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +39.575687,0.174685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +39.575863,0.176798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +39.576041,0.174237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +39.576216,0.173693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +39.576391,0.174238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +39.576567,0.175517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +39.576743,0.173821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +39.576918,0.175838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +39.577095,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +39.577276,0.175741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +39.577453,0.173534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +39.577628,0.175997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +39.577805,0.176477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +39.577983,0.047744,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +39.578597,0.099231,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +39.578707,0.195869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +39.578904,0.196765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +39.579102,0.192286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +39.579296,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +39.579487,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +39.579674,0.183901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +39.579859,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +39.580044,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +39.580230,0.187006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +39.580418,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +39.580607,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +39.580789,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +39.580973,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +39.581156,0.192062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +39.581349,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +39.581533,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +39.581716,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +39.581901,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +39.582088,0.186686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +39.582276,0.179165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +39.582456,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +39.582640,0.179645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +39.582821,0.182142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +39.583004,0.175581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +39.583181,0.170813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +39.583353,0.170238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +39.583524,0.172125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +39.583698,0.167902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +39.583867,0.174077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +39.584042,0.174237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +39.584218,0.177118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +39.584396,0.174269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +39.584572,0.173661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +39.584746,0.172958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +39.584921,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +39.585094,0.173565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +39.585269,0.171134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +39.585442,0.108798,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +39.585892,0.023008,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +39.585989,0.176702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +39.586167,0.178653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +39.586347,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +39.586533,0.180990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +39.586715,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +39.586904,0.180829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +39.587086,0.190429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +39.587278,0.197629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +39.587476,0.204285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +39.587682,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +39.587876,0.194237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +39.588072,0.191613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +39.588265,0.193821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +39.588460,0.194941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +39.588656,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +39.588847,0.199709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +39.589048,0.188125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +39.589237,0.189470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +39.589428,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +39.589592,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +39.589756,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +39.589921,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +39.590085,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +39.590250,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +39.590414,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +39.590578,0.171742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +39.590751,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +39.590915,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +39.591079,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +39.591244,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +39.591408,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +39.591572,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +39.591737,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +39.591901,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +39.592065,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +39.592229,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +39.592394,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +39.592558,0.171422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +39.592731,0.004800,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +39.593005,0.122558,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +39.593129,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +39.593293,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +39.593457,0.172221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +39.593631,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +39.593795,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +39.593959,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +39.594123,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +39.594288,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +39.594452,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +39.594616,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +39.594780,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +39.594833,39.979910,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","196",,,"bs",1493 +39.594944,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +39.595108,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +39.595272,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +39.595436,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +39.595601,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +39.595765,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +39.595929,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +39.596093,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +39.596257,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +39.596421,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +39.596586,0.171710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +39.596759,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +39.596923,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +39.597087,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +39.597252,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +39.597416,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +39.597581,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +39.597745,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +39.597909,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +39.598073,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +39.598238,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +39.598402,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +39.598567,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +39.598731,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +39.598896,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +39.599060,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +39.599224,0.065215,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +39.599502,0.061887,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +39.599595,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +39.599759,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +39.599924,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +39.600088,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +39.600253,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +39.600417,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +39.600581,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +39.600746,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +39.600910,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +39.601074,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +39.601239,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +39.601403,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +39.601567,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +39.601732,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +39.601896,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +39.602060,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +39.602224,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +39.602389,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +39.602553,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +39.602717,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +39.602881,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +39.603046,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +39.603210,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +39.603374,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +39.603539,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +39.603704,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +39.603868,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +39.604032,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +39.604197,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +39.604361,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +39.604525,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +39.604689,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +39.604853,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +39.605018,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +39.605183,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +39.605347,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +39.605511,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +39.605677,0.128190,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +39.606069,0.166206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +39.606237,0.165597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +39.606404,0.166366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +39.606571,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +39.606737,0.165726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +39.606904,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +39.607073,0.166718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +39.607241,0.166429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +39.607408,0.165630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +39.607575,0.165917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +39.607742,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +39.607909,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +39.608075,0.165341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +39.608242,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +39.608408,0.165853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +39.608575,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +39.608739,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +39.608903,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +39.609068,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +39.609233,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +39.609397,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +39.609561,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +39.609725,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +39.609889,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +39.610053,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +39.610218,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +39.610382,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +39.610546,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +39.610710,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +39.610874,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +39.611039,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +39.611203,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +39.611367,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +39.611532,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +39.611696,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +39.611860,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +39.612024,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +39.612189,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +39.612353,0.025120,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +39.612745,0.102591,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +39.612848,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +39.613013,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +39.613178,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +39.613342,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +39.613506,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +39.613671,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +39.613836,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +39.614001,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +39.614166,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +39.614330,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +39.614495,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +39.614660,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +39.614824,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +39.614988,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +39.615152,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +39.615317,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +39.615481,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +39.615645,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +39.615810,0.166398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +39.615977,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +39.616142,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +39.616306,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +39.616470,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +39.616635,0.165565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +39.616801,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +39.616966,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +39.617130,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +39.617295,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +39.617459,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +39.617624,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +39.617789,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +39.617953,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +39.618118,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +39.618282,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +39.618446,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +39.618611,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +39.618775,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +39.618940,0.085823,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +39.619262,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +39.619288,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +39.619290,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +39.619405,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +39.619428,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +39.619429,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +39.633841,39.698987,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","197",,,"bs",1499 +39.634825,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +39.634847,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +39.634848,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +39.653802,40.093157,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","198",,,"bs",1505 +39.673562,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +39.673584,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +39.673586,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +39.674081,40.219907,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","199",,,"bs",1511 +39.693906,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +39.693928,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +39.693929,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +39.712338,39.994535,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","200",,,"bs",1517 +39.714309,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +39.714330,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +39.714332,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +39.732688,40.475200,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","201",,,"bs",1523 +39.752346,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +39.752368,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +39.752369,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +39.753439,40.362273,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","202",,,"bs",1529 +39.773176,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +39.773197,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +39.773199,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +39.790910,27.766110,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","203",,,"bs",1535 +39.793811,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +39.793833,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +39.793834,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +39.818685,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +39.818706,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +39.818707,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +41.148351,0.165885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +41.148518,0.165950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +41.148685,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +41.148850,0.166014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +41.149017,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +41.149181,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +41.149346,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +41.149511,0.172446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +41.149684,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +41.149849,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +41.150014,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +41.150181,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +41.150385,0.199421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +41.150585,0.213693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +41.150800,0.205661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +41.151007,0.211357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +41.151220,0.204861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +41.151426,0.208444,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +41.151636,0.206045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +41.151843,0.207229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +41.152052,0.210941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +41.152264,0.210877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +41.152476,0.209565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +41.152687,0.212220,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +41.152900,0.203101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +41.153105,0.203293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +41.153309,0.167646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +41.153478,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +41.153643,0.165246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +41.153809,0.194301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +41.154005,0.191613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +41.154198,0.197821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +41.154398,0.198109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +41.154597,0.207549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +41.154806,0.197373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +41.155004,0.189469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +41.155195,0.196029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +41.155392,0.195901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +41.155590,0.030559,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +41.155927,39.562637,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","204",,,"bs",1563 +41.156437,0.108063,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +41.156560,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +41.156724,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +41.156888,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +41.157054,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +41.157218,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +41.157383,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +41.157547,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +41.157711,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +41.157875,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +41.158039,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +41.158203,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +41.158368,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +41.158533,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +41.158698,0.198013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +41.158898,0.203453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +41.159102,0.199965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +41.159303,0.202173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +41.159507,0.194205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +41.159702,0.191613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +41.159895,0.205757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +41.160102,0.196093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +41.160300,0.194493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +41.160495,0.195133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +41.160692,0.196029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +41.160889,0.193405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +41.161084,0.166014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +41.161251,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +41.161436,0.197693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +41.161635,0.196797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +41.161833,0.201373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +41.162036,0.191261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +41.162229,0.195901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +41.162426,0.208381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +41.162635,0.193597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +41.162830,0.194877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +41.163026,0.195261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +41.163223,0.195805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +41.163420,0.093983,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +41.164040,0.049151,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +41.164160,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +41.164347,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +41.164535,0.186206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +41.164722,0.184637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +41.164908,0.196061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +41.165105,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +41.165289,0.181725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +41.165472,0.186333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +41.165660,0.184542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +41.165845,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +41.166030,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +41.166218,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +41.166406,0.185853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +41.166593,0.190174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +41.166784,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +41.166973,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +41.167157,0.179645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +41.167338,0.180126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +41.167519,0.193309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +41.167714,0.184317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +41.167899,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +41.168081,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +41.168264,0.184990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +41.168450,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +41.168639,0.178173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +41.168818,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +41.169002,0.186429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +41.169189,0.181534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +41.169372,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +41.169553,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +41.169737,0.177981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +41.169916,0.184254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +41.170102,0.178205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +41.170281,0.179965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +41.170462,0.186365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +41.170650,0.186718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +41.170838,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +41.171025,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +41.171525,0.169406,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +41.171696,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +41.171881,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +41.172065,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +41.172251,0.182590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +41.172434,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +41.172619,0.188253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +41.172809,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +41.172994,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +41.173178,0.185310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +41.173364,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +41.173550,0.190237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +41.173742,0.179069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +41.173922,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +41.174107,0.184670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +41.174293,0.184957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +41.174479,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +41.174669,0.184797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +41.174855,0.170238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +41.175027,0.171037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +41.175199,0.178461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +41.175379,0.178174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +41.175558,0.176541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +41.175647,39.659692,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","205",,,"bs",1569 +41.175736,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +41.175913,0.181150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +41.176095,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +41.176276,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +41.176456,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +41.176642,0.176158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +41.176819,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +41.176994,0.179261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +41.177175,0.174686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +41.177351,0.174589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +41.177527,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +41.177709,0.177086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +41.177888,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +41.178073,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +41.178265,0.191869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +41.178458,0.052479,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +41.178807,0.094494,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +41.178910,0.191645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +41.179103,0.195517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +41.179300,0.197277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +41.179498,0.200349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +41.179700,0.190877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +41.179892,0.183774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +41.180077,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +41.180241,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +41.180406,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +41.180570,0.171998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +41.180743,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +41.180907,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +41.181072,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +41.181236,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +41.181399,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +41.181563,0.171518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +41.181736,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +41.181900,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +41.182064,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +41.182229,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +41.182393,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +41.182557,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +41.182722,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +41.182886,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +41.183051,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +41.183215,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +41.183379,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +41.183543,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +41.183706,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +41.183870,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +41.184035,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +41.184199,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +41.184364,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +41.184528,0.171197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +41.184701,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +41.184865,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +41.185029,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +41.185193,0.105790,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +41.185518,0.021280,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +41.185615,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +41.185779,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +41.185943,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +41.186107,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +41.186271,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +41.186435,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +41.186599,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +41.186765,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +41.186929,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +41.187094,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +41.187258,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +41.187422,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +41.187586,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +41.187751,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +41.187915,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +41.188079,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +41.188244,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +41.188409,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +41.188572,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +41.188737,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +41.188901,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +41.189065,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +41.189229,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +41.189394,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +41.189558,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +41.189722,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +41.189887,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +41.190051,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +41.190215,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +41.190380,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +41.190544,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +41.190709,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +41.190873,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +41.191037,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +41.191202,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +41.191366,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +41.191531,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +41.191695,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +41.191859,0.004832,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +41.192104,0.122718,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +41.192228,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +41.192392,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +41.192556,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +41.192720,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +41.192885,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +41.193049,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +41.193213,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +41.193377,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +41.193541,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +41.193705,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +41.193870,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +41.194034,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +41.194199,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +41.194363,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +41.194527,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +41.194691,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +41.194856,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +41.195020,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +41.195184,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +41.195348,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +41.195512,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +41.195548,40.031366,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","206",,,"bs",1575 +41.195676,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +41.195841,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +41.196005,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +41.196170,0.166461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +41.196337,0.166398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +41.196505,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +41.196672,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +41.196837,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +41.197003,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +41.197168,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +41.197333,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +41.197499,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +41.197665,0.165374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +41.197831,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +41.197998,0.165374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +41.198164,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +41.198330,0.065791,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +41.198778,0.063103,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +41.198875,0.171325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +41.199047,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +41.199215,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +41.199380,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +41.199544,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +41.199708,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +41.199873,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +41.200037,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +41.200201,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +41.200366,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +41.200530,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +41.200694,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +41.200858,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +41.201022,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +41.201186,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +41.201350,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +41.201514,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +41.201678,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +41.201843,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +41.202007,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +41.202172,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +41.202336,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +41.202501,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +41.202665,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +41.202829,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +41.202994,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +41.203158,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +41.203323,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +41.203487,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +41.203651,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +41.203815,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +41.203980,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +41.204144,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +41.204309,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +41.204473,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +41.204637,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +41.204801,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +41.204965,0.126878,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +41.205486,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +41.205650,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +41.205814,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +41.205978,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +41.206142,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +41.206306,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +41.206470,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +41.206635,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +41.206799,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +41.206964,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +41.207128,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +41.207292,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +41.207457,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +41.207621,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +41.207785,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +41.207950,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +41.208116,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +41.208280,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +41.208444,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +41.208608,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +41.208773,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +41.208938,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +41.209102,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +41.209266,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +41.209431,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +41.209595,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +41.209760,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +41.209924,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +41.210088,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +41.210253,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +41.210417,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +41.210582,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +41.210746,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +41.210911,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +41.211075,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +41.211239,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +41.211404,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +41.211568,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +41.211733,0.025023,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +41.212037,0.102398,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +41.212140,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +41.212305,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +41.212469,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +41.212633,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +41.212797,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +41.212962,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +41.213126,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +41.213290,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +41.213454,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +41.213619,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +41.213783,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +41.213947,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +41.214111,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +41.214276,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +41.214440,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +41.214605,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +41.214769,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +41.214933,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +41.215098,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +41.215262,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +41.215427,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +41.215591,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +41.215755,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +41.215920,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +41.216085,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +41.216249,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +41.216413,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +41.216578,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +41.216742,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +41.216907,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +41.217071,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +41.217235,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +41.217400,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +41.217564,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +41.217728,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +41.217892,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +41.218057,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +41.218221,0.085631,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +41.218476,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +41.218504,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +41.218505,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +41.218638,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +41.218663,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +41.218664,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +41.234573,39.681515,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","207",,,"bs",1581 +41.235593,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +41.235618,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +41.235619,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +41.254530,40.005926,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","208",,,"bs",1587 +41.274315,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +41.274346,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +41.274347,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +41.274854,40.204260,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","209",,,"bs",1593 +41.294554,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +41.294579,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +41.294580,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +41.313084,39.844361,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","210",,,"bs",1599 +41.315073,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +41.315098,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +41.315099,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +41.333437,40.398113,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","211",,,"bs",1605 +41.352945,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +41.352970,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +41.352971,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +41.354187,40.439872,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","212",,,"bs",1611 +41.373849,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +41.373873,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +41.373874,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +41.391671,27.743071,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","213",,,"bs",1617 +41.394639,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +41.394663,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +41.394665,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +41.419422,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +41.419446,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +41.419447,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +42.751903,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +42.752066,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +42.752229,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +42.752393,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +42.752557,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +42.752721,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +42.752884,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +42.753048,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +42.753212,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +42.753376,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +42.753540,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +42.753712,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +42.753875,0.162205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +42.754039,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +42.754203,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +42.754366,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +42.754530,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +42.754694,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +42.754858,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +42.755023,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +42.755187,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +42.755351,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +42.755514,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +42.755678,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +42.755843,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +42.756007,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +42.756171,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +42.756335,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +42.756499,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +42.756663,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +42.756826,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +42.756991,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +42.757155,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +42.757319,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +42.757482,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +42.757647,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +42.757811,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +42.757975,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +42.758138,0.024863,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +42.758225,39.570541,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","214",,,"bs",1645 +42.758475,0.101982,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +42.758578,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +42.758743,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +42.758908,0.166686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +42.759076,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +42.759243,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +42.759407,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +42.759572,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +42.759736,0.164765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +42.759902,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +42.760067,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +42.760231,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +42.760395,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +42.760561,0.171454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +42.760734,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +42.760898,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +42.761062,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +42.761226,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +42.761390,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +42.761555,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +42.761720,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +42.761884,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +42.762048,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +42.762222,0.203485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +42.762427,0.205821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +42.762634,0.199965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +42.762835,0.202173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +42.763039,0.202973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +42.763243,0.197213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +42.763441,0.201885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +42.763644,0.202269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +42.763848,0.204285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +42.764053,0.210877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +42.764266,0.207772,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +42.764475,0.206973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +42.764683,0.195901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +42.764880,0.204285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +42.765085,0.179870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +42.765266,0.087070,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +42.765722,0.056191,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +42.765834,0.212957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +42.766048,0.212925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +42.766262,0.207900,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +42.766471,0.210333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +42.766683,0.203933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +42.766888,0.200989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +42.767090,0.206621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +42.767298,0.208829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +42.767508,0.214589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +42.767724,0.212060,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +42.767937,0.211421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +42.768150,0.214461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +42.768365,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +42.768545,0.167166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +42.768714,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +42.768878,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +42.769044,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +42.769208,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +42.769372,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +42.769537,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +42.769701,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +42.769866,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +42.770030,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +42.770194,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +42.770359,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +42.770524,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +42.770689,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +42.770874,0.195325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +42.771071,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +42.771266,0.195709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +42.771463,0.191869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +42.771656,0.202557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +42.771860,0.193246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +42.772054,0.190110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +42.772245,0.192189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +42.772439,0.191773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +42.772632,0.181789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +42.772815,0.161982,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +42.773336,0.178686,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +42.773516,0.209885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +42.773727,0.194205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +42.773923,0.197085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +42.774121,0.198685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +42.774321,0.198301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +42.774521,0.208861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +42.774731,0.202013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +42.774934,0.213469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +42.775149,0.188925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +42.775339,0.184957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +42.775525,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +42.775712,0.188766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +42.775903,0.186589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +42.776090,0.188573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +42.776280,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +42.776467,0.190109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +42.776659,0.187229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +42.776847,0.186142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +42.777035,0.185853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +42.777222,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +42.777404,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +42.777586,0.180286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +42.777768,0.178269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +42.777947,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +42.777952,39.764938,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","215",,,"bs",1651 +42.778135,0.182941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +42.778319,0.181534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +42.778501,0.182301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +42.778685,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +42.778867,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +42.779049,0.177694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +42.779228,0.178845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +42.779408,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +42.779591,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +42.779777,0.178398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +42.779957,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +42.780139,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +42.780321,0.177405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +42.780500,0.051872,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +42.780818,0.091262,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +42.780918,0.185405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +42.781105,0.186974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +42.781293,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +42.781477,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +42.781672,0.184125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +42.781857,0.179165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +42.782038,0.184574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +42.782224,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +42.782410,0.191901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +42.782603,0.191197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +42.782796,0.194429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +42.782991,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +42.783179,0.194557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +42.783374,0.196381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +42.783572,0.206557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +42.783780,0.191133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +42.783972,0.189981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +42.784163,0.186750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +42.784352,0.185565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +42.784538,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +42.784724,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +42.784907,0.191773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +42.785100,0.179358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +42.785280,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +42.785462,0.180477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +42.785644,0.184733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +42.785830,0.179614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +42.786011,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +42.786194,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +42.786378,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +42.786561,0.190013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +42.786752,0.179838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +42.786933,0.169309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +42.787104,0.170270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +42.787275,0.176509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +42.787453,0.175549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +42.787630,0.175230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +42.787806,0.114270,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +42.788176,0.024160,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +42.788273,0.182781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +42.788457,0.189117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +42.788647,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +42.788830,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +42.789014,0.182910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +42.789198,0.178973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +42.789378,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +42.789558,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +42.789742,0.181502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +42.789925,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +42.790112,0.195581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +42.790309,0.193597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +42.790504,0.197149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +42.790702,0.197181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +42.790900,0.189277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +42.791091,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +42.791285,0.206493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +42.791492,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +42.791684,0.194941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +42.791880,0.197277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +42.792079,0.184062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +42.792264,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +42.792429,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +42.792593,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +42.792757,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +42.792921,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +42.793086,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +42.793250,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +42.793414,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +42.793579,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +42.793752,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +42.793916,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +42.794081,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +42.794246,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +42.794410,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +42.794574,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +42.794739,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +42.794904,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +42.795068,0.004832,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +42.795303,0.122430,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +42.795426,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +42.795591,0.171773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +42.795764,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +42.795928,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +42.796092,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +42.796257,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +42.796421,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +42.796585,0.171709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +42.796758,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +42.796922,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +42.797086,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +42.797250,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +42.797415,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +42.797579,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +42.797743,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +42.797852,39.976646,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","216",,,"bs",1657 +42.797907,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +42.798072,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +42.798236,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +42.798400,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +42.798564,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +42.798728,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +42.798892,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +42.799057,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +42.799221,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +42.799386,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +42.799550,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +42.799715,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +42.799880,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +42.800044,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +42.800208,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +42.800372,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +42.800537,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +42.800701,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +42.800866,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +42.801030,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +42.801195,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +42.801359,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +42.801523,0.065663,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +42.801763,0.061439,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +42.801856,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +42.802020,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +42.802185,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +42.802349,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +42.802513,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +42.802677,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +42.802842,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +42.803006,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +42.803170,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +42.803334,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +42.803499,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +42.803663,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +42.803827,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +42.803991,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +42.804155,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +42.804320,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +42.804484,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +42.804648,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +42.804813,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +42.804977,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +42.805141,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +42.805305,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +42.805470,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +42.805635,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +42.805799,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +42.805963,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +42.806127,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +42.806291,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +42.806456,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +42.806621,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +42.806785,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +42.806950,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +42.807114,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +42.807278,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +42.807442,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +42.807607,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +42.807771,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +42.807936,0.126174,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +42.808289,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +42.808454,0.168734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +42.808624,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +42.808792,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +42.808960,0.166718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +42.809128,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +42.809294,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +42.809460,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +42.809626,0.165374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +42.809793,0.167101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +42.809961,0.166910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +42.810129,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +42.810295,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +42.810462,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +42.810630,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +42.810795,0.165565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +42.810962,0.165150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +42.811129,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +42.811294,0.164958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +42.811461,0.165949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +42.811628,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +42.811791,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +42.811956,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +42.812120,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +42.812284,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +42.812448,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +42.812612,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +42.812776,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +42.812940,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +42.813105,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +42.813269,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +42.813433,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +42.813598,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +42.813762,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +42.813926,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +42.814090,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +42.814255,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +42.814419,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +42.814584,0.024991,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +42.814940,0.102238,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +42.815043,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +42.815208,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +42.815372,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +42.815536,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +42.815700,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +42.815864,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +42.816028,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +42.816192,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +42.816356,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +42.816520,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +42.816685,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +42.816849,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +42.817014,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +42.817178,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +42.817342,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +42.817506,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +42.817671,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +42.817835,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +42.817999,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +42.818164,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +42.818328,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +42.818492,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +42.818656,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +42.818820,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +42.818984,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +42.819148,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +42.819313,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +42.819477,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +42.819642,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +42.819807,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +42.819972,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +42.820136,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +42.820300,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +42.820464,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +42.820629,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +42.820793,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +42.820958,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +42.821122,0.086046,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +42.821357,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +42.821385,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +42.821387,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +42.821499,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +42.821524,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +42.821525,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +42.836867,39.658699,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","217",,,"bs",1663 +42.837855,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +42.837881,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +42.837882,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +42.856817,40.009382,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","218",,,"bs",1669 +42.876546,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +42.876571,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +42.876572,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +42.877179,40.186692,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","219",,,"bs",1675 +42.896843,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +42.896868,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +42.896869,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +42.915421,39.917032,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","220",,,"bs",1681 +42.917374,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +42.917399,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +42.917400,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +42.935720,40.405856,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","221",,,"bs",1687 +42.955351,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +42.955376,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +42.955377,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +42.956613,40.176196,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","222",,,"bs",1693 +42.976133,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +42.976157,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +42.976158,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +42.993954,27.768863,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","223",,,"bs",1699 +42.996802,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +42.996827,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +42.996828,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +43.021731,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +43.021755,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +43.021756,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +44.355878,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +44.356042,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +44.356206,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +44.356369,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +44.356533,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +44.356697,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +44.356860,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +44.357024,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +44.357188,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +44.357351,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +44.357515,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +44.357680,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +44.357843,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +44.358007,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +44.358171,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +44.358335,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +44.358499,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +44.358663,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +44.358827,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +44.358991,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +44.359155,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +44.359319,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +44.359484,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +44.359647,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +44.359812,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +44.359976,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +44.360140,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +44.360303,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +44.360468,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +44.360632,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +44.360796,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +44.360960,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +44.361124,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +44.361288,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +44.361453,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +44.361616,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +44.361781,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +44.361945,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +44.362109,0.025024,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +44.362193,39.600716,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","224",,,"bs",1727 +44.362444,0.102079,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +44.362547,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +44.362711,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +44.362875,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +44.363039,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +44.363204,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +44.363370,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +44.363538,0.167101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +44.363706,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +44.363871,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +44.364036,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +44.364200,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +44.364364,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +44.364529,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +44.364695,0.164958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +44.364861,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +44.365025,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +44.365189,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +44.365353,0.164990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +44.365519,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +44.365683,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +44.365846,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +44.366010,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +44.366175,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +44.366339,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +44.366503,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +44.366668,0.176893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +44.366846,0.199069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +44.367047,0.209053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +44.367257,0.210333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +44.367469,0.212732,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +44.367683,0.208477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +44.367893,0.198333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +44.368092,0.198557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +44.368292,0.202045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +44.368495,0.205149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +44.368702,0.203293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +44.368906,0.205213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +44.369113,0.103390,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +44.369691,0.045472,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +44.369796,0.171453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +44.369968,0.193021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +44.370163,0.215933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +44.370380,0.214493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +44.370596,0.214556,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +44.370812,0.216605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +44.371030,0.216477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +44.371248,0.217341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +44.371467,0.210717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +44.371679,0.199037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +44.371879,0.212029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +44.372092,0.220125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +44.372314,0.218716,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +44.372534,0.218845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +44.372754,0.222749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +44.372978,0.211709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +44.373191,0.197117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +44.373389,0.169949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +44.373560,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +44.373725,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +44.373890,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +44.374055,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +44.374219,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +44.374383,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +44.374547,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +44.374712,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +44.374876,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +44.375040,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +44.375205,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +44.375369,0.168477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +44.375539,0.196093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +44.375737,0.202685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +44.375940,0.200573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +44.376142,0.193629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +44.376337,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +44.376527,0.193821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +44.376722,0.197885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +44.376921,0.173630,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +44.377602,0.147006,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +44.377751,0.194717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +44.377948,0.203933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +44.378153,0.204957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +44.378359,0.200445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +44.378561,0.206813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +44.378769,0.202109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +44.378972,0.209788,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +44.379183,0.206525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +44.379391,0.203645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +44.379596,0.213789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +44.379811,0.202781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +44.380015,0.201053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +44.380217,0.200701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +44.380419,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +44.380610,0.192765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +44.380804,0.191581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +44.380997,0.205181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +44.381203,0.192765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +44.381397,0.188413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +44.381587,0.192349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +44.381781,0.194813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +44.381918,39.740299,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","225",,,"bs",1733 +44.381976,0.186558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +44.382164,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +44.382352,0.188957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +44.382542,0.182557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +44.382726,0.179389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +44.382906,0.181566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +44.383089,0.185277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +44.383276,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +44.383463,0.194941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +44.383659,0.192893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +44.383853,0.193629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +44.384048,0.187389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +44.384236,0.182814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +44.384420,0.179261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +44.384601,0.179485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +44.384781,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +44.384966,0.050624,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +44.385510,0.092959,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +44.385612,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +44.385797,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +44.385981,0.178302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +44.386161,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +44.386347,0.185981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +44.386534,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +44.386721,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +44.386904,0.184606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +44.387090,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +44.387275,0.187741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +44.387464,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +44.387654,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +44.387837,0.185310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +44.388023,0.189022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +44.388213,0.191965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +44.388407,0.189117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +44.388597,0.187741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +44.388786,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +44.388974,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +44.389160,0.186238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +44.389347,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +44.389531,0.182557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +44.389715,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +44.389898,0.182654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +44.390082,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +44.390266,0.183037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +44.390450,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +44.390634,0.181566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +44.390817,0.183902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +44.391002,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +44.391185,0.175997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +44.391363,0.180766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +44.391545,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +44.391732,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +44.391913,0.188157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +44.392102,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +44.392284,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +44.392448,0.112830,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +44.392766,0.024224,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +44.392867,0.179453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +44.393047,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +44.393232,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +44.393417,0.185406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +44.393603,0.183613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +44.393788,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +44.393970,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +44.394150,0.180446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +44.394332,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +44.394516,0.183453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +44.394700,0.179613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +44.394881,0.182974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +44.395065,0.183901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +44.395250,0.184477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +44.395436,0.200733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +44.395638,0.199229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +44.395839,0.197981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +44.396038,0.198653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +44.396238,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +44.396427,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +44.396620,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +44.396812,0.187838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +44.397001,0.195646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +44.397198,0.193693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +44.397392,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +44.397580,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +44.397744,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +44.397909,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +44.398074,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +44.398238,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +44.398402,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +44.398567,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +44.398731,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +44.398895,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +44.399060,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +44.399225,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +44.399389,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +44.399553,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +44.399717,0.004832,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +44.400100,0.122494,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +44.400223,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +44.400388,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +44.400552,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +44.400717,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +44.400880,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +44.401045,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +44.401209,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +44.401374,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +44.401538,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +44.401702,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +44.401794,39.998567,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","226",,,"bs",1739 +44.401867,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +44.402031,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +44.402195,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +44.402359,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +44.402523,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +44.402687,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +44.402852,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +44.403016,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +44.403180,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +44.403343,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +44.403508,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +44.403672,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +44.403836,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +44.404000,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +44.404165,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +44.404330,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +44.404494,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +44.404659,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +44.404822,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +44.404987,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +44.405151,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +44.405315,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +44.405479,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +44.405644,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +44.405809,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +44.405973,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +44.406137,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +44.406301,0.065311,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +44.406548,0.062015,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +44.406643,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +44.406807,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +44.406971,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +44.407136,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +44.407300,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +44.407464,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +44.407629,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +44.407794,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +44.407958,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +44.408122,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +44.408286,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +44.408450,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +44.408615,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +44.408779,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +44.408943,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +44.409107,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +44.409271,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +44.409436,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +44.409600,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +44.409764,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +44.409928,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +44.410093,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +44.410257,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +44.410421,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +44.410586,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +44.410750,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +44.410914,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +44.411078,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +44.411243,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +44.411407,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +44.411572,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +44.411737,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +44.411901,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +44.412065,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +44.412229,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +44.412393,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +44.412557,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +44.412722,0.126206,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +44.413081,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +44.413246,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +44.413410,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +44.413574,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +44.413738,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +44.413908,0.167358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +44.414077,0.167773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +44.414246,0.166910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +44.414414,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +44.414580,0.165758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +44.414747,0.165597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +44.414914,0.165342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +44.415081,0.166333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +44.415248,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +44.415415,0.167261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +44.415583,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +44.415749,0.165597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +44.415916,0.165502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +44.416083,0.165757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +44.416250,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +44.416415,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +44.416581,0.165150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +44.416748,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +44.416913,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +44.417077,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +44.417242,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +44.417407,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +44.417571,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +44.417735,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +44.417899,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +44.418063,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +44.418227,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +44.418392,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +44.418556,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +44.418720,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +44.418885,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +44.419049,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +44.419214,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +44.419378,0.025056,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +44.419749,0.102399,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +44.419853,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +44.420016,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +44.420181,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +44.420345,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +44.420509,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +44.420673,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +44.420838,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +44.421002,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +44.421167,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +44.421331,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +44.421495,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +44.421659,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +44.421824,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +44.421988,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +44.422153,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +44.422317,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +44.422481,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +44.422645,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +44.422809,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +44.422973,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +44.423138,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +44.423302,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +44.423466,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +44.423631,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +44.423795,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +44.423959,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +44.424123,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +44.424288,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +44.424452,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +44.424617,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +44.424781,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +44.424945,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +44.425110,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +44.425274,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +44.425439,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +44.425604,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +44.425768,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +44.425932,0.086303,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +44.426179,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +44.426206,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +44.426208,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +44.426319,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +44.426344,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +44.426346,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +44.440858,39.734026,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","227",,,"bs",1745 +44.441814,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +44.441839,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +44.441840,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +44.460869,40.005382,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","228",,,"bs",1751 +44.480617,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +44.480645,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +44.480646,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +44.481111,40.245570,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","229",,,"bs",1757 +44.500892,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +44.500918,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +44.500919,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +44.519426,39.962087,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","230",,,"bs",1763 +44.521370,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +44.521395,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +44.521396,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +44.539713,40.291714,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","231",,,"bs",1769 +44.559403,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +44.559428,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +44.559429,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +44.560548,40.419232,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","232",,,"bs",1775 +44.580018,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +44.580042,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +44.580044,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +44.597977,27.738335,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","233",,,"bs",1781 +44.600980,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +44.601005,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +44.601006,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +44.625726,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +44.625750,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +44.625751,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +45.959872,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +45.960036,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +45.960200,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +45.960364,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +45.960527,0.170974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +45.960700,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +45.960864,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +45.961028,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +45.961191,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +45.961355,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +45.961519,0.171166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +45.961692,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +45.961855,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +45.962019,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +45.962183,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +45.962347,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +45.962511,0.171326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +45.962683,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +45.962847,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +45.963011,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +45.963175,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +45.963339,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +45.963503,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +45.963668,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +45.963831,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +45.963996,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +45.964161,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +45.964325,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +45.964488,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +45.964652,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +45.964816,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +45.964980,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +45.965145,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +45.965309,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +45.965473,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +45.965637,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +45.965801,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +45.965964,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +45.966128,0.025088,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +45.966216,39.622798,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","234",,,"bs",1809 +45.966455,0.102175,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +45.966559,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +45.966723,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +45.966888,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +45.967054,0.165374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +45.967220,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +45.967386,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +45.967551,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +45.967716,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +45.967880,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +45.968044,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +45.968208,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +45.968374,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +45.968539,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +45.968712,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +45.968876,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +45.969041,0.165086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +45.969207,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +45.969372,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +45.969536,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +45.969700,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +45.969864,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +45.970029,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +45.970194,0.169821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +45.970365,0.199485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +45.970566,0.211037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +45.970778,0.203549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +45.970983,0.202493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +45.971187,0.211037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +45.971400,0.198717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +45.971599,0.198173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +45.971799,0.200381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +45.972001,0.219324,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +45.972221,0.210045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +45.972433,0.198173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +45.972632,0.203741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +45.972837,0.198717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +45.973037,0.202781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +45.973241,0.106142,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +45.973696,0.042016,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +45.973795,0.203965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +45.974000,0.206812,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +45.974208,0.208189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +45.974418,0.213245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +45.974632,0.205245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +45.974839,0.206717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +45.975047,0.205821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +45.975254,0.195965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +45.975451,0.207741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +45.975660,0.214428,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +45.975876,0.211005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +45.976088,0.213693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +45.976303,0.208061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +45.976513,0.209149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +45.976723,0.167741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +45.976892,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +45.977056,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +45.977221,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +45.977386,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +45.977550,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +45.977715,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +45.977879,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +45.978043,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +45.978208,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +45.978372,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +45.978537,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +45.978701,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +45.978866,0.190366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +45.979058,0.195165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +45.979254,0.201245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +45.979457,0.196093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +45.979654,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +45.979842,0.201597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +45.980045,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +45.980235,0.188925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +45.980426,0.192253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +45.980619,0.205373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +45.980826,0.160062,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +45.981380,0.177565,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +45.981559,0.213277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +45.981773,0.197629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +45.981972,0.191965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +45.982165,0.202685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +45.982369,0.197533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +45.982568,0.210365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +45.982780,0.206652,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +45.982988,0.197533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +45.983187,0.211901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +45.983400,0.192637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +45.983594,0.190461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +45.983786,0.196925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +45.983984,0.204733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +45.984190,0.192573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +45.984384,0.190046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +45.984575,0.191517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +45.984768,0.190525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +45.984960,0.193117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +45.985154,0.190525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +45.985346,0.188989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +45.985536,0.196509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +45.985734,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +45.985916,0.180606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +45.985949,39.772940,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","235",,,"bs",1815 +45.986098,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +45.986280,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +45.986465,0.186397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +45.986661,0.188605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +45.986851,0.184030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +45.987036,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +45.987218,0.180125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +45.987399,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +45.987580,0.185150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +45.987766,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +45.987945,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +45.988129,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +45.988309,0.175870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +45.988486,0.187005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +45.988675,0.049023,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +45.989031,0.092126,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +45.989130,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +45.989319,0.184669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +45.989504,0.191966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +45.989698,0.184222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +45.989883,0.184637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +45.990069,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +45.990253,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +45.990437,0.183262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +45.990621,0.185405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +45.990808,0.185853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +45.990995,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +45.991182,0.190365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +45.991374,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +45.991561,0.186878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +45.991749,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +45.991932,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +45.992119,0.189597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +45.992310,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +45.992497,0.182590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +45.992681,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +45.992866,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +45.993049,0.180189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +45.993230,0.181694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +45.993413,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +45.993595,0.178717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +45.993775,0.183901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +45.993961,0.181822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +45.994144,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +45.994325,0.178717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +45.994504,0.193501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +45.994699,0.181630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +45.994882,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +45.995065,0.169597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +45.995235,0.169438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +45.995406,0.173949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +45.995581,0.176573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +45.995759,0.175518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +45.995936,0.116222,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +45.996302,0.023392,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +45.996397,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +45.996579,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +45.996762,0.179870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +45.996943,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +45.997128,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +45.997311,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +45.997494,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +45.997682,0.184734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +45.997868,0.183133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +45.998053,0.188285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +45.998242,0.195837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +45.998439,0.196221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +45.998637,0.193341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +45.998831,0.195197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +45.999028,0.188925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +45.999218,0.195389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +45.999414,0.194141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +45.999610,0.204413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +45.999815,0.202237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +46.000019,0.191293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +46.000212,0.175966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +46.000389,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +46.000553,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +46.000717,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +46.000882,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +46.001046,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +46.001210,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +46.001375,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +46.001539,0.171870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +46.001712,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +46.001877,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +46.002040,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +46.002205,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +46.002369,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +46.002533,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +46.002697,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +46.002862,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +46.003026,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +46.003190,0.004864,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +46.003455,0.122206,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +46.003579,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +46.003743,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +46.003907,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +46.004071,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +46.004235,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +46.004400,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +46.004564,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +46.004729,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +46.004892,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +46.005057,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +46.005221,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +46.005385,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +46.005549,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +46.005714,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +46.005840,39.970505,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","236",,,"bs",1821 +46.005879,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +46.006043,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +46.006208,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +46.006373,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +46.006537,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +46.006701,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +46.006865,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +46.007030,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +46.007194,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +46.007358,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +46.007522,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +46.007686,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +46.007851,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +46.008015,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +46.008179,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +46.008344,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +46.008508,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +46.008673,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +46.008837,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +46.009001,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +46.009166,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +46.009330,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +46.009494,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +46.009659,0.065791,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +46.009934,0.061759,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +46.010027,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +46.010191,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +46.010356,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +46.010520,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +46.010685,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +46.010850,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +46.011015,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +46.011179,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +46.011343,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +46.011508,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +46.011672,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +46.011836,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +46.012001,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +46.012165,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +46.012329,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +46.012494,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +46.012658,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +46.012822,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +46.012986,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +46.013151,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +46.013315,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +46.013479,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +46.013643,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +46.013808,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +46.013973,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +46.014137,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +46.014302,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +46.014466,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +46.014631,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +46.014795,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +46.014960,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +46.015124,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +46.015288,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +46.015453,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +46.015617,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +46.015781,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +46.015946,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +46.016110,0.126782,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +46.016499,0.165854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +46.016666,0.167229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +46.016835,0.168478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +46.017004,0.167485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +46.017173,0.166846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +46.017341,0.165437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +46.017508,0.165918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +46.017675,0.165565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +46.017841,0.167070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +46.018010,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +46.018178,0.167294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +46.018346,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +46.018513,0.165502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +46.018680,0.165085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +46.018846,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +46.019012,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +46.019179,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +46.019345,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +46.019511,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +46.019676,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +46.019841,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +46.020006,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +46.020170,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +46.020335,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +46.020499,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +46.020664,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +46.020828,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +46.020992,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +46.021156,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +46.021321,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +46.021485,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +46.021649,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +46.021813,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +46.021977,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +46.022142,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +46.022306,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +46.022470,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +46.022634,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +46.022798,0.025055,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +46.023185,0.102430,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +46.023288,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +46.023453,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +46.023617,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +46.023781,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +46.023945,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +46.024109,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +46.024274,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +46.024438,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +46.024603,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +46.024767,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +46.024932,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +46.025096,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +46.025260,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +46.025424,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +46.025589,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +46.025753,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +46.025917,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +46.026081,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +46.026245,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +46.026409,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +46.026575,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +46.026739,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +46.026903,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +46.027067,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +46.027231,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +46.027396,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +46.027560,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +46.027724,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +46.027888,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +46.028053,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +46.028216,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +46.028381,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +46.028545,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +46.028709,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +46.028874,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +46.029038,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +46.029202,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +46.029367,0.085663,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +46.029623,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +46.029651,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +46.029652,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +46.029790,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +46.029815,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +46.029816,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +46.044881,39.668366,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","237",,,"bs",1827 +46.045842,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +46.045869,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +46.045870,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +46.064831,40.152775,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","238",,,"bs",1833 +46.084568,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +46.084594,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +46.084595,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +46.085148,40.220741,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","239",,,"bs",1839 +46.104995,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +46.105020,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +46.105022,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +46.123407,39.812107,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","240",,,"bs",1845 +46.125472,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +46.125497,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +46.125498,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +46.143596,40.614048,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","241",,,"bs",1851 +46.163231,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +46.163256,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +46.163257,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +46.164416,40.478689,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","242",,,"bs",1857 +46.184266,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +46.184296,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +46.184297,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +46.201924,30.985263,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","243",,,"bs",1863 +46.204912,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +46.204938,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +46.204939,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +46.232921,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +46.232946,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +46.232947,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +47.581669,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +47.581832,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +47.581996,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +47.582160,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +47.582324,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +47.582488,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +47.582652,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +47.582815,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +47.582979,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +47.583143,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +47.583307,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +47.583471,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +47.583635,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +47.583798,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +47.583962,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +47.584126,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +47.584290,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +47.584454,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +47.584618,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +47.584782,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +47.584946,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +47.585109,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +47.585273,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +47.585437,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +47.585601,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +47.585766,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +47.585930,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +47.586095,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +47.586259,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +47.586423,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +47.586587,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +47.586751,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +47.586915,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +47.587079,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +47.587244,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +47.587407,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +47.587571,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +47.587735,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +47.587899,0.024895,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +47.588304,39.619982,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","244",,,"bs",1891 +47.588566,0.102014,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +47.588671,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +47.588836,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +47.589000,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +47.589165,0.166589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +47.589332,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +47.589498,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +47.589662,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +47.589827,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +47.589991,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +47.590157,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +47.590321,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +47.590485,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +47.590649,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +47.590814,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +47.590979,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +47.591143,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +47.591307,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +47.591471,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +47.591635,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +47.591800,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +47.591963,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +47.592128,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +47.592292,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +47.592456,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +47.592621,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +47.592785,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +47.592950,0.192861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +47.593144,0.195837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +47.593342,0.202205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +47.593545,0.203581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +47.593750,0.203453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +47.593955,0.196925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +47.594153,0.197565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +47.594351,0.195965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +47.594549,0.206685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +47.594757,0.201981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +47.594960,0.203549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +47.595164,0.107966,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +47.596098,0.041727,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +47.596215,0.169470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +47.596386,0.188605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +47.596576,0.195101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +47.596772,0.198045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +47.596971,0.212573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +47.597185,0.206013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +47.597392,0.195837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +47.597589,0.197693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +47.597788,0.186909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +47.597976,0.195805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +47.598174,0.207069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +47.598382,0.204093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +47.598587,0.202301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +47.598791,0.201597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +47.598994,0.201661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +47.599196,0.184285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +47.599382,0.167549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +47.599551,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +47.599715,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +47.599880,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +47.600044,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +47.600209,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +47.600374,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +47.600538,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +47.600703,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +47.600867,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +47.601031,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +47.601196,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +47.601360,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +47.601524,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +47.601689,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +47.601854,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +47.602018,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +47.602183,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +47.602347,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +47.602511,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +47.602676,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +47.602840,0.146686,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +47.603606,0.161054,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +47.603768,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +47.603960,0.190429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +47.604151,0.188861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +47.604341,0.192158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +47.604535,0.187229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +47.604723,0.188829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +47.604913,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +47.605097,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +47.605262,0.187389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +47.605451,0.192253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +47.605645,0.193117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +47.605839,0.195549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +47.606036,0.191261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +47.606229,0.185757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +47.606416,0.191517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +47.606609,0.188030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +47.606798,0.195709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +47.606995,0.188413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +47.607184,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +47.607375,0.198557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +47.607575,0.177789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +47.607754,0.178590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +47.607934,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +47.608044,39.718925,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","245",,,"bs",1897 +47.608115,0.178141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +47.608294,0.180670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +47.608476,0.176894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +47.608654,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +47.608833,0.173854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +47.609008,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +47.609188,0.176029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +47.609365,0.172638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +47.609539,0.177661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +47.609717,0.175805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +47.609894,0.172350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +47.610068,0.173533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +47.610242,0.173757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +47.610417,0.175934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +47.610594,0.049183,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +47.611003,0.088670,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +47.611128,0.175389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +47.611304,0.174078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +47.611480,0.175422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +47.611656,0.172573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +47.611830,0.175806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +47.612007,0.178269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +47.612187,0.174877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +47.612363,0.177886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +47.612542,0.172605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +47.612715,0.177693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +47.612894,0.175198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +47.613071,0.177693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +47.613249,0.174589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +47.613425,0.185150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +47.613612,0.177917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +47.613791,0.174589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +47.613966,0.174686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +47.614142,0.177021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +47.614321,0.176605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +47.614498,0.178142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +47.614678,0.176029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +47.614855,0.174173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +47.615030,0.173822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +47.615205,0.172029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +47.615378,0.173789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +47.615553,0.173662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +47.615728,0.177309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +47.615907,0.172126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +47.616080,0.171741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +47.616253,0.171965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +47.616426,0.173918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +47.616601,0.172893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +47.616775,0.174366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +47.616951,0.172157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +47.617124,0.171741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +47.617297,0.172414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +47.617471,0.172445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +47.617644,0.112702,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +47.618045,0.021888,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +47.618167,0.172958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +47.618341,0.178013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +47.618520,0.179613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +47.618701,0.171582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +47.618874,0.172669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +47.619048,0.177917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +47.619227,0.176446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +47.619405,0.177757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +47.619583,0.176157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +47.619761,0.175102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +47.619937,0.171933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +47.620111,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +47.620275,0.169853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +47.620446,0.171806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +47.620619,0.172093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +47.620792,0.171645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +47.620965,0.170430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +47.621136,0.174717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +47.621312,0.181309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +47.621495,0.174814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +47.621671,0.172445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +47.621844,0.169374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +47.622015,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +47.622187,0.169758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +47.622358,0.170365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +47.622529,0.172189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +47.622703,0.171518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +47.622876,0.170493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +47.623047,0.170142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +47.623218,0.175485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +47.623395,0.170621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +47.623567,0.191486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +47.623760,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +47.623945,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +47.624138,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +47.624328,0.183453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +47.624513,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +47.624698,0.183230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +47.624882,0.005504,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +47.625340,0.136382,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +47.625483,0.167229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +47.625651,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +47.625815,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +47.625979,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +47.626144,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +47.626308,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +47.626472,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +47.626637,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +47.626801,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +47.626965,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +47.627129,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +47.627293,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +47.627457,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +47.627621,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +47.627786,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +47.627907,39.982409,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","246",,,"bs",1903 +47.627950,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +47.628114,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +47.628279,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +47.628443,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +47.628607,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +47.628771,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +47.628935,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +47.629100,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +47.629264,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +47.629428,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +47.629592,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +47.629756,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +47.629921,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +47.630085,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +47.630249,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +47.630413,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +47.630577,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +47.630741,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +47.630906,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +47.631070,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +47.631235,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +47.631399,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +47.631563,0.065343,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +47.631846,0.061983,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +47.631942,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +47.632106,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +47.632271,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +47.632435,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +47.632600,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +47.632764,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +47.632929,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +47.633092,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +47.633256,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +47.633420,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +47.633585,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +47.633749,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +47.633913,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +47.634078,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +47.634242,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +47.634406,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +47.634570,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +47.634735,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +47.634899,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +47.635064,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +47.635228,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +47.635393,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +47.635557,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +47.635721,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +47.635886,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +47.636051,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +47.636215,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +47.636379,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +47.636543,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +47.636708,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +47.636872,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +47.637037,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +47.637201,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +47.637366,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +47.637531,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +47.637696,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +47.637860,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +47.638024,0.126110,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +47.638410,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +47.638575,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +47.638739,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +47.638903,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +47.639067,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +47.639232,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +47.639397,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +47.639561,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +47.639725,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +47.639888,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +47.640053,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +47.640217,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +47.640381,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +47.640545,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +47.640709,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +47.640873,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +47.641037,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +47.641202,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +47.641366,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +47.641530,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +47.641696,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +47.641862,0.165022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +47.642028,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +47.642194,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +47.642358,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +47.642523,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +47.642687,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +47.642851,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +47.643016,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +47.643181,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +47.643345,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +47.643510,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +47.643674,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +47.643839,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +47.644005,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +47.644169,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +47.644334,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +47.644498,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +47.644663,0.024960,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +47.645190,0.105151,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +47.645311,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +47.645477,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +47.645641,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +47.645806,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +47.645970,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +47.646135,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +47.646299,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +47.646464,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +47.646630,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +47.646794,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +47.646958,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +47.647122,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +47.647287,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +47.647451,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +47.647616,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +47.647781,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +47.647945,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +47.648109,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +47.648273,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +47.648437,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +47.648601,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +47.648765,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +47.648930,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +47.649094,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +47.649258,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +47.649423,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +47.649587,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +47.649751,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +47.649916,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +47.650080,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +47.650245,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +47.650410,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +47.650574,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +47.650739,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +47.650903,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +47.651067,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +47.651232,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +47.651396,0.085982,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +47.651760,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +47.651793,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +47.651794,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +47.651976,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +47.652006,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +47.652008,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +47.666961,39.746413,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","247",,,"bs",1909 +47.667920,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +47.667949,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +47.667951,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +47.686937,40.029448,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","248",,,"bs",1915 +47.706722,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +47.706750,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +47.706751,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +47.707224,40.108039,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","249",,,"bs",1921 +47.726968,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +47.726995,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +47.726996,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +47.745519,39.753453,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","250",,,"bs",1927 +47.747333,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +47.747360,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +47.747361,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +47.765700,40.440066,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","251",,,"bs",1933 +47.785333,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +47.785367,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +47.785368,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +47.786608,40.333636,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","252",,,"bs",1939 +47.806153,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +47.806180,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +47.806182,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +47.824077,27.711105,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","253",,,"bs",1945 +47.826943,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +47.826970,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +47.826972,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +47.851789,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +47.851816,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +47.851817,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +49.224597,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +49.224760,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +49.224924,0.162174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +49.225088,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +49.225251,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +49.225415,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +49.225579,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +49.225742,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +49.225906,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +49.226070,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +49.226235,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +49.226398,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +49.226562,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +49.226726,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +49.226889,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +49.227054,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +49.227218,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +49.227382,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +49.227546,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +49.227710,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +49.227874,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +49.228038,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +49.228202,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +49.228366,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +49.228530,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +49.228694,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +49.228858,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +49.229022,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +49.229187,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +49.229351,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +49.229515,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +49.229679,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +49.229843,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +49.230007,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +49.230171,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +49.230335,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +49.230499,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +49.230663,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +49.230827,0.025055,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +49.231227,39.563087,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","254",,,"bs",1973 +49.231447,0.101823,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +49.231550,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +49.231718,0.165662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +49.231885,0.165565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +49.232052,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +49.232216,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +49.232381,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +49.232548,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +49.232713,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +49.232877,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +49.233041,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +49.233207,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +49.233371,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +49.233536,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +49.233699,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +49.233865,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +49.234029,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +49.234193,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +49.234357,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +49.234522,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +49.234687,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +49.234852,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +49.235017,0.195709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +49.235214,0.202621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +49.235418,0.206461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +49.235626,0.204221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +49.235832,0.212924,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +49.236046,0.200861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +49.236248,0.197629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +49.236447,0.202621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +49.236651,0.199613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +49.236852,0.203901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +49.237057,0.210685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +49.237269,0.202557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +49.237473,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +49.237677,0.206397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +49.237884,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +49.238067,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +49.238232,0.086430,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +49.238824,0.051903,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +49.238932,0.212157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +49.239145,0.203101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +49.239350,0.203197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +49.239554,0.201949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +49.239757,0.204509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +49.239963,0.200733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +49.240165,0.205853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +49.240372,0.211260,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +49.240585,0.221757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +49.240808,0.209885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +49.241019,0.188029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +49.241208,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +49.241375,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +49.241540,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +49.241705,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +49.241869,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +49.242033,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +49.242197,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +49.242362,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +49.242526,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +49.242690,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +49.242855,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +49.243020,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +49.243184,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +49.243349,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +49.243533,0.200221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +49.243734,0.192317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +49.243928,0.197117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +49.244126,0.184670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +49.244312,0.190365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +49.244504,0.195453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +49.244701,0.192477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +49.244895,0.195293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +49.245091,0.194141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +49.245286,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +49.245470,0.167134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +49.245638,0.193053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +49.245832,0.173885,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +49.246493,0.174813,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +49.246669,0.199197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +49.246869,0.194685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +49.247065,0.201437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +49.247268,0.207997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +49.247477,0.211965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +49.247691,0.188317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +49.247880,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +49.248069,0.187005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +49.248257,0.202813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +49.248461,0.187742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +49.248650,0.188445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +49.248840,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +49.249028,0.194493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +49.249224,0.189053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +49.249414,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +49.249604,0.189565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +49.249795,0.184958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +49.249981,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +49.250168,0.185885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +49.250355,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +49.250537,0.181182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +49.250719,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +49.250907,0.191197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +49.250955,39.768044,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","255",,,"bs",1979 +49.251100,0.179005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +49.251280,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +49.251464,0.188254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +49.251654,0.178973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +49.251834,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +49.252014,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +49.252197,0.181374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +49.252379,0.176765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +49.252557,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +49.252745,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +49.252928,0.181310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +49.253111,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +49.253295,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +49.253481,0.181021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +49.253663,0.049984,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +49.254059,0.093822,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +49.254158,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +49.254344,0.184509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +49.254529,0.186302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +49.254717,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +49.254906,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +49.255096,0.189021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +49.255286,0.195869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +49.255484,0.186557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +49.255671,0.200221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +49.255873,0.196125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +49.256071,0.197117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +49.256269,0.187710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +49.256458,0.189117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +49.256648,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +49.256838,0.185117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +49.257025,0.186749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +49.257213,0.183646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +49.257398,0.199421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +49.257598,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +49.257786,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +49.257970,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +49.258157,0.188829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +49.258348,0.179134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +49.258528,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +49.258711,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +49.258893,0.179453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +49.259074,0.181950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +49.259257,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +49.259439,0.172573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +49.259613,0.167678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +49.259782,0.178333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +49.259961,0.176829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +49.260139,0.176446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +49.260317,0.176605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +49.260495,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +49.260677,0.182686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +49.260861,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +49.261050,0.114942,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +49.261451,0.024095,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +49.261547,0.182558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +49.261731,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +49.261917,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +49.262097,0.186877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +49.262286,0.182878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +49.262470,0.191421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +49.262662,0.200573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +49.262864,0.194013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +49.263060,0.192253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +49.263253,0.194781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +49.263449,0.197757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +49.263648,0.193853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +49.263843,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +49.264039,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +49.264228,0.199485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +49.264429,0.195293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +49.264625,0.197277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +49.264824,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +49.264988,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +49.265152,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +49.265316,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +49.265481,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +49.265645,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +49.265809,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +49.265974,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +49.266138,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +49.266303,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +49.266468,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +49.266632,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +49.266796,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +49.266961,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +49.267125,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +49.267290,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +49.267454,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +49.267618,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +49.267783,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +49.267947,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +49.268111,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +49.268275,0.004959,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +49.268548,0.122815,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +49.268671,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +49.268835,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +49.269000,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +49.269165,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +49.269329,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +49.269494,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +49.269659,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +49.269823,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +49.269987,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +49.270151,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +49.270315,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +49.270479,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +49.270644,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +49.270807,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +49.270864,39.972713,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","256",,,"bs",1985 +49.270971,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +49.271135,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +49.271299,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +49.271464,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +49.271628,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +49.271792,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +49.271956,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +49.272121,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +49.272285,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +49.272449,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +49.272614,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +49.272778,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +49.272943,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +49.273108,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +49.273272,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +49.273437,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +49.273601,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +49.273765,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +49.273929,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +49.274093,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +49.274257,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +49.274422,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +49.274586,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +49.274750,0.065503,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +49.275017,0.061983,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +49.275110,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +49.275274,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +49.275438,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +49.275602,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +49.275767,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +49.275931,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +49.276096,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +49.276260,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +49.276424,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +49.276588,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +49.276752,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +49.276916,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +49.277080,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +49.277244,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +49.277408,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +49.277573,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +49.277737,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +49.277901,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +49.278065,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +49.278230,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +49.278394,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +49.278558,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +49.278723,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +49.278887,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +49.279052,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +49.279216,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +49.279381,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +49.279545,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +49.279709,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +49.279874,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +49.280038,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +49.280202,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +49.280367,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +49.280531,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +49.280696,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +49.280860,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +49.281025,0.165245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +49.281191,0.128254,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +49.309883,39.676398,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","257",,,"bs",1991 +49.329814,40.124967,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","258",,,"bs",1997 +49.350178,40.116263,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","259",,,"bs",2003 +49.388404,39.816427,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","260",,,"bs",2009 +49.408602,33.421612,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","261",,,"bs",2015 +49.442322,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +49.442486,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +49.442650,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +49.442813,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +49.442978,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +49.443141,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +49.443306,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +49.443470,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +49.443634,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +49.443798,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +49.443962,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +49.444126,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +49.444290,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +49.444454,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +49.444618,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +49.444782,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +49.444946,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +49.445110,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +49.445274,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +49.445438,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +49.445602,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +49.445767,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +49.445931,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +49.446096,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +49.446259,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +49.446424,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +49.446588,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +49.446753,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +49.446916,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +49.447080,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +49.447244,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +49.447408,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +49.447573,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +49.447737,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +49.447901,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +49.448065,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +49.448230,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +49.448394,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +49.448558,0.025023,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +49.448649,39.619759,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","262",,,"bs",2021 +49.448882,0.102110,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +49.448986,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +49.449149,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +49.449314,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +49.449477,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +49.449641,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +49.449805,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +49.449969,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +49.450133,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +49.450297,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +49.450461,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +49.450625,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +49.450790,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +49.450954,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +49.451118,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +49.451283,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +49.451447,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +49.451611,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +49.451775,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +49.451939,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +49.452103,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +49.452268,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +49.452432,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +49.452596,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +49.452761,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +49.452925,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +49.453090,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +49.453253,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +49.453418,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +49.453582,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +49.453746,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +49.453910,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +49.454074,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +49.454238,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +49.454402,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +49.454566,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +49.454730,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +49.454895,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +49.455059,0.085823,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +49.455292,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +49.455323,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +49.455324,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +49.455454,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +49.455482,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +49.455483,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +49.455549,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +49.455575,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +49.455577,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +49.455638,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +49.455666,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +49.455667,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +49.455732,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +49.455759,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +49.455760,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +49.455819,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +49.455846,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +49.455847,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +49.455907,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +49.455933,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +49.455935,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +49.456002,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +49.456029,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +49.456030,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +49.468383,36.240353,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","263",,,"bs",2027 +49.488272,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +49.488299,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +49.488300,0.005152,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +49.504627,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +49.504653,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +49.504654,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +50.891450,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +50.891614,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +50.891777,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +50.891941,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +50.892105,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +50.892269,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +50.892432,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +50.892596,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +50.892760,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +50.892924,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +50.893088,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +50.893253,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +50.893417,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +50.893581,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +50.893744,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +50.893909,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +50.894072,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +50.894236,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +50.894400,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +50.894564,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +50.894728,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +50.894892,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +50.895056,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +50.895220,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +50.895384,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +50.895548,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +50.895712,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +50.895877,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +50.896042,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +50.896205,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +50.896370,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +50.896534,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +50.896698,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +50.896862,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +50.897026,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +50.897190,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +50.897354,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +50.897518,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +50.897682,0.025120,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +50.897947,39.600143,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","264",,,"bs",2055 +50.898218,0.102398,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +50.898322,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +50.898486,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +50.898650,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +50.898815,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +50.898979,0.165598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +50.899146,0.165886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +50.899313,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +50.899478,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +50.899642,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +50.899807,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +50.899972,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +50.900137,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +50.900301,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +50.900465,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +50.900630,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +50.900795,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +50.900959,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +50.901124,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +50.901289,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +50.901453,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +50.901617,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +50.901781,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +50.901946,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +50.902110,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +50.902274,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +50.902438,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +50.902603,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +50.902767,0.190525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +50.902959,0.198653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +50.903159,0.204669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +50.903365,0.205405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +50.903571,0.205789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +50.903778,0.204413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +50.903984,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +50.904173,0.197117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +50.904371,0.203517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +50.904576,0.203933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +50.904781,0.110526,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +50.905608,0.042304,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +50.905730,0.165566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +50.905897,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +50.906062,0.176350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +50.906240,0.203261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +50.906445,0.205725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +50.906652,0.207004,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +50.906860,0.207325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +50.907069,0.200509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +50.907270,0.199965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +50.907471,0.195517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +50.907668,0.188861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +50.907858,0.198014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +50.908057,0.205533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +50.908264,0.205437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +50.908471,0.207133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +50.908680,0.204445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +50.908885,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +50.909089,0.195325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +50.909286,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +50.909451,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +50.909618,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +50.909782,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +50.909947,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +50.910111,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +50.910276,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +50.910440,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +50.910605,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +50.910769,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +50.910934,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +50.911097,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +50.911261,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +50.911425,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +50.911590,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +50.911754,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +50.911919,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +50.912084,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +50.912248,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +50.912413,0.147070,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +50.913081,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +50.913245,0.197309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +50.913444,0.188413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +50.913633,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +50.913819,0.194173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +50.914015,0.192669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +50.914208,0.187870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +50.914397,0.188157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +50.914587,0.194109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +50.914782,0.192829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +50.914976,0.174781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +50.915152,0.170750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +50.915324,0.190781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +50.915516,0.186205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +50.915704,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +50.915897,0.195997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +50.916094,0.189981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +50.916285,0.184733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +50.916471,0.190142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +50.916663,0.189021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +50.916853,0.191709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +50.917046,0.191229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +50.917239,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +50.917429,0.191933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +50.917622,0.175166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +50.917671,39.745869,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","265",,,"bs",2061 +50.917798,0.177629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +50.917978,0.176861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +50.918156,0.180190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +50.918337,0.176542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +50.918515,0.172733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +50.918689,0.174718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +50.918865,0.177981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +50.919044,0.174141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +50.919219,0.173214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +50.919393,0.175613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +50.919570,0.173821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +50.919745,0.172350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +50.919919,0.172221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +50.920092,0.047231,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +50.920525,0.095774,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +50.920662,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +50.920851,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +50.921036,0.174429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +50.921212,0.176510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +50.921390,0.176157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +50.921567,0.175613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +50.921744,0.174910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +50.921920,0.174109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +50.922095,0.179965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +50.922276,0.175294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +50.922453,0.172765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +50.922627,0.176894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +50.922805,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +50.922990,0.181181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +50.923173,0.199549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +50.923373,0.191677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +50.923567,0.187101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +50.923755,0.181726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +50.923938,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +50.924120,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +50.924303,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +50.924485,0.181726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +50.924668,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +50.924853,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +50.925038,0.174237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +50.925213,0.176318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +50.925391,0.174173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +50.925566,0.173054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +50.925740,0.171581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +50.925913,0.170845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +50.926085,0.176446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +50.926263,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +50.926436,0.174814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +50.926612,0.169981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +50.926783,0.170557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +50.926955,0.175838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +50.927132,0.176189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +50.927309,0.113054,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +50.927932,0.023423,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +50.928056,0.181885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +50.928239,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +50.928418,0.181790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +50.928601,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +50.928781,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +50.928961,0.183038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +50.929145,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +50.929320,0.176605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +50.929498,0.178238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +50.929678,0.176541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +50.929856,0.175389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +50.930032,0.177790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +50.930211,0.172637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +50.930385,0.167262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +50.930553,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +50.930718,0.170397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +50.930890,0.172030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +50.931063,0.171901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +50.931236,0.177662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +50.931415,0.175293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +50.931592,0.178909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +50.931772,0.177598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +50.931951,0.175325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +50.932127,0.171901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +50.932300,0.171870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +50.932474,0.170749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +50.932646,0.168254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +50.932815,0.169245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +50.932985,0.172221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +50.933159,0.172286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +50.933332,0.167773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +50.933501,0.175134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +50.933678,0.173917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +50.933853,0.176061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +50.934030,0.191806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +50.934223,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +50.934408,0.188637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +50.934598,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +50.934786,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +50.935438,0.157598,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +50.935596,0.207133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +50.935805,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +50.935992,0.178013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +50.936171,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +50.936335,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +50.936499,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +50.936664,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +50.936828,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +50.936992,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +50.937156,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +50.937320,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +50.937485,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +50.937577,40.001161,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","266",,,"bs",2067 +50.937648,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +50.937812,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +50.937976,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +50.938141,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +50.938304,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +50.938469,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +50.938633,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +50.938798,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +50.938962,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +50.939126,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +50.939291,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +50.939455,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +50.939620,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +50.939784,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +50.939949,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +50.940113,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +50.940277,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +50.940442,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +50.940606,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +50.940770,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +50.940934,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +50.941099,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +50.941263,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +50.941427,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +50.941592,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +50.941756,0.065471,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +50.942083,0.062015,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +50.942181,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +50.942346,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +50.942510,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +50.942674,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +50.942838,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +50.943002,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +50.943166,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +50.943330,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +50.943495,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +50.943659,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +50.943823,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +50.943988,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +50.944152,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +50.944316,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +50.944480,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +50.944645,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +50.944809,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +50.944973,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +50.945137,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +50.945301,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +50.945465,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +50.945630,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +50.945794,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +50.945958,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +50.946122,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +50.946287,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +50.946452,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +50.946616,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +50.946780,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +50.946945,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +50.947109,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +50.947274,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +50.947439,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +50.947603,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +50.947767,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +50.947931,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +50.948096,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +50.948260,0.126526,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +50.948678,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +50.948842,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +50.949007,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +50.949171,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +50.949335,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +50.949499,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +50.949663,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +50.949827,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +50.949991,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +50.950155,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +50.950320,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +50.950484,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +50.950648,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +50.950813,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +50.950978,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +50.951142,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +50.951307,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +50.951471,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +50.951636,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +50.951800,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +50.951964,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +50.952128,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +50.952293,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +50.952457,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +50.952623,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +50.952787,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +50.952952,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +50.953116,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +50.953280,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +50.953445,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +50.953609,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +50.953773,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +50.953938,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +50.954103,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +50.954268,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +50.954432,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +50.954597,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +50.954762,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +50.954926,0.025056,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +50.955530,0.102559,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +50.955648,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +50.955814,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +50.955980,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +50.956144,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +50.956308,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +50.956472,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +50.956636,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +50.956800,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +50.956965,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +50.957129,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +50.957293,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +50.957457,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +50.957621,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +50.957785,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +50.957950,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +50.958114,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +50.958279,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +50.958443,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +50.958608,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +50.958772,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +50.958936,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +50.959099,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +50.959264,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +50.959428,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +50.959592,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +50.959756,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +50.959920,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +50.960085,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +50.960249,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +50.960413,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +50.960577,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +50.960741,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +50.960905,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +50.961070,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +50.961234,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +50.961398,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +50.961562,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +50.961727,0.085663,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +50.962133,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +50.962166,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +50.962167,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +50.962347,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +50.962378,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +50.962379,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +50.976567,39.700557,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","267",,,"bs",2073 +50.977604,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +50.977633,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +50.977634,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +50.996529,40.115463,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","268",,,"bs",2079 +51.016288,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +51.016317,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +51.016318,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +51.016825,40.304836,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","269",,,"bs",2085 +51.036649,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +51.036677,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +51.036678,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +51.055177,39.946153,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","270",,,"bs",2091 +51.057162,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +51.057190,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +51.057191,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +51.075443,40.435554,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","271",,,"bs",2097 +51.095154,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +51.095182,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +51.095183,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +51.096215,40.432738,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","272",,,"bs",2103 +51.115891,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +51.115918,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +51.115919,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +51.133705,30.966960,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","273",,,"bs",2109 +51.136651,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +51.136679,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +51.136680,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +51.164675,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +51.164702,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +51.164703,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +52.494735,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +52.494898,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +52.495062,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +52.495225,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +52.495389,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +52.495553,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +52.495717,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +52.495881,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +52.496045,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +52.496208,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +52.496372,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +52.496535,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +52.496699,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +52.496862,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +52.497026,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +52.497190,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +52.497354,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +52.497518,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +52.497682,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +52.497846,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +52.498011,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +52.498174,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +52.498338,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +52.498502,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +52.498666,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +52.498830,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +52.498994,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +52.499158,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +52.499322,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +52.499486,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +52.499650,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +52.499814,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +52.499978,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +52.500142,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +52.500306,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +52.500470,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +52.500634,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +52.500798,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +52.500961,0.025215,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +52.501341,39.586705,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","274",,,"bs",2137 +52.501590,0.103359,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +52.501696,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +52.501862,0.167870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +52.502031,0.167901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +52.502200,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +52.502365,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +52.502529,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +52.502694,0.164765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +52.502860,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +52.503024,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +52.503189,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +52.503353,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +52.503518,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +52.503683,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +52.503847,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +52.504011,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +52.504175,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +52.504340,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +52.504504,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +52.504668,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +52.504833,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +52.504998,0.198749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +52.505199,0.207805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +52.505408,0.207037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +52.505616,0.213245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +52.505831,0.205917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +52.506038,0.199133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +52.506239,0.198845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +52.506439,0.201213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +52.506641,0.196829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +52.506839,0.206909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +52.507047,0.204508,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +52.507253,0.199229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +52.507454,0.200093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +52.507655,0.206269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +52.507862,0.203869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +52.508068,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +52.508234,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +52.508399,0.094911,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +52.508974,0.053567,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +52.509081,0.204957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +52.509287,0.209405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +52.509498,0.213629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +52.509713,0.195901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +52.509910,0.204605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +52.510116,0.209916,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +52.510327,0.212317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +52.510540,0.219517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +52.510761,0.206813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +52.510970,0.215421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +52.511186,0.170301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +52.511358,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +52.511522,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +52.511687,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +52.511852,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +52.512018,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +52.512183,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +52.512347,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +52.512512,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +52.512676,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +52.512841,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +52.513006,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +52.513170,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +52.513334,0.169406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +52.513505,0.196093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +52.513702,0.193245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +52.513896,0.201181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +52.514099,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +52.514291,0.189309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +52.514481,0.196829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +52.514679,0.191229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +52.514872,0.194685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +52.515068,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +52.515261,0.192638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +52.515455,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +52.515621,0.185277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +52.515808,0.196477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +52.516005,0.175166,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +52.516698,0.178973,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +52.516878,0.198333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +52.517078,0.196765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +52.517275,0.200349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +52.517477,0.211133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +52.517690,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +52.517874,0.197629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +52.518073,0.188254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +52.518263,0.191101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +52.518455,0.187261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +52.518643,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +52.518832,0.186205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +52.519019,0.190109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +52.519211,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +52.519401,0.185630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +52.519588,0.186685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +52.519775,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +52.519961,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +52.520146,0.185054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +52.520332,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +52.520517,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +52.520701,0.189501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +52.520892,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +52.521078,0.181598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +52.521082,39.685584,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","275",,,"bs",2143 +52.521260,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +52.521443,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +52.521625,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +52.521802,0.178846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +52.521982,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +52.522168,0.179645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +52.522349,0.175774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +52.522526,0.191261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +52.522719,0.180541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +52.522900,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +52.523083,0.183198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +52.523267,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +52.523449,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +52.523637,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +52.523821,0.050879,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +52.524334,0.090174,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +52.524439,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +52.524623,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +52.524808,0.186142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +52.524995,0.188285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +52.525185,0.188605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +52.525375,0.190781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +52.525567,0.187069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +52.525755,0.184446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +52.525941,0.185278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +52.526127,0.186589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +52.526315,0.182941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +52.526499,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +52.526684,0.182814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +52.526868,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +52.527049,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +52.527236,0.184509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +52.527422,0.183870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +52.527607,0.192925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +52.527801,0.187645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +52.527990,0.189725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +52.528181,0.176381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +52.528359,0.183870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +52.528544,0.182558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +52.528727,0.183037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +52.528912,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +52.529096,0.179614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +52.529277,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +52.529442,0.174973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +52.529618,0.176254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +52.529796,0.176957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +52.529974,0.174749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +52.530150,0.181150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +52.530332,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +52.530514,0.178845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +52.530694,0.177150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +52.530872,0.175965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +52.531050,0.173885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +52.531225,0.116191,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +52.531596,0.022815,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +52.531691,0.184382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +52.531876,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +52.532060,0.187453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +52.532249,0.197661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +52.532447,0.200861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +52.532650,0.193885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +52.532845,0.194941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +52.533041,0.193565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +52.533236,0.193629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +52.533430,0.195805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +52.533627,0.189501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +52.533818,0.198270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +52.534018,0.194206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +52.534213,0.196701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +52.534411,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +52.534575,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +52.534740,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +52.534904,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +52.535068,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +52.535232,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +52.535397,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +52.535562,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +52.535727,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +52.535890,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +52.536054,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +52.536219,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +52.536383,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +52.536548,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +52.536712,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +52.536877,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +52.537041,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +52.537205,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +52.537370,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +52.537535,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +52.537699,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +52.537864,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +52.538028,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +52.538192,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +52.538357,0.004928,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +52.538585,0.122430,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +52.538708,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +52.538873,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +52.539037,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +52.539201,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +52.539365,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +52.539529,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +52.539693,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +52.539857,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +52.540021,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +52.540186,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +52.540350,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +52.540514,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +52.540678,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +52.540843,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +52.540970,39.983179,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","276",,,"bs",2149 +52.541007,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +52.541171,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +52.541336,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +52.541500,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +52.541664,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +52.541828,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +52.541992,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +52.542156,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +52.542321,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +52.542485,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +52.542649,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +52.542814,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +52.542978,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +52.543143,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +52.543307,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +52.543471,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +52.543636,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +52.543800,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +52.543964,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +52.544129,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +52.544293,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +52.544458,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +52.544622,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +52.544786,0.065759,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +52.545047,0.061823,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +52.545140,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +52.545305,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +52.545469,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +52.545633,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +52.545798,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +52.545962,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +52.546126,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +52.546290,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +52.546455,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +52.546619,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +52.546783,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +52.546947,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +52.547111,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +52.547276,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +52.547440,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +52.547604,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +52.547769,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +52.547933,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +52.548097,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +52.548261,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +52.548425,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +52.548590,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +52.548754,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +52.548918,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +52.549082,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +52.549246,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +52.549411,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +52.549576,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +52.549740,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +52.549904,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +52.550069,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +52.550233,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +52.550398,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +52.550562,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +52.550728,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +52.550895,0.165885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +52.551062,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +52.551228,0.127038,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +52.551647,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +52.551813,0.166781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +52.551981,0.165950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +52.552148,0.166685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +52.552316,0.165886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +52.552483,0.165437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +52.552650,0.165374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +52.552817,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +52.552982,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +52.553148,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +52.553315,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +52.553482,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +52.553647,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +52.553811,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +52.553976,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +52.554140,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +52.554304,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +52.554469,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +52.554633,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +52.554797,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +52.554962,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +52.555126,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +52.555290,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +52.555454,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +52.555618,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +52.555782,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +52.555947,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +52.556112,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +52.556275,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +52.556439,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +52.556604,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +52.556768,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +52.556933,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +52.557097,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +52.557261,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +52.557426,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +52.557590,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +52.557754,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +52.557919,0.025248,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +52.558297,0.102398,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +52.558401,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +52.558565,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +52.558729,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +52.558893,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +52.559057,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +52.559221,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +52.559385,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +52.559550,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +52.559714,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +52.559878,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +52.560043,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +52.560207,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +52.560371,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +52.560534,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +52.560699,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +52.560863,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +52.561028,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +52.561192,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +52.561356,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +52.561521,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +52.561685,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +52.561850,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +52.562014,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +52.562179,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +52.562343,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +52.562508,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +52.562672,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +52.562836,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +52.563000,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +52.563164,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +52.563329,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +52.563493,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +52.563657,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +52.563821,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +52.563986,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +52.564150,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +52.564314,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +52.564479,0.085887,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +52.564752,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +52.564783,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +52.564784,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +52.564911,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +52.564939,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +52.564940,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +52.580000,39.601329,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","277",,,"bs",2155 +52.580959,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +52.580987,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +52.580988,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +52.600009,40.016619,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","278",,,"bs",2161 +52.619637,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +52.619671,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +52.619673,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +52.620273,40.207976,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","279",,,"bs",2167 +52.640041,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +52.640069,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +52.640070,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +52.658551,39.935692,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","280",,,"bs",2173 +52.660483,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +52.660511,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +52.660512,0.005119,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +52.678985,40.290247,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","281",,,"bs",2179 +52.698491,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +52.698518,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +52.698519,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +52.699668,40.321766,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","282",,,"bs",2185 +52.719275,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +52.719302,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +52.719303,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +52.737137,27.701923,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","283",,,"bs",2191 +52.739990,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +52.740017,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +52.740018,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +52.764839,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +52.764866,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +52.764867,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +54.102397,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +54.102707,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +54.103010,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +54.103311,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +54.103615,0.162173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +54.103915,0.162142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +54.104217,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +54.104526,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +54.104826,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +54.105129,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +54.105436,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +54.105736,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +54.106039,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +54.106340,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +54.106648,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +54.106945,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +54.107240,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +54.107541,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +54.107836,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +54.108129,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +54.108427,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +54.108725,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +54.109019,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +54.109314,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +54.109615,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +54.109909,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +54.110205,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +54.110507,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +54.110804,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +54.111103,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +54.111399,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +54.111704,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +54.112002,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +54.112301,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +54.112606,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +54.112905,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +54.113204,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +54.113512,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +54.113676,0.025055,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +54.114130,39.584593,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","284",,,"bs",2219 +54.114830,0.101854,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +54.115056,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +54.115287,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +54.115521,0.180862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +54.115758,0.178269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +54.115993,0.182621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +54.116228,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +54.116471,0.190077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +54.116710,0.221148,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +54.116933,0.199805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +54.117134,0.204221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +54.117339,0.208381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +54.117549,0.206109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +54.117756,0.213693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +54.117971,0.207645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +54.118180,0.205565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +54.118387,0.211133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +54.118599,0.178462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +54.118779,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +54.118945,0.170654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +54.119117,0.195741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +54.119314,0.199517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +54.119515,0.204093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +54.119720,0.207069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +54.119928,0.204541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +54.120134,0.199453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +54.120335,0.194654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +54.120530,0.192957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +54.120725,0.198717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +54.120924,0.197789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +54.121123,0.204733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +54.121329,0.202941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +54.121534,0.200797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +54.121736,0.176829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +54.121914,0.167197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +54.122082,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +54.122246,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +54.122411,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +54.122575,0.087807,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +54.122992,0.041599,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +54.123098,0.165662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +54.123265,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +54.123431,0.166654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +54.123599,0.172893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +54.123773,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +54.123937,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +54.124102,0.189437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +54.124292,0.208957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +54.124503,0.195965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +54.124700,0.205725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +54.124907,0.197949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +54.125106,0.192925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +54.125300,0.197181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +54.125499,0.206493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +54.125706,0.197597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +54.125905,0.191933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +54.126098,0.195390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +54.126295,0.201437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +54.126498,0.193470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +54.126693,0.169437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +54.126863,0.197117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +54.127062,0.199197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +54.127262,0.202269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +54.127466,0.199677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +54.127667,0.203325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +54.127872,0.197789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +54.128071,0.199229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +54.128272,0.192605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +54.128466,0.202109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +54.128669,0.205885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +54.128876,0.194685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +54.129072,0.179613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +54.129253,0.180222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +54.129434,0.188797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +54.129624,0.193885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +54.129819,0.181789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +54.130002,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +54.130192,0.167582,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +54.130839,0.161853,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +54.131003,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +54.131189,0.183294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +54.131374,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +54.131561,0.196957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +54.131759,0.185245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +54.131945,0.189021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +54.132136,0.181502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +54.132318,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +54.132503,0.183869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +54.132688,0.180157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +54.132869,0.186910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +54.133058,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +54.133250,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +54.133437,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +54.133619,0.181693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +54.133802,0.180542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +54.133859,39.743983,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","285",,,"bs",2225 +54.133984,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +54.134167,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +54.134349,0.184670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +54.134535,0.185469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +54.134721,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +54.134906,0.177629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +54.135085,0.180126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +54.135266,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +54.135448,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +54.135633,0.176958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +54.135812,0.179070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +54.135992,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +54.136175,0.184829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +54.136361,0.184126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +54.136547,0.191837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +54.136740,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +54.136925,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +54.137108,0.180093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +54.137289,0.185278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +54.137476,0.179869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +54.137657,0.178813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +54.137837,0.051488,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +54.138157,0.097023,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +54.138266,0.187389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +54.138455,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +54.138638,0.180606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +54.138820,0.187133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +54.139008,0.191613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +54.139201,0.180029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +54.139382,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +54.139569,0.185566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +54.139756,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +54.139941,0.184701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +54.140127,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +54.140311,0.173182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +54.140486,0.172061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +54.140659,0.187965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +54.140848,0.182590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +54.141032,0.182941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +54.141216,0.177757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +54.141395,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +54.141580,0.183326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +54.141765,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +54.141951,0.183741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +54.142136,0.177533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +54.142315,0.174910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +54.142491,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +54.142672,0.182269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +54.142856,0.175038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +54.143032,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +54.143212,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +54.143395,0.182910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +54.143579,0.192861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +54.143774,0.190077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +54.143965,0.188285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +54.144154,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +54.144345,0.187805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +54.144534,0.189406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +54.144724,0.194333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +54.144920,0.187069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +54.145108,0.125374,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +54.145585,0.021119,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +54.145684,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +54.145848,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +54.146012,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +54.146177,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +54.146341,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +54.146505,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +54.146669,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +54.146834,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +54.146998,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +54.147162,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +54.147326,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +54.147490,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +54.147655,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +54.147819,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +54.147984,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +54.148149,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +54.148313,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +54.148478,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +54.148642,0.171709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +54.148815,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +54.148979,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +54.149144,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +54.149308,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +54.149472,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +54.149636,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +54.149801,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +54.149965,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +54.150130,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +54.150294,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +54.150459,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +54.150624,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +54.150788,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +54.150953,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +54.151117,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +54.151281,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +54.151446,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +54.151611,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +54.151775,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +54.151939,0.004960,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +54.152354,0.122654,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +54.152478,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +54.152642,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +54.152806,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +54.152971,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +54.153135,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +54.153299,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +54.153464,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +54.153628,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +54.153742,40.014891,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","286",,,"bs",2231 +54.153792,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +54.153956,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +54.154121,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +54.154285,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +54.154449,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +54.154614,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +54.154778,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +54.154942,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +54.155107,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +54.155271,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +54.155435,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +54.155599,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +54.155763,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +54.155928,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +54.156092,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +54.156256,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +54.156420,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +54.156585,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +54.156749,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +54.156913,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +54.157078,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +54.157242,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +54.157406,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +54.157571,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +54.157735,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +54.157900,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +54.158064,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +54.158229,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +54.158393,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +54.158557,0.065759,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +54.158994,0.061727,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +54.159090,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +54.159254,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +54.159419,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +54.159583,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +54.159748,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +54.159912,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +54.160076,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +54.160241,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +54.160405,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +54.160569,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +54.160733,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +54.160897,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +54.161062,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +54.161226,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +54.161390,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +54.161554,0.166014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +54.161722,0.169213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +54.161892,0.166462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +54.162060,0.166365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +54.162227,0.166302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +54.162395,0.165405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +54.162561,0.165726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +54.162728,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +54.162893,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +54.163059,0.167421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +54.163228,0.165630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +54.163395,0.166429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +54.163562,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +54.163728,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +54.163894,0.165310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +54.164060,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +54.164226,0.164765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +54.164392,0.165598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +54.164559,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +54.164723,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +54.164888,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +54.165052,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +54.165217,0.126526,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +54.165849,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +54.166014,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +54.166178,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +54.166343,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +54.166506,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +54.166671,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +54.166836,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +54.166999,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +54.167163,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +54.167328,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +54.167493,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +54.167657,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +54.167821,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +54.167985,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +54.168150,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +54.168314,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +54.168479,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +54.168643,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +54.168807,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +54.168971,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +54.169135,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +54.169299,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +54.169464,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +54.169628,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +54.169793,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +54.169957,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +54.170121,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +54.170286,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +54.170450,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +54.170614,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +54.170779,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +54.170943,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +54.171107,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +54.171271,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +54.171436,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +54.171600,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +54.171765,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +54.171929,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +54.172093,0.025056,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +54.172400,0.102430,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +54.172504,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +54.172668,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +54.172832,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +54.172997,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +54.173161,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +54.173326,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +54.173490,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +54.173654,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +54.173819,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +54.173983,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +54.174147,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +54.174311,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +54.174475,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +54.174640,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +54.174805,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +54.174969,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +54.175134,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +54.175297,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +54.175462,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +54.175626,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +54.175790,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +54.175954,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +54.176119,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +54.176283,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +54.176447,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +54.176612,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +54.176776,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +54.176941,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +54.177105,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +54.177269,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +54.177433,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +54.177598,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +54.177762,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +54.177927,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +54.178091,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +54.178256,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +54.178420,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +54.178585,0.086239,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +54.178910,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +54.178944,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +54.178945,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +54.179081,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +54.179112,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +54.179114,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +54.192822,39.592945,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","287",,,"bs",2237 +54.193761,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +54.193791,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +54.193792,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +54.212737,40.099593,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","288",,,"bs",2243 +54.232417,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +54.232448,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +54.232449,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +54.233051,40.283750,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","289",,,"bs",2249 +54.252838,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +54.252868,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +54.252869,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +54.271338,39.817582,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","290",,,"bs",2255 +54.273337,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +54.273367,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +54.273368,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +54.291672,40.482788,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","291",,,"bs",2261 +54.311186,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +54.311222,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +54.311223,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +54.312379,40.468900,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","292",,,"bs",2267 +54.332156,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +54.332186,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +54.332187,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +54.349891,27.720611,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","293",,,"bs",2273 +54.352845,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +54.352874,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +54.352875,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +54.377610,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +54.377640,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +54.377641,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +55.814821,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +55.814985,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +55.815149,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +55.815312,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +55.815476,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +55.815640,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +55.815803,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +55.815967,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +55.816131,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +55.816295,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +55.816459,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +55.816623,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +55.816787,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +55.816951,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +55.817115,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +55.817279,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +55.817443,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +55.817606,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +55.817770,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +55.817935,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +55.818099,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +55.818263,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +55.818427,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +55.818591,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +55.818755,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +55.818919,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +55.819083,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +55.819248,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +55.819413,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +55.819577,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +55.819740,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +55.819905,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +55.820069,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +55.820233,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +55.820398,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +55.820562,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +55.820726,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +55.820890,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +55.821055,0.024991,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +55.821293,39.584625,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","294",,,"bs",2301 +55.821561,0.102942,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +55.821678,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +55.821843,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +55.822007,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +55.822172,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +55.822338,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +55.822503,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +55.822667,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +55.822831,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +55.822995,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +55.823160,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +55.823325,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +55.823490,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +55.823655,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +55.823821,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +55.823986,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +55.824150,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +55.824314,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +55.824479,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +55.824643,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +55.824807,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +55.824972,0.188093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +55.825162,0.202589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +55.825366,0.207645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +55.825575,0.208605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +55.825784,0.212189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +55.825998,0.203517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +55.826203,0.197213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +55.826401,0.195773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +55.826598,0.205629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +55.826805,0.202653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +55.827009,0.202237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +55.827213,0.209725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +55.827423,0.202781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +55.827627,0.208253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +55.827837,0.202333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +55.828040,0.167326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +55.828209,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +55.828374,0.087167,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +55.829042,0.050816,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +55.829158,0.211164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +55.829371,0.196989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +55.829569,0.208221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +55.829778,0.197341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +55.829977,0.203453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +55.830182,0.202781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +55.830386,0.204829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +55.830592,0.219581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +55.830812,0.210045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +55.831024,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +55.831214,0.167421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +55.831382,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +55.831547,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +55.831711,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +55.831878,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +55.832044,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +55.832208,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +55.832373,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +55.832537,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +55.832701,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +55.832867,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +55.833032,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +55.833197,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +55.833361,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +55.833526,0.181598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +55.833709,0.201853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +55.833912,0.192381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +55.834105,0.200573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +55.834307,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +55.834497,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +55.834692,0.199613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +55.834893,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +55.835084,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +55.835276,0.190749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +55.835468,0.191390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +55.835660,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +55.835833,0.196317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +55.836030,0.178173,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +55.836604,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +55.836787,0.199453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +55.836988,0.196061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +55.837185,0.194717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +55.837381,0.197693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +55.837580,0.199325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +55.837781,0.197501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +55.837979,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +55.838167,0.194845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +55.838363,0.183998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +55.838548,0.188542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +55.838738,0.187453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +55.838926,0.186429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +55.839114,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +55.839303,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +55.839488,0.187102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +55.839677,0.191677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +55.839870,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +55.840052,0.183613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +55.840237,0.183806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +55.840422,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +55.840610,0.188925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +55.840800,0.189853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +55.840991,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +55.841020,39.732847,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","295",,,"bs",2307 +55.841177,0.182686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +55.841361,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +55.841542,0.181885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +55.841725,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +55.841906,0.181950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +55.842089,0.178589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +55.842269,0.182077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +55.842452,0.177470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +55.842631,0.177405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +55.842809,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +55.842990,0.181662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +55.843173,0.175838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +55.843350,0.178557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +55.843530,0.182909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +55.843714,0.049920,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +55.844034,0.092286,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +55.844139,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +55.844321,0.183870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +55.844506,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +55.844689,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +55.844872,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +55.845056,0.185758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +55.845243,0.189245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +55.845433,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +55.845623,0.194877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +55.845819,0.185117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +55.846005,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +55.846189,0.187678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +55.846378,0.188157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +55.846568,0.185245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +55.846754,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +55.846938,0.181726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +55.847121,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +55.847304,0.185245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +55.847490,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +55.847679,0.182270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +55.847863,0.186493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +55.848050,0.184733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +55.848236,0.186397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +55.848424,0.177821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +55.848603,0.187166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +55.848791,0.178749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +55.848971,0.178493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +55.849150,0.184062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +55.849336,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +55.849517,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +55.849681,0.183518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +55.849865,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +55.850043,0.177149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +55.850221,0.174238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +55.850396,0.177213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +55.850575,0.177757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +55.850754,0.180894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +55.850936,0.116830,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +55.851278,0.022463,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +55.851378,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +55.851559,0.179710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +55.851740,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +55.851922,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +55.852105,0.183549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +55.852290,0.184510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +55.852476,0.199197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +55.852676,0.193181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +55.852871,0.194461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +55.853066,0.192317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +55.853260,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +55.853455,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +55.853655,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +55.853845,0.192893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +55.854039,0.194909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +55.854235,0.195614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +55.854432,0.201789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +55.854635,0.183742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +55.854819,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +55.854984,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +55.855148,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +55.855313,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +55.855477,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +55.855642,0.171550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +55.855814,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +55.855979,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +55.856143,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +55.856307,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +55.856472,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +55.856636,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +55.856800,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +55.856964,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +55.857128,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +55.857293,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +55.857457,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +55.857621,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +55.857786,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +55.857951,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +55.858116,0.004799,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +55.858368,0.122782,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +55.858492,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +55.858656,0.171646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +55.858829,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +55.858993,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +55.859157,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +55.859321,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +55.859486,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +55.859650,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +55.859813,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +55.859978,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +55.860142,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +55.860307,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +55.860471,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +55.860635,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +55.860800,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +55.860926,40.040490,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","296",,,"bs",2313 +55.860964,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +55.861128,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +55.861293,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +55.861456,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +55.861621,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +55.861785,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +55.861949,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +55.862114,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +55.862278,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +55.862443,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +55.862608,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +55.862772,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +55.862937,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +55.863101,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +55.863266,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +55.863431,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +55.863595,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +55.863759,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +55.863923,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +55.864088,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +55.864252,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +55.864416,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +55.864581,0.065919,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +55.864842,0.061887,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +55.864935,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +55.865100,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +55.865264,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +55.865428,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +55.865592,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +55.865757,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +55.865922,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +55.866085,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +55.866250,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +55.866414,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +55.866579,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +55.866743,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +55.866907,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +55.867072,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +55.867236,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +55.867400,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +55.867565,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +55.867729,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +55.867894,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +55.868058,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +55.868223,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +55.868386,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +55.868551,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +55.868716,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +55.868880,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +55.869044,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +55.869209,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +55.869373,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +55.869537,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +55.869702,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +55.869866,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +55.870030,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +55.870194,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +55.870359,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +55.870524,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +55.870688,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +55.870852,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +55.871018,0.128702,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +55.871399,0.165950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +55.871566,0.168349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +55.871735,0.165054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +55.871902,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +55.872068,0.166238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +55.872235,0.167037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +55.872403,0.165950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +55.872570,0.165949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +55.872737,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +55.872905,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +55.873072,0.165086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +55.873238,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +55.873404,0.165310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +55.873571,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +55.873736,0.165854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +55.873903,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +55.874068,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +55.874233,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +55.874397,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +55.874562,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +55.874727,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +55.874891,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +55.875055,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +55.875220,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +55.875384,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +55.875548,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +55.875713,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +55.875877,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +55.876041,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +55.876205,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +55.876370,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +55.876535,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +55.876699,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +55.876863,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +55.877027,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +55.877192,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +55.877357,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +55.877521,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +55.877686,0.025055,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +55.878132,0.102142,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +55.878242,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +55.878407,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +55.878571,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +55.878735,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +55.878900,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +55.879065,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +55.879229,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +55.879393,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +55.879558,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +55.879722,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +55.879886,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +55.880050,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +55.880214,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +55.880379,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +55.880544,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +55.880708,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +55.880872,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +55.881037,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +55.881201,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +55.881366,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +55.881530,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +55.881694,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +55.881858,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +55.882023,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +55.882187,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +55.882351,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +55.882515,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +55.882679,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +55.882844,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +55.883008,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +55.883173,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +55.883337,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +55.883501,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +55.883666,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +55.883831,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +55.883995,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +55.884159,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +55.884323,0.085599,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +55.884636,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +55.884671,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +55.884672,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +55.884836,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +55.884869,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +55.884870,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +55.899966,39.639473,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","297",,,"bs",2319 +55.900986,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +55.901019,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +55.901020,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +55.919878,40.078314,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","298",,,"bs",2325 +55.939614,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +55.939645,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +55.939647,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +55.940309,40.111274,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","299",,,"bs",2331 +55.959956,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +55.959986,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +55.959987,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +55.978518,39.996331,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","300",,,"bs",2337 +55.980426,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +55.980456,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +55.980458,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +55.998719,40.555842,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","301",,,"bs",2343 +56.018519,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +56.018550,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +56.018551,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +56.019713,40.244488,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","302",,,"bs",2349 +56.039282,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +56.039312,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +56.039313,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +56.057066,27.744450,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","303",,,"bs",2355 +56.059957,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +56.059987,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +56.059988,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +56.084809,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +56.084839,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +56.084840,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", +57.454678,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +57.454842,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +57.455006,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +57.455170,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +57.455333,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +57.455497,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +57.455661,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +57.455825,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +57.455989,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +57.456152,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +57.456316,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +57.456480,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +57.456644,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +57.456808,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +57.456972,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +57.457136,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +57.457300,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +57.457464,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +57.457628,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +57.457793,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +57.457957,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +57.458121,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +57.458285,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +57.458450,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +57.458614,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +57.458778,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +57.458942,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +57.459106,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +57.459270,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +57.459434,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +57.459598,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +57.459762,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +57.459926,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +57.460090,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +57.460254,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +57.460418,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +57.460582,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +57.460746,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +57.460910,0.024959,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +57.461076,39.588242,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","304",,,"bs",2383 +57.461338,0.102239,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x110e8c0000","[Unified Memory Memcpy HtoD]", +57.461453,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +57.461618,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +57.461784,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +57.461948,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +57.462113,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +57.462279,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +57.462444,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +57.462609,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +57.462773,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +57.462937,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +57.463102,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +57.463266,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +57.463430,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +57.463596,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +57.463761,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +57.463924,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +57.464089,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +57.464253,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +57.464417,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +57.464582,0.171453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +57.464755,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +57.464919,0.171133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +57.465092,0.204861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +57.465298,0.207933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +57.465507,0.213085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +57.465721,0.205885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +57.465928,0.204925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +57.466135,0.196925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +57.466333,0.190909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +57.466525,0.206781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +57.466733,0.202813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +57.466937,0.210365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +57.467149,0.207677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +57.467358,0.203901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +57.467563,0.199101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +57.467763,0.203357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +57.467967,0.173982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +57.468143,0.086207,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +57.468820,0.054367,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1118180000","[Unified Memory Memcpy HtoD]", +57.468940,0.201565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +57.469143,0.202525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +57.469347,0.197597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +57.469546,0.200285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +57.469747,0.205181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +57.469954,0.194749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +57.470150,0.203101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +57.470354,0.207549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +57.470563,0.210557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +57.470775,0.207772,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +57.470984,0.203837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +57.471189,0.209789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +57.471400,0.216701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +57.471618,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +57.471783,0.165981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +57.471950,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +57.472115,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +57.472279,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +57.472443,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +57.472609,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +57.472773,0.167389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +57.472941,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +57.473106,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +57.473271,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +57.473436,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +57.473600,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +57.473765,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +57.473930,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +57.474095,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +57.474259,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +57.474425,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +57.474589,0.171613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +57.474762,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +57.474926,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +57.475091,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +57.475255,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +57.475419,0.173214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +57.475593,0.172125,,,,,,,,,,"GeForce GTX 960 (0)",,,1884160.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +57.476404,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1121a40000","[Unified Memory Memcpy HtoD]", +57.476570,0.203485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +57.476775,0.190813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +57.476967,0.190237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +57.477158,0.190238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +57.477350,0.189630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +57.477541,0.192477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +57.477735,0.173117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +57.477909,0.177629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +57.478088,0.201117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +57.478290,0.185534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +57.478477,0.195997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +57.478674,0.206269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +57.478882,0.196285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +57.479079,0.193117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +57.479274,0.199613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +57.479475,0.202525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +57.479679,0.206109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +57.479886,0.201181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +57.480088,0.200157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +57.480290,0.188893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +57.480480,0.183869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +57.480665,0.179837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +57.480803,39.732655,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","305",,,"bs",2389 +57.480846,0.184894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +57.481032,0.182589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +57.481216,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +57.481399,0.181981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +57.481582,0.184702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +57.481768,0.185085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +57.481954,0.183581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +57.482139,0.178781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +57.482319,0.177310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +57.482498,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +57.482681,0.187901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +57.482870,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +57.483052,0.189086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +57.483243,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +57.483434,0.183037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +57.483618,0.047743,,,,,,,,,,"GeForce GTX 960 (0)",,,573440.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +57.484218,0.092127,,,,,,,,,,"GeForce GTX 960 (0)",,,1048576.000000,"0x112b300000","[Unified Memory Memcpy HtoD]", +57.484327,0.184862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +57.484513,0.178461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +57.484693,0.177405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +57.484872,0.182622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +57.485056,0.180829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +57.485238,0.181309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +57.485420,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +57.485608,0.193693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +57.485803,0.184094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +57.485988,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +57.486170,0.184477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +57.486356,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +57.486541,0.186558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +57.486729,0.184093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +57.486914,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +57.487097,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +57.487283,0.183838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +57.487468,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +57.487656,0.191677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +57.487849,0.185597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +57.488036,0.184541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +57.488222,0.179134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +57.488402,0.186301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +57.488589,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +57.488777,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +57.488959,0.181566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +57.489141,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +57.489329,0.176125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +57.489506,0.189693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +57.489697,0.183422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +57.489882,0.179166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +57.490062,0.186301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +57.490250,0.183389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +57.490434,0.177918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +57.490613,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +57.490797,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +57.490982,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +57.491167,0.124094,,,,,,,,,,"GeForce GTX 960 (0)",,,1359872.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +57.491572,0.021280,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x1134bc0000","[Unified Memory Memcpy HtoD]", +57.491670,0.177693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +57.491849,0.178973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +57.492030,0.180094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +57.492211,0.179485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +57.492392,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +57.492572,0.183166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +57.492756,0.187613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +57.492945,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +57.493128,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +57.493309,0.183230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +57.493494,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +57.493677,0.184541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +57.493862,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +57.494044,0.183038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +57.494229,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +57.494414,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +57.494603,0.190525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +57.494795,0.202077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +57.494998,0.194749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +57.495194,0.195485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +57.495391,0.188957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +57.495581,0.197374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +57.495779,0.186334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +57.495967,0.191101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +57.496159,0.189213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +57.496350,0.199485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +57.496550,0.197629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +57.496749,0.177405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +57.496928,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +57.497092,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +57.497256,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +57.497421,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +57.497584,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +57.497748,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +57.497913,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +57.498077,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +57.498242,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +57.498406,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +57.498570,0.004992,,,,,,,,,,"GeForce GTX 960 (0)",,,49152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +57.499084,0.122878,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x113e480000","[Unified Memory Memcpy HtoD]", +57.499208,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +57.499372,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +57.499536,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +57.499700,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +57.499864,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +57.500029,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +57.500194,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +57.500358,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +57.500522,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +57.500686,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +57.500702,40.000331,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","306",,,"bs",2395 +57.500851,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +57.501015,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +57.501179,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +57.501344,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +57.501507,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +57.501672,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +57.501836,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +57.502000,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +57.502164,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +57.502328,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +57.502492,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +57.502656,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +57.502821,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +57.502985,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +57.503150,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +57.503314,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +57.503479,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +57.503643,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +57.503807,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +57.503971,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +57.504136,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +57.504300,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +57.504465,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +57.504630,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +57.504794,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +57.504958,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +57.505122,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +57.505286,0.065215,,,,,,,,,,"GeForce GTX 960 (0)",,,835584.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +57.505553,0.061663,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1147d40000","[Unified Memory Memcpy HtoD]", +57.505648,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1147e00000","[Unified Memory Memcpy HtoD]", +57.505813,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148000000","[Unified Memory Memcpy HtoD]", +57.505977,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148200000","[Unified Memory Memcpy HtoD]", +57.506141,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148400000","[Unified Memory Memcpy HtoD]", +57.506305,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148600000","[Unified Memory Memcpy HtoD]", +57.506469,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148800000","[Unified Memory Memcpy HtoD]", +57.506634,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148a00000","[Unified Memory Memcpy HtoD]", +57.506799,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148c00000","[Unified Memory Memcpy HtoD]", +57.506963,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1148e00000","[Unified Memory Memcpy HtoD]", +57.507127,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149000000","[Unified Memory Memcpy HtoD]", +57.507291,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149200000","[Unified Memory Memcpy HtoD]", +57.507455,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149400000","[Unified Memory Memcpy HtoD]", +57.507619,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149600000","[Unified Memory Memcpy HtoD]", +57.507784,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149800000","[Unified Memory Memcpy HtoD]", +57.507949,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149a00000","[Unified Memory Memcpy HtoD]", +57.508113,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149c00000","[Unified Memory Memcpy HtoD]", +57.508277,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1149e00000","[Unified Memory Memcpy HtoD]", +57.508441,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a000000","[Unified Memory Memcpy HtoD]", +57.508606,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a200000","[Unified Memory Memcpy HtoD]", +57.508770,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a400000","[Unified Memory Memcpy HtoD]", +57.508934,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a600000","[Unified Memory Memcpy HtoD]", +57.509099,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114a800000","[Unified Memory Memcpy HtoD]", +57.509263,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114aa00000","[Unified Memory Memcpy HtoD]", +57.509428,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ac00000","[Unified Memory Memcpy HtoD]", +57.509592,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ae00000","[Unified Memory Memcpy HtoD]", +57.509756,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b000000","[Unified Memory Memcpy HtoD]", +57.509921,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b200000","[Unified Memory Memcpy HtoD]", +57.510085,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b400000","[Unified Memory Memcpy HtoD]", +57.510249,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b600000","[Unified Memory Memcpy HtoD]", +57.510414,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114b800000","[Unified Memory Memcpy HtoD]", +57.510578,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114ba00000","[Unified Memory Memcpy HtoD]", +57.510742,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114bc00000","[Unified Memory Memcpy HtoD]", +57.510907,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114be00000","[Unified Memory Memcpy HtoD]", +57.511071,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c000000","[Unified Memory Memcpy HtoD]", +57.511235,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c200000","[Unified Memory Memcpy HtoD]", +57.511399,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c400000","[Unified Memory Memcpy HtoD]", +57.511564,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x114c600000","[Unified Memory Memcpy HtoD]", +57.511728,0.126462,,,,,,,,,,"GeForce GTX 960 (0)",,,1622016.000000,"0x114c800000","[Unified Memory Memcpy HtoD]", +57.512205,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +57.512369,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +57.512534,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +57.512698,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +57.512862,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +57.513026,0.167774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +57.513195,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +57.513363,0.167102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +57.513531,0.166845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +57.513699,0.166110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +57.513867,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +57.514034,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +57.514199,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +57.514365,0.166398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +57.514533,0.166493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +57.514701,0.166494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +57.514868,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +57.515036,0.165566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +57.515203,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +57.515369,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +57.515535,0.165085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +57.515702,0.164958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +57.515868,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +57.516033,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +57.516198,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +57.516362,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +57.516526,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +57.516691,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +57.516855,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +57.517019,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +57.517183,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155200000","[Unified Memory Memcpy HtoD]", +57.517347,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155400000","[Unified Memory Memcpy HtoD]", +57.517511,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155600000","[Unified Memory Memcpy HtoD]", +57.517675,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155800000","[Unified Memory Memcpy HtoD]", +57.517839,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155a00000","[Unified Memory Memcpy HtoD]", +57.518003,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155c00000","[Unified Memory Memcpy HtoD]", +57.518167,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1155e00000","[Unified Memory Memcpy HtoD]", +57.518332,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1156000000","[Unified Memory Memcpy HtoD]", +57.518496,0.024991,,,,,,,,,,"GeForce GTX 960 (0)",,,311296.000000,"0x1156200000","[Unified Memory Memcpy HtoD]", +57.518984,0.102687,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x115aec0000","[Unified Memory Memcpy HtoD]", +57.519088,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b000000","[Unified Memory Memcpy HtoD]", +57.519253,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b200000","[Unified Memory Memcpy HtoD]", +57.519417,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b400000","[Unified Memory Memcpy HtoD]", +57.519581,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b600000","[Unified Memory Memcpy HtoD]", +57.519746,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115b800000","[Unified Memory Memcpy HtoD]", +57.519910,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ba00000","[Unified Memory Memcpy HtoD]", +57.520074,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115bc00000","[Unified Memory Memcpy HtoD]", +57.520238,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115be00000","[Unified Memory Memcpy HtoD]", +57.520402,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c000000","[Unified Memory Memcpy HtoD]", +57.520567,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c200000","[Unified Memory Memcpy HtoD]", +57.520731,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c400000","[Unified Memory Memcpy HtoD]", +57.520895,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c600000","[Unified Memory Memcpy HtoD]", +57.521060,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115c800000","[Unified Memory Memcpy HtoD]", +57.521224,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ca00000","[Unified Memory Memcpy HtoD]", +57.521388,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115cc00000","[Unified Memory Memcpy HtoD]", +57.521552,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ce00000","[Unified Memory Memcpy HtoD]", +57.521716,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d000000","[Unified Memory Memcpy HtoD]", +57.521880,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d200000","[Unified Memory Memcpy HtoD]", +57.522044,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d400000","[Unified Memory Memcpy HtoD]", +57.522209,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d600000","[Unified Memory Memcpy HtoD]", +57.522373,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115d800000","[Unified Memory Memcpy HtoD]", +57.522537,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115da00000","[Unified Memory Memcpy HtoD]", +57.522701,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115dc00000","[Unified Memory Memcpy HtoD]", +57.522866,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115de00000","[Unified Memory Memcpy HtoD]", +57.523030,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e000000","[Unified Memory Memcpy HtoD]", +57.523194,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e200000","[Unified Memory Memcpy HtoD]", +57.523358,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e400000","[Unified Memory Memcpy HtoD]", +57.523522,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e600000","[Unified Memory Memcpy HtoD]", +57.523686,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115e800000","[Unified Memory Memcpy HtoD]", +57.523850,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ea00000","[Unified Memory Memcpy HtoD]", +57.524015,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ec00000","[Unified Memory Memcpy HtoD]", +57.524179,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115ee00000","[Unified Memory Memcpy HtoD]", +57.524344,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f000000","[Unified Memory Memcpy HtoD]", +57.524509,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f200000","[Unified Memory Memcpy HtoD]", +57.524673,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f400000","[Unified Memory Memcpy HtoD]", +57.524838,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f600000","[Unified Memory Memcpy HtoD]", +57.525002,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x115f800000","[Unified Memory Memcpy HtoD]", +57.525166,0.085791,,,,,,,,,,"GeForce GTX 960 (0)",,,1097728.000000,"0x115fa00000","[Unified Memory Memcpy HtoD]", +57.525440,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1109c60000","[Unified Memory CPU page faults]", +57.525474,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1109c60000","[Unified Memory Memcpy DtoH]", +57.525475,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1109c61000","[Unified Memory Memcpy DtoH]", +57.525602,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1113520000","[Unified Memory CPU page faults]", +57.525633,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1113520000","[Unified Memory Memcpy DtoH]", +57.525635,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1113521000","[Unified Memory Memcpy DtoH]", +57.539772,39.690768,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","307",,,"bs",2401 +57.540711,,,,,,,,,,,,,,"PC 0xd4532a8e","0x111cde0000","[Unified Memory CPU page faults]", +57.540741,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x111cde0000","[Unified Memory Memcpy DtoH]", +57.540743,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x111cde1000","[Unified Memory Memcpy DtoH]", +57.559713,40.096809,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","308",,,"bs",2407 +57.579468,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11266a0000","[Unified Memory CPU page faults]", +57.579499,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11266a0000","[Unified Memory Memcpy DtoH]", +57.579500,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11266a1000","[Unified Memory Memcpy DtoH]", +57.580044,40.149673,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","309",,,"bs",2413 +57.599810,,,,,,,,,,,,,,"PC 0xd4532a8e","0x112ff60000","[Unified Memory CPU page faults]", +57.599840,0.001376,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x112ff60000","[Unified Memory Memcpy DtoH]", +57.599841,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x112ff61000","[Unified Memory Memcpy DtoH]", +57.618278,39.927852,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","310",,,"bs",2419 +57.620194,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1139820000","[Unified Memory CPU page faults]", +57.620224,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1139820000","[Unified Memory Memcpy DtoH]", +57.620225,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1139821000","[Unified Memory Memcpy DtoH]", +57.638594,40.321350,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","311",,,"bs",2425 +57.658211,,,,,,,,,,,,,,"PC 0xd4532a8e","0x11430e0000","[Unified Memory CPU page faults]", +57.658241,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11430e0000","[Unified Memory Memcpy DtoH]", +57.658243,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11430e1000","[Unified Memory Memcpy DtoH]", +57.659408,40.325446,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","312",,,"bs",2431 +57.678916,,,,,,,,,,,,,,"PC 0xd4532a8e","0x114c9a0000","[Unified Memory CPU page faults]", +57.678945,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x114c9a0000","[Unified Memory Memcpy DtoH]", +57.678946,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x114c9a1000","[Unified Memory Memcpy DtoH]", +57.696818,31.040049,64,1,1,256,1,1,38,0,0,"GeForce GTX 960 (0)","1","313",,,"bs",2437 +57.699733,,,,,,,,,,,,,,"PC 0xd4532a8e","0x1156260000","[Unified Memory CPU page faults]", +57.699763,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1156260000","[Unified Memory Memcpy DtoH]", +57.699764,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1156261000","[Unified Memory Memcpy DtoH]", +57.727859,,,,,,,,,,,,,,"PC 0xd4532a8e","0x115fb20000","[Unified Memory CPU page faults]", +57.727889,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x115fb20000","[Unified Memory Memcpy DtoH]", +57.727890,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x115fb21000","[Unified Memory Memcpy DtoH]", diff --git a/data/nvprof_log/2020_07_20/b6_1989.csv b/data/nvprof_log/2020_07_20/b6_1989.csv new file mode 100644 index 00000000..434731e0 --- /dev/null +++ b/data/nvprof_log/2020_07_20/b6_1989.csv @@ -0,0 +1,1355 @@ +==1989== NVPROF is profiling process 1989, command: java -classpath /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -XX:MaxHeapSize=24G com.oracle.g +==1989== Profiling application: java -classpath /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -XX:MaxHeapSize=24G com.oracle.g +==1989== Profiling result: +"Start","Duration","Grid X","Grid Y","Grid Z","Block X","Block Y","Block Z","Registers Per Thread","Static SMem","Dynamic SMem","Device","Context","Stream","Unified Memory","Virtual Address","Name","Correlation_ID" +s,ms,,,,,,,,B,B,,,,B,,, +52.829590,0.106720,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +52.829717,0.167136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +52.829885,0.164800,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +52.830051,0.164384,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +52.830217,0.165632,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +52.830384,0.169760,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +52.830555,0.169440,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +52.830726,0.170368,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +52.830897,0.175136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +52.831074,0.173472,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +52.831249,0.167584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +52.831418,0.164736,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +52.831584,0.172480,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +52.831757,0.164064,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +52.831923,0.163680,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +52.832088,0.104736,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +52.832193,0.051840,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +52.832247,0.164224,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +52.832412,0.165824,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +52.832579,0.163456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +52.832744,0.196672,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +52.832942,0.203904,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +52.833147,0.205120,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +52.833354,0.201184,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +52.833556,0.206592,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +52.833764,0.199168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +52.833965,0.192640,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +52.834158,0.194496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +52.834354,0.205440,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +52.834555,933.951292,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","14",,,"rr_1",4 +52.834561,0.209600,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +52.834772,0.204640,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +52.834978,0.196096,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +52.835794,787.867257,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","15",,,"nb_1",10 +53.623808,1.272493,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","15",,,"nb_2",19 +53.625207,1.485962,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","15",,,"nb_3",23 +53.626697,2.854389,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","15",,,"nb_4",30 +53.629554,4.239777,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","15",,,"softmax",33 +53.768646,436.369254,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","14",,,"rr_2",15 +54.205154,1.924323,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","14",,,"rr_3",27 +54.207081,2.658168,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","14",,,"softmax",36 +54.209743,2.239711,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","15",,,"argmax",42 +54.212746,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +54.213574,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +54.213575,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +54.949629,914.571581,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","16",,,"rr_1",60 +54.950459,0.101758,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +54.950778,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +54.951086,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +54.951392,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +54.951703,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +54.952008,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +54.952310,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +54.952616,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +54.952911,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +54.953208,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +54.953503,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +54.953808,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +54.954102,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +54.954400,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +54.954701,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +54.954897,0.103998,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +54.955242,764.215288,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","17",,,"nb_1",66 +55.719620,1.277037,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","17",,,"nb_2",75 +55.721027,1.487658,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","17",,,"nb_3",79 +55.722518,2.846102,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","17",,,"nb_4",86 +55.725367,4.244384,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","17",,,"softmax",89 +55.729784,0.051583,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +55.729894,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +55.730059,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +55.730223,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +55.730387,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +55.730552,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +55.730717,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +55.730881,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +55.731045,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +55.731211,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +55.731376,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +55.731540,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +55.731706,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +55.731871,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +55.732036,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +55.732200,0.154430,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +55.864344,437.112379,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","16",,,"rr_2",71 +56.301616,1.919108,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","16",,,"rr_3",83 +56.303539,2.679128,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","16",,,"softmax",92 +56.306222,2.242622,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","17",,,"argmax",98 +56.308722,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +56.308739,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +56.308740,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +56.760388,911.316237,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","18",,,"rr_1",116 +56.760688,0.101854,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +56.760795,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +56.760959,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +56.761123,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +56.761287,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +56.761451,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +56.761614,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +56.761777,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +56.761941,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +56.762105,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +56.762268,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +56.762432,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +56.762596,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +56.762760,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +56.762924,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +56.763088,0.103455,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +56.763226,763.909822,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","19",,,"nb_1",122 +57.527295,1.278477,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","19",,,"nb_2",131 +57.528701,1.494634,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","19",,,"nb_3",135 +57.530199,2.849974,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","19",,,"nb_4",142 +57.533053,4.238913,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","19",,,"softmax",145 +57.537466,0.051647,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +57.537574,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +57.537739,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +57.537904,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +57.538069,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +57.538233,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +57.538398,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +57.538563,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +57.538727,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +57.538892,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +57.539057,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +57.539221,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +57.539387,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +57.539551,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +57.539716,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +57.539880,0.154846,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +57.671859,435.998315,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","18",,,"rr_2",127 +58.108018,1.922724,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","18",,,"rr_3",139 +58.109943,2.671608,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","18",,,"softmax",148 +58.112618,2.255679,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","19",,,"argmax",154 +58.115104,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +58.115122,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +58.115123,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +58.462523,912.558057,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","20",,,"rr_1",172 +58.462790,0.102238,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +58.462902,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +58.463066,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +58.463230,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +58.463394,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +58.463558,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +58.463722,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +58.463886,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +58.464049,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +58.464213,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +58.464377,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +58.464541,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +58.464704,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +58.464867,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +58.465031,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +58.465195,0.103774,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +58.465506,764.218885,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","21",,,"nb_1",178 +59.229859,1.268877,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","21",,,"nb_2",187 +59.231256,1.486154,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","21",,,"nb_3",191 +59.232746,2.842006,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","21",,,"nb_4",198 +59.235591,4.237377,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","21",,,"softmax",201 +59.239999,0.051583,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +59.240109,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +59.240273,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +59.240438,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +59.240602,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +59.240767,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +59.240931,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +59.241096,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +59.241260,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +59.241425,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +59.241589,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +59.241754,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +59.241919,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +59.242084,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +59.242249,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +59.242414,0.155102,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +59.375238,436.314797,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","20",,,"rr_2",183 +59.811680,1.920324,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","20",,,"rr_3",195 +59.813603,2.663608,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","20",,,"softmax",204 +59.816270,2.251071,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","21",,,"argmax",210 +59.818783,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +59.818830,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +59.818832,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +60.142812,911.869716,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","22",,,"rr_1",228 +60.143096,0.101855,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +60.143214,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +60.143378,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +60.143542,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +60.143706,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +60.143870,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +60.144034,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +60.144197,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +60.144361,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +60.144525,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +60.144689,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +60.144853,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +60.145017,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +60.145180,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +60.145345,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +60.145508,0.103743,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +60.145762,764.500097,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","23",,,"nb_1",234 +60.910426,1.266765,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","23",,,"nb_2",243 +60.911823,1.482537,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","23",,,"nb_3",247 +60.913309,2.859798,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","23",,,"nb_4",254 +60.916172,4.213121,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","23",,,"softmax",257 +60.920614,0.051743,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +60.920720,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +60.920885,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +60.921050,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +60.921215,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +60.921379,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +60.921544,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +60.921709,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +60.921873,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +60.922038,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +60.922203,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +60.922368,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +60.922533,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +60.922699,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +60.922864,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +60.923029,0.154846,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +61.054822,436.842949,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","22",,,"rr_2",239 +61.491813,1.918916,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","22",,,"rr_3",251 +61.493734,2.694808,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","22",,,"softmax",260 +61.496433,2.242047,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","23",,,"argmax",266 +61.498900,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +61.498919,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +61.498920,0.005119,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +61.877507,911.510872,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","24",,,"rr_1",284 +61.877788,0.103423,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +61.877905,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +61.878069,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +61.878233,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +61.878397,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +61.878561,0.164669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +61.878727,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +61.878891,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +61.879055,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +61.879220,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +61.879384,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +61.879547,0.166782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +61.879715,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +61.879881,0.165694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +61.880048,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +61.880213,0.105727,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +61.880383,762.952664,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","25",,,"nb_1",290 +62.643449,1.280685,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","25",,,"nb_2",299 +62.644800,1.485290,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","25",,,"nb_3",303 +62.646288,2.840150,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","25",,,"nb_4",310 +62.649132,4.224129,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","25",,,"softmax",313 +62.653469,0.051648,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +62.653582,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +62.653747,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +62.653912,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +62.654076,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +62.654241,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +62.654405,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +62.654570,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +62.654735,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +62.654899,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +62.655064,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +62.655228,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +62.655393,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +62.655558,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +62.655724,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +62.655888,0.154750,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +62.789108,435.861780,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","24",,,"rr_2",295 +63.225055,1.911971,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","24",,,"rr_3",307 +63.226970,2.666713,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","24",,,"softmax",316 +63.229641,2.262558,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","25",,,"argmax",322 +63.232102,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +63.232122,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +63.232123,0.005280,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +63.525563,911.311115,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","26",,,"rr_1",340 +63.525854,0.111070,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +63.525980,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +63.526144,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +63.526308,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +63.526471,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +63.526635,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +63.526798,0.171069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +63.526971,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +63.527134,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +63.527298,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +63.527462,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +63.527625,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +63.527789,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +63.527953,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +63.528117,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +63.528281,0.103678,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +63.528436,763.495549,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","27",,,"nb_1",346 +64.292052,1.259086,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","27",,,"nb_2",355 +64.293387,1.488425,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","27",,,"nb_3",359 +64.294879,2.840310,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","27",,,"nb_4",366 +64.297723,4.226785,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","27",,,"softmax",369 +64.302065,0.051615,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +64.302168,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +64.302333,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +64.302497,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +64.302662,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +64.302826,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +64.302991,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +64.303155,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +64.303320,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +64.303484,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +64.303649,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +64.303814,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +64.303979,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +64.304143,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +64.304308,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +64.304474,0.154942,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +64.437004,435.665246,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","26",,,"rr_2",351 +64.872751,1.913828,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","26",,,"rr_3",363 +64.874669,2.687640,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","26",,,"softmax",372 +64.877360,2.244190,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","27",,,"argmax",378 +64.879776,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +64.879795,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +64.879797,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +65.223570,910.474680,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","28",,,"rr_1",396 +65.223835,0.101983,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +65.223952,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +65.224116,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +65.224280,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +65.224443,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +65.224608,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +65.224772,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +65.224938,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +65.225101,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +65.225265,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +65.225429,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +65.225593,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +65.225757,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +65.225921,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +65.226086,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +65.226250,0.103614,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +65.226513,762.837382,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","29",,,"nb_1",402 +65.989493,1.269261,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","29",,,"nb_2",411 +65.990887,1.482506,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","29",,,"nb_3",415 +65.992373,2.837878,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","29",,,"nb_4",422 +65.995215,4.219266,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","29",,,"softmax",425 +65.999604,0.051679,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +65.999714,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +65.999879,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +66.000043,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +66.000207,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +66.000372,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +66.000536,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +66.000701,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +66.000886,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +66.001051,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +66.001215,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +66.001380,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +66.001566,0.172093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +66.001739,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +66.001904,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +66.002069,0.154878,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +66.134146,436.241334,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","28",,,"rr_2",407 +66.570527,1.914979,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","28",,,"rr_3",419 +66.572446,2.669273,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","28",,,"softmax",428 +66.575119,2.245278,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","29",,,"argmax",434 +66.577554,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +66.577575,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +66.577577,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +66.904836,911.693637,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","30",,,"rr_1",452 +66.905116,0.102142,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +66.905230,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +66.905394,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +66.905557,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +66.905721,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +66.905885,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +66.906049,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +66.906213,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +66.906376,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +66.906541,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +66.906704,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +66.906868,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +66.907032,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +66.907196,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +66.907360,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +66.907524,0.103711,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +66.907663,765.629725,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","31",,,"nb_1",458 +67.673429,1.258702,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","31",,,"nb_2",467 +67.674817,1.486282,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","31",,,"nb_3",471 +67.676306,2.819126,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","31",,,"nb_4",478 +67.679129,4.238913,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","31",,,"softmax",481 +67.683533,0.051711,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +67.683641,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +67.683806,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +67.683970,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +67.684135,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +67.684300,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +67.684464,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +67.684629,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +67.684794,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +67.684959,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +67.685124,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +67.685288,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +67.685453,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +67.685618,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +67.685783,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +67.685948,0.154846,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +67.816648,435.996089,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","30",,,"rr_2",463 +68.252756,1.906052,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","30",,,"rr_3",475 +68.254665,2.665880,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","30",,,"softmax",484 +68.257335,2.248767,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","31",,,"argmax",490 +68.259733,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +68.259756,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +68.259757,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +68.585887,911.093156,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","32",,,"rr_1",508 +68.586157,0.101983,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +68.586267,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +68.586431,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +68.586595,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +68.586758,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +68.586922,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +68.587085,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +68.587249,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +68.587413,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +68.587577,0.162270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +68.587740,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +68.587905,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +68.588069,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +68.588233,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +68.588397,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +68.588561,0.103839,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +68.588725,763.865417,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","33",,,"nb_1",514 +69.352744,1.262093,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","33",,,"nb_2",523 +69.354134,1.479722,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","33",,,"nb_3",527 +69.355617,2.829558,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","33",,,"nb_4",534 +69.358450,4.250113,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","33",,,"softmax",537 +69.362871,0.051711,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +69.362980,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +69.363145,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +69.363309,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +69.363474,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +69.363638,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +69.363803,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +69.363968,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +69.364132,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +69.364297,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +69.364462,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +69.364626,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +69.364791,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +69.364955,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +69.365120,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +69.365285,0.154750,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +69.497159,435.324461,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","32",,,"rr_2",519 +69.932646,1.918148,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","32",,,"rr_3",531 +69.934568,2.655896,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","32",,,"softmax",540 +69.937228,2.242975,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","33",,,"argmax",546 +69.939656,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +69.939678,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +69.939679,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +70.365044,911.371007,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","34",,,"rr_1",564 +70.365259,0.101918,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +70.365365,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +70.365529,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +70.365693,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +70.365856,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +70.366020,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +70.366183,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +70.366347,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +70.366511,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +70.366675,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +70.366838,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +70.367002,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +70.367166,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +70.367330,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +70.367494,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +70.367658,0.103871,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +70.367794,764.712413,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","35",,,"nb_1",570 +71.132634,1.271021,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","35",,,"nb_2",579 +71.134004,1.489546,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","35",,,"nb_3",583 +71.135498,2.816503,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","35",,,"nb_4",590 +71.138318,4.246145,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","35",,,"softmax",593 +71.142709,0.051775,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +71.142814,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +71.142979,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +71.143143,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +71.143307,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +71.143472,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +71.143636,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +71.143801,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +71.143965,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +71.144130,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +71.144295,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +71.144459,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +71.144624,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +71.144788,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +71.144953,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +71.145118,0.155134,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +71.276554,435.707240,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","34",,,"rr_2",575 +71.712384,1.917476,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","34",,,"rr_3",587 +71.714304,2.685464,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","34",,,"softmax",596 +71.716994,2.250495,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","35",,,"argmax",602 +71.719434,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +71.719458,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +71.719459,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +72.042148,910.878951,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","36",,,"rr_1",620 +72.042396,0.102239,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +72.042513,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +72.042677,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +72.042840,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +72.043004,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +72.043168,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +72.043331,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +72.043496,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +72.043659,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +72.043823,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +72.043987,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +72.044151,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +72.044315,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +72.044479,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +72.044643,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +72.044807,0.103870,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +72.044945,764.060103,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","37",,,"nb_1",626 +72.809117,1.275405,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","37",,,"nb_2",635 +72.810491,1.472394,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","37",,,"nb_3",639 +72.811968,2.837558,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","37",,,"nb_4",646 +72.814809,4.234593,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","37",,,"softmax",649 +72.819183,0.051679,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +72.819292,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +72.819456,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +72.819620,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +72.819785,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +72.819949,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +72.820113,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +72.820278,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +72.820443,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +72.820607,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +72.820800,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +72.820965,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +72.821130,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +72.821295,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +72.821460,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +72.821624,0.154622,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +72.953183,435.955173,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","36",,,"rr_2",631 +73.389247,1.926755,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","36",,,"rr_3",643 +73.391177,2.667577,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","36",,,"softmax",652 +73.393849,2.261470,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","37",,,"argmax",658 +73.396294,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +73.396318,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +73.396319,0.005344,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +73.696823,908.642785,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","38",,,"rr_1",676 +73.697037,0.102175,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +73.697145,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +73.697309,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +73.697473,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +73.697636,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +73.697800,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +73.697964,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +73.698128,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +73.698292,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +73.698456,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +73.698621,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +73.698785,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +73.698948,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +73.699113,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +73.699277,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +73.699441,0.104126,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +73.699583,763.105066,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","39",,,"nb_1",682 +74.462774,1.276174,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","39",,,"nb_2",691 +74.464114,1.489098,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","39",,,"nb_3",695 +74.465607,2.844469,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","39",,,"nb_4",702 +74.468455,4.229890,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","39",,,"softmax",705 +74.472788,0.051903,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +74.472893,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +74.473057,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +74.473222,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +74.473387,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +74.473551,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +74.473715,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +74.473879,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +74.474044,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +74.474208,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +74.474373,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +74.474557,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +74.474721,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +74.474887,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +74.475051,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +74.475216,0.155230,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +74.605615,436.129357,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","38",,,"rr_2",687 +75.041877,1.914147,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","38",,,"rr_3",699 +75.043795,2.664761,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","38",,,"softmax",708 +75.046464,2.244958,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","39",,,"argmax",714 +75.048880,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +75.048904,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +75.048905,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +75.338996,910.851681,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","40",,,"rr_1",732 +75.339209,0.101918,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +75.339321,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +75.339484,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +75.339648,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +75.339813,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +75.339976,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +75.340140,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +75.340303,0.162173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +75.340467,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +75.340631,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +75.340794,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +75.340958,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +75.341122,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +75.341286,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +75.341450,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +75.341614,0.103647,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +75.341870,764.064955,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","41",,,"nb_1",738 +76.106044,1.261742,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","41",,,"nb_2",747 +76.107378,1.491562,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","41",,,"nb_3",751 +76.108873,2.823030,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","41",,,"nb_4",758 +76.111699,4.216257,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","41",,,"softmax",761 +76.116046,0.051679,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +76.116195,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +76.116359,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +76.116524,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +76.116688,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +76.116853,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +76.117018,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +76.117183,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +76.117347,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +76.117512,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +76.117676,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +76.117842,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +76.118007,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +76.118172,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +76.118337,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +76.118501,0.155070,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +76.249956,436.368586,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","40",,,"rr_2",743 +76.686395,1.927268,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","40",,,"rr_3",755 +76.688326,2.665784,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","40",,,"softmax",764 +76.690996,2.237663,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","41",,,"argmax",770 +76.693375,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +76.693401,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +76.693402,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +76.969813,909.680274,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","42",,,"rr_1",788 +76.970141,0.102239,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +76.970324,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +76.970504,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +76.970692,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +76.970872,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +76.971053,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +76.971232,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +76.971412,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +76.971591,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +76.971766,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +76.971940,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +76.972115,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +76.972288,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +76.972462,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +76.972639,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +76.972803,0.103775,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +76.972991,763.248328,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","43",,,"nb_1",794 +77.736377,1.261133,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","43",,,"nb_2",803 +77.737768,1.480618,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","43",,,"nb_3",807 +77.739252,2.833590,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","43",,,"nb_4",814 +77.742089,4.184354,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","43",,,"softmax",817 +77.746441,0.051551,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +77.746545,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +77.746710,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +77.746874,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +77.747039,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +77.747203,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +77.747368,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +77.747533,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +77.747697,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +77.747861,0.201629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +77.748064,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +77.748229,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +77.748394,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +77.748558,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +77.748724,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +77.748888,0.155357,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +77.879637,435.339417,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","42",,,"rr_2",799 +78.315120,1.929732,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","42",,,"rr_3",811 +78.317052,2.680888,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","42",,,"softmax",820 +78.319737,2.245919,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","43",,,"argmax",826 +78.322176,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +78.322202,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +78.322203,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +78.648731,911.324762,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","44",,,"rr_1",844 +78.649006,0.101727,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +78.649131,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +78.649294,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +78.649458,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +78.649622,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +78.649786,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +78.649950,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +78.650114,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +78.650277,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +78.650441,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +78.650605,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +78.650769,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +78.650933,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +78.651097,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +78.651261,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +78.651425,0.103519,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +78.651568,763.744480,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","45",,,"nb_1",850 +79.415440,1.264622,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","45",,,"nb_2",859 +79.416851,1.496713,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","45",,,"nb_3",863 +79.418351,2.852246,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","45",,,"nb_4",870 +79.421207,4.231394,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","45",,,"softmax",873 +79.425659,0.051552,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +79.425769,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +79.425933,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +79.426097,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +79.426262,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +79.426427,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +79.426591,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +79.426755,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +79.426920,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +79.427084,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +79.427249,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +79.427414,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +79.427579,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +79.427744,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +79.427909,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +79.428074,0.154845,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +79.560198,435.949841,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","44",,,"rr_2",855 +79.996290,1.909987,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","44",,,"rr_3",867 +79.998203,2.668505,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","44",,,"softmax",876 +80.000876,2.248959,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","45",,,"argmax",882 +80.003250,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +80.003276,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +80.003277,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +80.282455,909.266624,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","46",,,"rr_1",900 +80.282692,0.104350,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +80.282805,0.165758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +80.282972,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +80.283137,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +80.283303,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +80.283467,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +80.283632,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +80.283796,0.167422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +80.283964,0.173277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +80.284139,0.170622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +80.284311,0.168317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +80.284480,0.165022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +80.284646,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +80.284810,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +80.284974,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +80.285139,0.103550,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +80.285289,762.930062,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","47",,,"nb_1",906 +81.048367,1.260077,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","47",,,"nb_2",915 +81.049726,1.466442,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","47",,,"nb_3",919 +81.051195,2.842646,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","47",,,"nb_4",926 +81.054041,4.218210,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","47",,,"softmax",929 +81.058426,0.052031,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +81.058531,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +81.058696,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +81.058860,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +81.059025,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +81.059189,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +81.059354,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +81.059519,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +81.059683,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +81.059848,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +81.060013,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +81.060179,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +81.060344,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +81.060509,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +81.060674,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +81.060838,0.154814,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +81.191887,435.828005,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","46",,,"rr_2",911 +81.627845,1.915300,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","46",,,"rr_3",923 +81.629764,2.672344,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","46",,,"softmax",932 +81.632440,2.230816,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","47",,,"argmax",938 +81.634793,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +81.634819,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +81.634820,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +81.970584,910.619307,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","48",,,"rr_1",956 +81.970868,0.101726,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +81.970998,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +81.971162,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +81.971327,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +81.971490,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +81.971654,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +81.971818,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +81.971982,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +81.972146,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +81.972309,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +81.972473,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +81.972637,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +81.972801,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +81.972965,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +81.973129,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +81.973293,0.103742,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +81.973457,764.503926,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","49",,,"nb_1",962 +82.738105,1.271373,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","49",,,"nb_2",971 +82.739505,1.485674,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","49",,,"nb_3",975 +82.740994,2.854550,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","49",,,"nb_4",982 +82.743852,4.218242,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","49",,,"softmax",985 +82.748239,0.051487,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +82.748348,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +82.748512,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +82.748677,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +82.748842,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +82.749006,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +82.749170,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +82.749335,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +82.749500,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +82.749665,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +82.749829,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +82.749994,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +82.750159,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +82.750324,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +82.750490,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +82.750654,0.154942,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +82.881380,436.203423,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","48",,,"rr_2",967 +83.317720,1.902980,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","48",,,"rr_3",979 +83.319627,2.659097,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","48",,,"softmax",988 +83.322291,2.230111,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","49",,,"argmax",994 +83.324647,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +83.324676,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +83.324677,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +83.621227,910.073940,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","50",,,"rr_1",1012 +83.621442,0.101855,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +83.621548,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +83.621712,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +83.621876,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +83.622039,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +83.622204,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +83.622368,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +83.622533,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +83.622697,0.170525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +83.622869,0.168510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +83.623039,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +83.623205,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +83.623369,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +83.623534,0.165054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +83.623700,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +83.623864,0.103742,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +83.624031,763.227305,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","51",,,"nb_1",1018 +84.387397,1.262989,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","51",,,"nb_2",1027 +84.388787,1.480267,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","51",,,"nb_3",1031 +84.390271,2.844182,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","51",,,"nb_4",1038 +84.393119,4.246849,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","51",,,"softmax",1041 +84.397535,0.051616,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +84.397646,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +84.397810,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +84.397974,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +84.398139,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +84.398304,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +84.398468,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +84.398633,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +84.398798,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +84.398963,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +84.399128,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +84.399292,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +84.399457,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +84.399621,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +84.399787,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +84.399952,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +84.531441,435.658919,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","50",,,"rr_2",1023 +84.967205,1.924931,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","50",,,"rr_3",1035 +84.969134,2.667129,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","50",,,"softmax",1044 +84.971804,2.247551,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","51",,,"argmax",1050 +84.974199,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +84.974228,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +84.974229,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +85.304726,910.694187,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","52",,,"rr_1",1068 +85.305006,0.102399,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +85.305118,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +85.305283,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +85.305447,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +85.305612,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +85.305776,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +85.305939,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +85.306106,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +85.306273,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +85.306438,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +85.306604,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +85.306769,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +85.306934,0.172125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +85.307107,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +85.307271,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +85.307436,0.104127,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +85.307622,763.265540,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","53",,,"nb_1",1074 +86.071026,1.269741,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","53",,,"nb_2",1083 +86.072423,1.494410,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","53",,,"nb_3",1087 +86.073922,2.849014,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","53",,,"nb_4",1094 +86.076775,4.250145,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","53",,,"softmax",1097 +86.081239,0.062591,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +86.081363,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +86.081528,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +86.081693,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +86.081857,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +86.082022,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +86.082186,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +86.082351,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +86.082515,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +86.082680,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +86.082845,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +86.083009,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +86.083174,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +86.083338,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +86.083503,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +86.083668,0.176093,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +86.215567,435.691063,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","52",,,"rr_2",1079 +86.651388,1.900708,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","52",,,"rr_3",1091 +86.653292,2.661081,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","52",,,"softmax",1100 +86.655957,2.247391,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","53",,,"argmax",1106 +86.658359,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +86.658386,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +86.658387,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +86.978281,910.389040,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","54",,,"rr_1",1124 +86.978522,0.101726,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +86.978640,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +86.978803,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +86.978967,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +86.979131,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +86.979295,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +86.979459,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +86.979623,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +86.979786,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +86.979950,0.171229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +86.980122,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +86.980286,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +86.980450,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +86.980615,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +86.980779,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +86.980943,0.103678,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +86.981108,763.430626,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","55",,,"nb_1",1130 +87.744675,1.279149,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","55",,,"nb_2",1139 +87.746080,1.481387,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","55",,,"nb_3",1143 +87.747567,2.858774,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","55",,,"nb_4",1150 +87.750428,4.198722,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","55",,,"softmax",1153 +87.754792,0.051648,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +87.754896,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +87.755061,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +87.755225,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +87.755390,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +87.755554,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +87.755737,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +87.755902,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +87.756067,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +87.756232,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +87.756397,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +87.756561,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +87.756727,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +87.756892,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +87.757056,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +87.757221,0.154621,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +87.888788,435.952659,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","54",,,"rr_2",1135 +88.324847,1.922275,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","54",,,"rr_3",1147 +88.326772,2.668985,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","54",,,"softmax",1156 +88.329445,2.236351,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","55",,,"argmax",1162 +88.331801,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +88.331833,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +88.331834,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +88.649313,910.125235,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","56",,,"rr_1",1180 +88.649553,0.101887,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +88.649672,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +88.649836,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +88.650000,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +88.650164,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +88.650327,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +88.650491,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +88.650655,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +88.650819,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +88.650982,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +88.651146,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +88.651310,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +88.651473,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +88.651637,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +88.651801,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +88.651965,0.103358,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +88.652218,763.119526,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","57",,,"nb_1",1186 +89.415451,1.268398,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","57",,,"nb_2",1195 +89.416821,1.488394,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","57",,,"nb_3",1199 +89.418313,2.843351,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","57",,,"nb_4",1206 +89.421160,4.255170,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","57",,,"softmax",1209 +89.425592,0.051552,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +89.425701,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +89.425865,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +89.426029,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +89.426193,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +89.426358,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +89.426523,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +89.426688,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +89.426852,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +89.427017,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +89.427181,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +89.427346,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +89.427511,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +89.427676,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +89.427841,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +89.428005,0.155005,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +89.559583,436.615497,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","56",,,"rr_2",1191 +89.996340,1.933156,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","56",,,"rr_3",1203 +89.998277,2.678712,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","56",,,"softmax",1212 +90.000959,2.242111,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","57",,,"argmax",1218 +90.003324,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +90.003355,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +90.003356,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +90.320497,910.216373,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","58",,,"rr_1",1236 +90.320740,0.101951,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +90.320864,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +90.321028,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +90.321192,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +90.321356,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +90.321520,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +90.321684,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +90.321847,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +90.322011,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +90.322174,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +90.322338,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +90.322502,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +90.322666,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +90.322830,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +90.322994,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +90.323157,0.103998,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +90.323485,763.418655,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","59",,,"nb_1",1242 +91.087036,1.272941,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","59",,,"nb_2",1251 +91.088454,1.483562,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","59",,,"nb_3",1255 +91.089941,2.861014,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","59",,,"nb_4",1262 +91.092805,4.269858,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","59",,,"softmax",1265 +91.097273,0.051647,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +91.097381,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +91.097545,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +91.097710,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +91.097874,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +91.098039,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +91.098204,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +91.098368,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +91.098533,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +91.098697,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +91.098862,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +91.099027,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +91.099191,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +91.099356,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +91.099521,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +91.099686,0.154909,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +91.230851,436.351293,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","58",,,"rr_2",1247 +91.667312,1.908196,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","58",,,"rr_3",1259 +91.669223,2.669689,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","58",,,"softmax",1268 +91.671897,2.240191,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","59",,,"argmax",1274 +91.674303,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +91.674333,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +91.674334,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +92.000899,912.426933,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","60",,,"rr_1",1292 +92.001161,0.101919,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +92.001284,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +92.001447,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +92.001612,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +92.001775,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +92.001939,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +92.002103,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +92.002267,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +92.002430,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +92.002594,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +92.002758,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +92.002922,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +92.003086,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +92.003249,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +92.003413,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +92.003577,0.103486,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +92.003823,763.573533,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","61",,,"nb_1",1298 +92.767550,1.263373,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","61",,,"nb_2",1307 +92.768941,1.474411,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","61",,,"nb_3",1311 +92.770419,2.833943,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","61",,,"nb_4",1318 +92.773257,4.240514,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","61",,,"softmax",1321 +92.777669,0.051775,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +92.777778,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +92.777943,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +92.778108,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +92.778272,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +92.778436,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +92.778601,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +92.778765,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +92.778930,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +92.779094,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +92.779259,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +92.779424,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +92.779589,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +92.779753,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +92.779918,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +92.780083,0.155197,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +92.913472,436.847862,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","60",,,"rr_2",1303 +93.350467,1.928707,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","60",,,"rr_3",1315 +93.352400,2.665753,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","60",,,"softmax",1324 +93.355070,2.251103,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","61",,,"argmax",1330 +93.357438,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +93.357472,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +93.357473,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +93.679848,911.006377,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","62",,,"rr_1",1348 +93.680098,0.101887,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +93.680214,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +93.680378,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +93.680542,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +93.680706,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +93.680869,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +93.681033,0.170974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +93.681205,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +93.681369,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +93.681532,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +93.681696,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +93.681860,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +93.682024,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +93.682188,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +93.682352,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +93.682516,0.103678,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +93.682654,763.587612,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","63",,,"nb_1",1354 +94.446374,1.274157,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","63",,,"nb_2",1363 +94.447734,1.485482,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","63",,,"nb_3",1367 +94.449223,2.819767,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","63",,,"nb_4",1374 +94.452047,4.230594,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","63",,,"softmax",1377 +94.456447,0.051647,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +94.456554,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +94.456719,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +94.456883,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +94.457048,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +94.457213,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +94.457377,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +94.457542,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +94.457706,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +94.457871,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +94.458037,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +94.458201,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +94.458366,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +94.458531,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +94.458696,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +94.458861,0.154621,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +94.591006,436.203840,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","62",,,"rr_2",1359 +95.027342,1.921123,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","62",,,"rr_3",1371 +95.029266,2.662521,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","62",,,"softmax",1380 +95.031932,2.247455,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","63",,,"argmax",1386 +95.034304,,,,,,,,,,,,,,"PC 0x37aa657d","0x11011c0000","[Unified Memory CPU page faults]", +95.034337,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +95.034338,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +95.423713,913.254318,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","64",,,"rr_1",1404 +95.424253,0.102334,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +95.424555,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +95.424868,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +95.425168,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +95.425470,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +95.425779,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +95.426077,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +95.426377,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +95.426676,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +95.426991,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +95.427287,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +95.427587,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +95.427880,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +95.428176,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +95.428471,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +95.428670,0.103647,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +95.428859,763.116866,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","65",,,"nb_1",1410 +96.192111,1.270062,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","65",,,"nb_2",1419 +96.193500,1.479178,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","65",,,"nb_3",1423 +96.194983,2.848087,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","65",,,"nb_4",1430 +96.197835,4.254721,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","65",,,"softmax",1433 +96.202253,0.051679,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +96.202362,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +96.202527,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +96.202692,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +96.202857,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +96.203022,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +96.203187,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +96.203351,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +96.203516,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +96.203680,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +96.203845,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +96.204009,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +96.204174,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +96.204339,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +96.204504,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +96.204669,0.154814,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +96.337135,437.011206,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","64",,,"rr_2",1415 +96.774249,1.915428,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","64",,,"rr_3",1427 +96.776168,2.683417,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","64",,,"softmax",1436 +96.778855,2.257663,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","65",,,"argmax",1442 +96.781265,,,,,,,,,,,,,,"PC 0x23068a41","0x11011c0000","[Unified Memory CPU page faults]", +96.781298,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +96.781299,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +97.054614,909.741441,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","66",,,"rr_1",1460 +97.054913,0.102142,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +97.055030,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +97.055194,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +97.055358,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +97.055522,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +97.055685,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +97.055849,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +97.056013,0.171133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +97.056185,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +97.056350,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +97.056513,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +97.056677,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +97.056841,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +97.057005,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +97.057169,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +97.057333,0.103935,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +97.057550,763.392414,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","67",,,"nb_1",1466 +97.821028,1.267693,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","67",,,"nb_2",1475 +97.822362,1.481802,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","67",,,"nb_3",1479 +97.823847,2.858678,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","67",,,"nb_4",1486 +97.826709,4.263266,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","67",,,"softmax",1489 +97.831087,0.051647,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +97.831191,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +97.831355,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +97.831519,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +97.831684,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +97.831849,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +97.832013,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +97.832178,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +97.832343,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +97.832508,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +97.832672,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +97.832837,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +97.833002,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +97.833167,0.231677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +97.833400,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +97.833593,0.155134,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +97.964458,435.750328,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","66",,,"rr_2",1471 +98.400282,1.915524,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","66",,,"rr_3",1483 +98.402201,2.663449,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","66",,,"softmax",1492 +98.404868,2.253567,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","67",,,"argmax",1498 +98.407280,,,,,,,,,,,,,,"PC 0x23068a41","0x11011c0000","[Unified Memory CPU page faults]", +98.407316,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +98.407317,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +98.687833,910.090460,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","68",,,"rr_1",1516 +98.688083,0.101823,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +98.688218,0.165246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +98.688384,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +98.688548,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +98.688714,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +98.688878,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +98.689042,0.171358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +98.689214,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +98.689378,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +98.689541,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +98.689705,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +98.689869,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +98.690034,0.172189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +98.690207,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +98.690371,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +98.690535,0.103519,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +98.690671,763.015076,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","69",,,"nb_1",1522 +99.453792,1.259373,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","69",,,"nb_2",1531 +99.455146,1.478442,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","69",,,"nb_3",1535 +99.456628,2.858934,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","69",,,"nb_4",1542 +99.459492,4.250690,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","69",,,"softmax",1545 +99.463881,0.051583,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +99.463991,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +99.464155,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +99.464320,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +99.464484,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +99.464649,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +99.464813,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +99.464978,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +99.465143,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +99.465307,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +99.465473,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +99.465637,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +99.465802,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +99.465967,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +99.466133,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +99.466297,0.155197,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +99.598034,436.096371,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","68",,,"rr_2",1527 +100.034235,1.929636,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","68",,,"rr_3",1539 +100.036168,2.677465,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","68",,,"softmax",1548 +100.038850,2.248031,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","69",,,"argmax",1554 +100.041235,,,,,,,,,,,,,,"PC 0x23068a41","0x11011c0000","[Unified Memory CPU page faults]", +100.041270,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +100.041271,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +100.384505,911.553575,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","70",,,"rr_1",1572 +100.384723,0.101791,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +100.384831,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +100.384995,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +100.385159,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +100.385323,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +100.385486,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +100.385650,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +100.385814,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +100.385978,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +100.386142,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +100.386305,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +100.386469,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +100.386633,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +100.386796,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +100.386960,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +100.387124,0.103423,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +100.387271,764.264593,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","71",,,"nb_1",1578 +101.151648,1.271565,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","71",,,"nb_2",1587 +101.153016,1.473002,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","71",,,"nb_3",1591 +101.154493,2.845238,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","71",,,"nb_4",1598 +101.157341,4.253698,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","71",,,"softmax",1601 +101.161736,0.051551,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +101.161841,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +101.162006,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +101.162171,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +101.162336,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +101.162500,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +101.162665,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +101.162830,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +101.162994,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +101.163159,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +101.163325,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +101.163490,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +101.163656,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +101.163821,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +101.163986,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +101.164151,0.155453,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +101.296171,435.775320,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","70",,,"rr_2",1583 +101.732052,1.906788,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","70",,,"rr_3",1595 +101.733962,2.690713,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","70",,,"softmax",1604 +101.736656,2.233535,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","71",,,"argmax",1610 +101.738988,,,,,,,,,,,,,,"PC 0x23068a41","0x11011c0000","[Unified Memory CPU page faults]", +101.739022,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +101.739023,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", +102.055407,910.958529,64,1,1,32,1,1,32,0,0,"GeForce GTX 960 (0)","1","72",,,"rr_1",1628 +102.055641,0.101695,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x11514c0000","[Unified Memory Memcpy HtoD]", +102.055754,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151600000","[Unified Memory Memcpy HtoD]", +102.055918,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151800000","[Unified Memory Memcpy HtoD]", +102.056082,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151a00000","[Unified Memory Memcpy HtoD]", +102.056247,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151c00000","[Unified Memory Memcpy HtoD]", +102.056410,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1151e00000","[Unified Memory Memcpy HtoD]", +102.056574,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152000000","[Unified Memory Memcpy HtoD]", +102.056738,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152200000","[Unified Memory Memcpy HtoD]", +102.056901,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152400000","[Unified Memory Memcpy HtoD]", +102.057065,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152600000","[Unified Memory Memcpy HtoD]", +102.057229,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152800000","[Unified Memory Memcpy HtoD]", +102.057394,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152a00000","[Unified Memory Memcpy HtoD]", +102.057557,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152c00000","[Unified Memory Memcpy HtoD]", +102.057722,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1152e00000","[Unified Memory Memcpy HtoD]", +102.057885,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153000000","[Unified Memory Memcpy HtoD]", +102.058049,0.103711,,,,,,,,,,"GeForce GTX 960 (0)",,,1331200.000000,"0x1153200000","[Unified Memory Memcpy HtoD]", +102.058217,764.343002,64,1,1,32,1,1,23,0,0,"GeForce GTX 960 (0)","1","73",,,"nb_1",1634 +102.822663,1.269229,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","73",,,"nb_2",1643 +102.824005,1.486890,64,1,1,32,1,1,25,0,0,"GeForce GTX 960 (0)","1","73",,,"nb_3",1647 +102.825495,2.842807,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","73",,,"nb_4",1654 +102.828342,4.253954,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","73",,,"softmax",1657 +102.832704,0.051808,,,,,,,,,,"GeForce GTX 960 (0)",,,655360.000000,"0x1153360000","[Unified Memory Memcpy HtoD]", +102.832813,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153400000","[Unified Memory Memcpy HtoD]", +102.832977,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153600000","[Unified Memory Memcpy HtoD]", +102.833142,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153800000","[Unified Memory Memcpy HtoD]", +102.833307,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153a00000","[Unified Memory Memcpy HtoD]", +102.833471,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153c00000","[Unified Memory Memcpy HtoD]", +102.833636,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1153e00000","[Unified Memory Memcpy HtoD]", +102.833800,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154000000","[Unified Memory Memcpy HtoD]", +102.833965,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154200000","[Unified Memory Memcpy HtoD]", +102.834129,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154400000","[Unified Memory Memcpy HtoD]", +102.834295,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154600000","[Unified Memory Memcpy HtoD]", +102.834459,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154800000","[Unified Memory Memcpy HtoD]", +102.834624,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154a00000","[Unified Memory Memcpy HtoD]", +102.834788,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154c00000","[Unified Memory Memcpy HtoD]", +102.834953,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1154e00000","[Unified Memory Memcpy HtoD]", +102.835119,0.155198,,,,,,,,,,"GeForce GTX 960 (0)",,,1986560.000000,"0x1155000000","[Unified Memory Memcpy HtoD]", +102.966468,436.267496,64,1,1,32,1,1,22,0,0,"GeForce GTX 960 (0)","1","72",,,"rr_2",1639 +103.402862,1.932899,64,1,1,32,1,1,17,0,0,"GeForce GTX 960 (0)","1","72",,,"rr_3",1651 +103.404799,2.665306,64,1,1,32,1,1,26,0,0,"GeForce GTX 960 (0)","1","72",,,"softmax",1660 +103.407469,2.231168,64,1,1,32,1,1,31,0,0,"GeForce GTX 960 (0)","1","73",,,"argmax",1666 +103.409799,,,,,,,,,,,,,,"PC 0x23068a41","0x11011c0000","[Unified Memory CPU page faults]", +103.409833,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x11011c0000","[Unified Memory Memcpy DtoH]", +103.409834,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x11011c1000","[Unified Memory Memcpy DtoH]", diff --git a/data/nvprof_log/2020_07_20/b7_2663.csv b/data/nvprof_log/2020_07_20/b7_2663.csv new file mode 100644 index 00000000..3644b92e --- /dev/null +++ b/data/nvprof_log/2020_07_20/b7_2663.csv @@ -0,0 +1,18574 @@ +==2663== NVPROF is profiling process 2663, command: java -classpath /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -XX:MaxHeapSize=24G com.oracle.g +==2663== Profiling application: java -classpath /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -XX:MaxHeapSize=24G com.oracle.g +==2663== Profiling result: +"Start","Duration","Grid X","Grid Y","Grid Z","Block X","Block Y","Block Z","Registers Per Thread","Static SMem","Dynamic SMem","Device","Context","Stream","Unified Memory","Virtual Address","Name","Correlation_ID" +s,ms,,,,,,,,KB,B,,,,B,,, +357.871445,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +357.871492,0.066912,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +357.871607,0.167584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +357.871776,0.166304,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +357.871943,0.164064,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +357.872109,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +357.872274,0.164288,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +357.872439,0.163808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +357.872604,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +357.872769,0.164448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +357.872934,0.163744,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +357.873099,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +357.873264,0.167808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +357.873433,0.166496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +357.873600,0.173920,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +357.873776,0.163648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +357.873941,0.164832,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +357.874107,0.163488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +357.874271,0.165280,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +357.874438,0.165824,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +357.874605,0.169248,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +357.874775,0.164256,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +357.874941,0.168256,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +357.875110,0.167552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +357.875279,0.166688,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +357.875447,0.171840,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +357.875620,0.168160,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +357.875790,0.180704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +357.875972,0.204128,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +357.876177,0.199232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +357.876378,0.047584,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +357.876427,0.183936,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +357.876612,0.208480,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +357.876822,0.199072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +357.877023,0.208224,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +357.877232,0.203776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +357.877437,0.199360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +357.877638,0.210880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +357.877850,0.208576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +357.878060,0.204544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +357.878266,0.201344,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +357.878469,0.206048,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +357.878676,0.200576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +357.878878,0.198144,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +357.879078,0.199424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +357.879279,0.198432,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +357.879479,0.213056,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +357.879694,0.169376,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +357.879864,0.185632,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +357.880051,0.198208,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +357.880251,0.202496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +357.880455,0.194240,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +357.880651,0.202400,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +357.880854,0.203584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +357.881059,0.205920,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +357.881267,0.193888,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +357.881462,0.198240,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +357.881661,0.194208,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +357.881857,0.201152,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +357.882060,0.196224,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +357.882257,0.201664,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +357.882460,0.204704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +357.882667,0.200064,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +357.882868,0.201856,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +357.883071,0.201088,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +357.883273,0.198272,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +357.883473,0.194208,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +357.883669,0.197120,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +357.883868,0.191328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +357.884060,0.194400,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +357.884256,0.193856,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +357.884451,0.192512,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +357.884645,0.191168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +357.884837,0.195488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +357.885034,0.192096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +357.885228,0.192704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +357.885422,0.196448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +357.885619,0.197536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +357.885818,0.193184,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +357.886013,0.196512,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +357.886211,0.191456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +357.886403,0.190112,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +357.886595,0.193792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +357.886790,0.187808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +357.886979,0.181920,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +357.887162,0.191936,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +357.887355,0.192160,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +357.887549,0.194112,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +357.887744,0.190688,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +357.887936,0.194336,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +357.888132,0.193440,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +357.888326,0.192352,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +357.888520,0.192608,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +357.888714,0.188864,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +357.888904,0.192512,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +357.889098,0.191840,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +357.889292,0.189984,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +357.889483,0.190848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +357.889675,0.184032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +357.889860,0.195136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +357.890057,0.192256,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +357.890251,0.188448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +357.890440,0.191616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +357.890634,0.186816,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +357.890822,0.190848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +357.891014,0.195296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +357.891211,0.193280,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +357.891405,0.191072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +357.891598,0.189120,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +357.891788,0.191520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +357.891981,0.194880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +357.892177,0.195968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +357.892374,0.195264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +357.892571,0.190400,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +357.892763,0.193760,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +357.892958,0.196288,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +357.893155,0.185088,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +357.893342,0.025536,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +357.893369,0.195552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +357.893565,0.194848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +357.893762,0.195872,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +357.893959,0.194816,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +357.894155,0.195744,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +357.894352,0.194752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +357.894548,0.170112,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +357.894720,0.185536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +357.894906,0.195232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +357.895103,0.172768,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +357.895277,0.181792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +357.895460,0.192320,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +357.895654,0.169984,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +357.895825,0.175424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +357.896002,0.185344,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +357.896188,0.192800,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +357.896383,0.194944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +357.896579,0.187744,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +357.896768,0.183520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +357.896953,0.183776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +357.897138,0.196192,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +357.897336,0.201088,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +357.897539,0.193408,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +357.897733,0.196096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +357.897931,0.191840,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +357.898124,0.189312,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +357.898315,0.177792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +357.898494,0.175712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +357.898671,0.183392,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +357.898855,1.240192,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +357.898904,0.185792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +357.899092,0.188576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +357.899281,0.189056,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +357.899472,0.188448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +357.899662,0.189536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +357.899852,1.248672,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +357.900097,0.194144,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +357.900292,0.200832,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +357.900494,0.192000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +357.900688,0.186400,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +357.900876,0.670496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +357.901102,0.193184,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +357.901297,0.191776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +357.901547,0.192224,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +357.901741,0.184928,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +357.901927,0.184288,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +357.902113,0.182528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +357.902297,0.183520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +357.902481,0.185216,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +357.902668,0.192640,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +357.902862,0.188608,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +357.903052,0.180864,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +357.903234,0.184480,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +357.903420,0.190240,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +357.903611,0.189792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +357.903802,0.193280,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +357.903997,0.190112,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +357.904188,0.186496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +357.904376,0.189056,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +357.904567,0.185792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +357.904754,0.185248,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +357.904940,0.185184,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +357.905127,0.190272,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +357.905318,0.186976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +357.905506,0.185568,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +357.905693,0.185472,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +357.905880,0.188000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +357.906069,0.183168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +357.906254,0.183136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +357.906439,0.182880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +357.906623,0.186592,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +357.906811,0.187904,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +357.907000,0.187040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +357.907188,0.191520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +357.907381,0.187456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +357.907570,0.186688,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +357.907758,0.188192,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +357.907947,0.184608,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +357.908133,0.184544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +357.908319,0.184672,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +357.908505,0.188512,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +357.908695,0.183392,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +357.908879,0.182720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +357.909064,0.186592,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +357.909251,0.189664,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +357.909442,0.184320,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +357.909628,0.183392,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +357.909813,0.196384,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +357.910011,0.195168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +357.910207,0.191712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +357.910401,0.189984,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +357.910592,0.196448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +357.910790,0.195328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +357.910986,0.136352,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +357.911124,0.199264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +357.911325,0.191168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +357.911517,0.193536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +357.911712,0.190688,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +357.911904,0.196576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +357.912102,0.194400,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +357.912298,0.193120,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +357.912492,0.193696,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +357.912687,0.168608,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +357.912857,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +357.913022,0.163552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +357.913186,0.163456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +357.913351,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +357.913515,0.162816,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +357.913679,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +357.913843,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +357.914008,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +357.914172,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +357.914336,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +357.914501,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +357.914666,0.100704,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +357.914768,0.102496,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +357.914871,0.163584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +357.915036,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +357.915201,0.163968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +357.915366,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +357.915531,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +357.915695,0.163872,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +357.915860,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +357.916025,0.163424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +357.916190,0.164032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +357.916355,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +357.916519,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +357.916684,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +357.916848,0.163552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +357.917013,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +357.917178,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +357.917342,0.163648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +357.917507,0.164576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +357.917672,0.165376,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +357.917839,0.163488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +357.918004,0.163680,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +357.918169,0.163968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +357.918334,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +357.918499,0.164512,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +357.918664,0.163424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +357.918829,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +357.918993,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +357.919158,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +357.919322,0.160608,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +357.919772,0.163744,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +357.919937,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +357.920101,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +357.920265,0.163456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +357.920430,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +357.920594,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +357.920759,0.163520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +357.920924,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +357.921088,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +357.921252,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +357.921416,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +357.921581,0.171680,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +357.921754,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +357.921918,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +357.922082,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +357.922247,0.163552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +357.922411,0.163776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +357.922576,0.162848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +357.922740,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +357.922905,0.163520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +357.923069,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +357.923234,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +357.923398,0.163712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +357.923563,0.163392,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +357.923728,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +357.923892,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +357.924057,0.163680,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +357.924222,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +357.924386,0.101152,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +357.924489,0.122688,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +357.924613,0.162816,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +357.924777,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +357.924941,0.163712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +357.925106,0.163776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +357.925271,0.163776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +357.925436,0.163872,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +357.925601,0.163808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +357.925766,0.164000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +357.925932,0.164032,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +357.926097,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +357.926262,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +357.926426,0.163520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +357.926591,0.172544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +357.926765,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +357.926929,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +357.927094,0.163488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +357.927258,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +357.927423,0.163520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +357.927588,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +357.927752,0.163584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +357.927917,0.164768,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +357.928083,0.169280,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +357.928253,0.164064,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +357.928418,0.163808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +357.928583,0.163584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +357.928748,0.164416,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +357.928914,0.172800,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +357.929088,0.178496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +357.929268,0.179008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +357.929449,0.176928,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +357.929627,0.175488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +357.929804,0.175904,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +357.929981,0.177152,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +357.930160,0.176320,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +357.930337,0.173440,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +357.930512,0.184288,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +357.930697,0.173472,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +357.930872,0.180672,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +357.931054,0.179264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +357.931235,0.176416,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +357.931413,0.174976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +357.931589,0.175552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +357.931766,0.176352,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +357.931944,0.176768,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +357.932122,0.175744,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +357.932299,0.176992,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +357.932478,0.181984,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +357.932661,0.174912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +357.932837,0.174272,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +357.933013,0.177248,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +357.933191,0.176160,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +357.933369,0.174528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +357.933545,0.176736,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +357.933723,0.175808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +357.933900,0.166656,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +357.934068,0.164832,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +357.934235,0.165888,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +357.934402,0.163520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +357.934566,0.163424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +357.934731,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +357.934895,0.165312,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +357.935062,0.164256,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +357.935228,0.164704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +357.935393,0.163648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +357.935558,0.163392,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +357.935723,0.163648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +357.935888,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +357.936052,0.163424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +357.936217,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +357.936382,0.165792,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +357.936549,0.167936,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +357.936718,0.164320,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +357.936883,0.164000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +357.937049,0.163968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +357.937214,0.164576,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +357.937380,0.163872,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +357.937545,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +357.937709,0.163424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +357.937874,0.164416,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +357.938040,0.165600,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +357.938206,0.166624,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +357.938375,0.164416,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +357.938540,0.164096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +357.938705,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +357.938870,0.163552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +357.939035,0.014656,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +357.939051,0.163456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +357.939215,0.163776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +357.939380,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +357.939545,0.163904,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +357.939710,0.165536,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +357.939877,0.163936,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +357.940042,0.164928,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +357.940209,0.164704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +357.940375,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +357.940539,0.165088,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +357.940706,0.165600,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +357.940873,0.164960,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +357.941039,0.164448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +357.941204,0.166464,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +357.941372,0.164416,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +357.941538,0.164384,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +357.941704,0.165024,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +357.941870,0.164736,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +357.942036,0.163808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +357.942201,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +357.942366,0.163488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +357.942531,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +357.942695,0.163584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +357.942860,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +357.943024,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +357.943188,0.164096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +357.943354,0.163584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +357.943518,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +357.943683,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +357.943847,0.163808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +357.944012,0.163616,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +357.944177,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +357.944341,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +357.944506,0.163552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +357.944670,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +357.944835,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +357.944999,0.163488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +357.945164,0.163648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +357.945329,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +357.945494,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +357.945658,0.171968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +357.945831,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +357.945995,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +357.946160,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +357.946324,0.162816,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +357.946488,0.164704,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +357.946654,0.162912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +357.946818,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +357.946983,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +357.947147,0.163968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +357.947313,0.163712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +357.947478,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +357.947642,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +357.947806,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +357.947971,0.165408,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +357.948137,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +357.948302,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +357.948466,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +357.948630,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +357.948794,0.163456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +357.948959,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +357.949124,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +357.949288,0.165056,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +357.949454,0.163520,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +357.949619,0.171904,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +357.949792,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +357.949956,0.162720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +357.950120,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +357.950284,0.162496,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +357.950448,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +357.950612,0.164192,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +357.950777,0.162560,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +357.950941,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +357.951105,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +357.951270,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +357.951434,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +357.951598,0.163424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +357.951763,0.162720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +357.951927,0.165056,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +357.952093,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +357.952257,0.163456,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +357.952422,0.163264,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +357.952586,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +357.952751,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +357.952915,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +357.953080,0.135872,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +357.953217,0.041824,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +357.953260,0.163392,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +357.953424,0.164544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +357.953590,0.171808,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +357.953763,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +357.953928,0.162848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +357.954092,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +357.954256,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +357.954420,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +357.954584,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +357.954749,0.167904,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +357.954918,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +357.955083,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +357.955247,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +357.955411,0.162784,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +357.955575,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +357.955739,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +357.955904,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +357.956068,0.166112,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +357.956235,0.163168,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +357.956400,0.162752,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +357.956564,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +357.956728,0.162848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +357.956892,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +357.957057,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +357.957065,55.759586,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","14",,,"spmv3",9 +357.957221,0.164768,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +357.957387,0.163424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +357.957552,0.171776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +357.957725,0.163776,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +357.957890,0.060000,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +357.957951,0.062176,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +357.958015,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +357.958179,0.162912,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +357.958343,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +357.958507,0.164544,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +357.958673,0.162720,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +357.958837,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +357.959001,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +357.959166,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +357.959330,0.163360,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +357.959494,0.162944,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +357.959658,0.163008,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +357.959823,0.164000,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +357.959988,0.162816,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +357.960153,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +357.960317,0.163680,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +357.960482,0.163552,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +357.960647,0.162848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +357.960811,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +357.960975,0.164800,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +357.961141,0.162848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +357.961305,0.163424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +357.961470,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +357.961634,0.163200,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +357.961799,0.163040,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +357.961963,0.163872,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +357.962128,0.164608,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +357.962294,0.163104,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +357.962458,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +357.962623,0.039264,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +357.962663,0.001888,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +357.962666,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +358.012824,53.677379,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","15",,,"spmv3",19 +358.066501,4.848946,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","14",,,"sum",23 +358.066600,4.847506,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","15",,,"sum",27 +358.071435,9.652966,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","14",,,"divide",32 +358.071532,7.151245,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","15",,,"divide",37 +358.081805,,,,,,,,,,,,,,"PC 0xc2d09241","0x1100a80000","[Unified Memory CPU page faults]", +358.082095,,,,,,,,,,,,,,"PC 0xc2d09241","0x1100a81000","[Unified Memory CPU page faults]", +358.082466,,,,,,,,,,,,,,"PC 0xc2302709","0x1100a82000","[Unified Memory CPU page faults]", +358.082544,,,,,,,,,,,,,,"PC 0xc2302709","0x1100a83000","[Unified Memory CPU page faults]", +358.083258,54.775057,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","16",,,"spmv3",55 +358.087561,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +358.087846,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +358.088216,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +358.088292,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +358.088834,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +358.089411,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +358.138032,53.549221,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","17",,,"spmv3",65 +358.143895,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +358.191581,4.619638,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","16",,,"sum",69 +358.191730,4.618742,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","17",,,"sum",73 +358.196394,9.252780,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","16",,,"divide",78 +358.196418,6.908401,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","17",,,"divide",83 +358.197467,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +358.205774,,,,,,,,,,,,,,"PC 0xc2d09241","0x1100a80000","[Unified Memory CPU page faults]", +358.205941,,,,,,,,,,,,,,"PC 0xc2d09241","0x1100a81000","[Unified Memory CPU page faults]", +358.205993,,,,,,,,,,,,,,"PC 0xc2302709","0x1100a82000","[Unified Memory CPU page faults]", +358.206042,,,,,,,,,,,,,,"PC 0xc2302709","0x1100a83000","[Unified Memory CPU page faults]", +358.206523,54.593876,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","18",,,"spmv3",101 +358.211527,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +358.211692,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +358.211743,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +358.211793,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +358.212117,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +358.212527,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +358.261117,53.474054,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","19",,,"spmv3",111 +358.267014,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +358.314590,4.620918,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","18",,,"sum",115 +358.314725,4.618998,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","19",,,"sum",119 +358.319351,9.247179,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","18",,,"divide",124 +358.319439,6.911441,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","19",,,"divide",129 +358.320466,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +358.328741,,,,,,,,,,,,,,"PC 0xc2d09241","0x1100a80000","[Unified Memory CPU page faults]", +358.328873,,,,,,,,,,,,,,"PC 0xc2d09241","0x1100a81000","[Unified Memory CPU page faults]", +358.328913,,,,,,,,,,,,,,"PC 0xc2302709","0x1100a82000","[Unified Memory CPU page faults]", +358.328946,,,,,,,,,,,,,,"PC 0xc2302709","0x1100a83000","[Unified Memory CPU page faults]", +358.329540,54.540629,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","20",,,"spmv3",147 +358.334496,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +358.334626,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +358.334665,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +358.334698,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +358.335001,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +358.335681,0.012064,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +358.384080,53.541478,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","21",,,"spmv3",157 +358.389970,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +358.437621,4.621429,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","20",,,"sum",161 +358.437755,4.619222,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","21",,,"sum",165 +358.442409,9.250155,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","20",,,"divide",170 +358.442486,6.893873,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","21",,,"divide",175 +358.443497,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +358.451834,,,,,,,,,,,,,,"PC 0xc2d09241","0x1100a80000","[Unified Memory CPU page faults]", +358.451994,,,,,,,,,,,,,,"PC 0xc2d09241","0x1100a81000","[Unified Memory CPU page faults]", +358.452034,,,,,,,,,,,,,,"PC 0xc2302709","0x1100a82000","[Unified Memory CPU page faults]", +358.452130,,,,,,,,,,,,,,"PC 0xc2302709","0x1100a83000","[Unified Memory CPU page faults]", +358.452750,54.546101,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","22",,,"spmv3",193 +358.457591,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +358.457749,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +358.457788,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +358.457884,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +358.458309,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +358.458781,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +358.507296,53.528709,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","23",,,"spmv3",203 +358.513193,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +358.560824,4.623894,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","22",,,"sum",207 +358.560904,4.620150,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","23",,,"sum",211 +358.565613,9.257964,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","22",,,"divide",216 +358.565626,6.910673,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","23",,,"divide",221 +358.566649,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +358.574994,,,,,,,,,,,,,,"PC 0xc2d09241","0x1100a80000","[Unified Memory CPU page faults]", +358.575152,,,,,,,,,,,,,,"PC 0xc2d09241","0x1100a81000","[Unified Memory CPU page faults]", +358.575218,,,,,,,,,,,,,,"PC 0xc2302709","0x1100a82000","[Unified Memory CPU page faults]", +358.575276,,,,,,,,,,,,,,"PC 0xc2302709","0x1100a83000","[Unified Memory CPU page faults]", +358.575810,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +358.575946,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +358.580753,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +358.580909,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +358.580973,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +358.581032,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +358.581570,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +358.581571,0.005024,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +358.581706,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +358.581708,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +367.785031,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +367.785093,0.062271,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +367.785231,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +367.785396,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +367.785561,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +367.785726,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +367.785890,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +367.786055,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +367.786219,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +367.786383,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +367.786547,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +367.786712,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +367.786877,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +367.787041,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +367.787205,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +367.787369,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +367.787534,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +367.787698,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +367.787862,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +367.788026,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +367.788192,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +367.788356,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +367.788521,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +367.788685,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +367.788850,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +367.789015,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +367.789179,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +367.789344,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +367.789508,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +367.789673,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +367.789838,0.039487,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +367.789878,0.142718,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +367.790022,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +367.790187,0.168285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +367.790357,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +367.790526,0.167837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +367.790695,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +367.790860,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +367.791024,0.167325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +367.791193,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +367.791358,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +367.791523,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +367.791687,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +367.791852,0.165853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +367.792019,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +367.792184,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +367.792349,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +367.792513,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +367.792680,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +367.792844,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +367.793009,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +367.793174,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +367.793338,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +367.793503,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +367.793669,0.171677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +367.793842,0.204797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +367.794048,0.211228,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +367.794260,0.214557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +367.794476,0.217372,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +367.794695,0.212029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +367.794909,0.215388,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +367.795125,0.209021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +367.795336,0.211805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +367.795549,0.220092,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +367.795770,0.209661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +367.795981,0.216380,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +367.796199,0.215165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +367.796415,0.215132,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +367.796632,0.202045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +367.796835,0.211388,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +367.797048,0.170494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +367.797220,0.166045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +367.797387,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +367.797571,0.204317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +367.797777,0.202717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +367.797980,0.210941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +367.798193,0.209341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +367.798404,0.198173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +367.798603,0.205308,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +367.798810,0.200125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +367.799011,0.206781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +367.799219,0.214012,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +367.799435,0.208509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +367.799644,0.211580,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +367.799857,0.212477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +367.800071,0.213917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +367.800286,0.191164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +367.800479,0.169022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +367.800649,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +367.800817,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +367.800981,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +367.801146,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +367.801310,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +367.801475,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +367.801639,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +367.801803,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +367.801967,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +367.802132,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +367.802297,0.164958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +367.802463,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +367.802629,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +367.802796,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +367.802961,0.191037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +367.803153,0.201180,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +367.803356,0.196829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +367.803554,0.194781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +367.803750,0.197341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +367.803949,0.194333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +367.804144,0.200380,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +367.804346,0.195805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +367.804543,0.190461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +367.804735,0.199869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +367.804936,0.197309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +367.805135,0.178461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +367.805315,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +367.805482,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +367.805671,0.186653,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +367.805859,0.024768,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +367.805885,0.198813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +367.806085,0.191389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +367.806278,0.200829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +367.806480,0.195325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +367.806677,0.195677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +367.806873,0.196925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +367.807072,0.191965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +367.807265,0.204636,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +367.807471,0.210333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +367.807683,0.206685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +367.807891,0.216220,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +367.808108,0.200317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +367.808310,0.188605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +367.808500,0.189213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +367.808690,0.191037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +367.808883,0.193629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +367.809078,0.191645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +367.809270,0.187261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +367.809459,0.190973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +367.809651,0.187965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +367.809841,0.195357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +367.810037,0.186653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +367.810225,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +367.810411,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +367.810595,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +367.810780,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +367.810968,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +367.811161,0.192221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +367.811355,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +367.811541,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +367.811729,0.184093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +367.811914,0.185757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +367.812101,0.185821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +367.812288,0.186205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +367.812476,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +367.812660,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +367.812844,0.183549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +367.813029,0.192733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +367.813223,0.186269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +367.813411,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +367.813598,0.183421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +367.813782,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +367.813965,0.184669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +367.814151,0.176413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +367.814328,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +367.814512,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +367.814693,0.181182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +367.814875,0.185406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +367.815062,0.179006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +367.815242,0.170077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +367.815413,0.176477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +367.815591,0.170333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +367.815763,0.171134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +367.815935,0.170334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +367.816107,0.179197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +367.816287,0.178365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +367.816467,0.171645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +367.816640,0.169917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +367.816811,0.176670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +367.816989,0.167709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +367.817158,0.168893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +367.817328,0.168349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +367.817498,0.170014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +367.817669,0.170077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +367.817840,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +367.818021,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +367.818206,0.179389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +367.818387,0.170429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +367.818559,0.174366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +367.818734,0.170493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +367.818906,0.166205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +367.819074,0.167869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +367.819243,0.174206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +367.819418,0.177917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +367.819597,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +367.819778,0.177917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +367.819958,0.181533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +367.820141,0.181693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +367.820324,0.172509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +367.820497,0.170110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +367.820669,0.168253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +367.820838,0.166589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +367.821006,0.166685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +367.821174,0.176254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +367.821351,0.176669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +367.821529,0.125374,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +367.821656,0.176861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +367.821834,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +367.822017,0.184317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +367.822203,0.173885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +367.822378,0.171357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +367.822551,0.168510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +367.822720,0.168157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +367.822890,0.168893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +367.823060,0.173373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +367.823235,0.180638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +367.823416,0.176798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +367.823595,0.203516,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +367.823799,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +367.823990,0.193725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +367.824185,0.193469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +367.824380,0.186749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +367.824568,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +367.824755,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +367.824941,0.188861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +367.825131,0.194429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +367.825326,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +367.825517,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +367.825685,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +367.825849,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +367.826014,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +367.826178,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +367.826342,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +367.826507,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +367.826671,0.100031,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +367.826772,0.102430,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +367.826876,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +367.827041,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +367.827205,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +367.827369,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +367.827534,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +367.827698,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +367.827863,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +367.828027,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +367.828192,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +367.828356,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +367.828521,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +367.828686,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +367.828851,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +367.829015,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +367.829179,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +367.829344,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +367.829509,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +367.829673,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +367.829838,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +367.830002,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +367.830166,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +367.830331,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +367.830496,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +367.830660,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +367.830825,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +367.830990,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +367.831154,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +367.831318,0.160509,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +367.831644,66.002301,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","24",,,"spmv3",241 +367.832062,0.002080,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +367.832170,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +367.832337,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +367.832502,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +367.832668,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +367.832834,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +367.833000,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +367.833167,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +367.833333,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +367.833498,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +367.833665,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +367.833830,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +367.833995,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +367.834160,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +367.834326,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +367.834491,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +367.834656,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +367.834823,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +367.834989,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +367.835154,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +367.835321,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +367.835488,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +367.835654,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +367.835820,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +367.835987,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +367.836153,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +367.836319,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +367.836484,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +367.836650,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +367.836815,0.100830,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +367.836918,0.123742,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +367.837043,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +367.837209,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +367.837375,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +367.837541,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +367.837707,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +367.837873,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +367.838040,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +367.838207,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +367.838372,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +367.838537,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +367.838704,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +367.838870,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +367.839036,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +367.839201,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +367.839367,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +367.839532,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +367.839697,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +367.839862,0.167325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +367.840032,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +367.840198,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +367.840364,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +367.840531,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +367.840699,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +367.840864,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +367.841029,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +367.841196,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +367.841363,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +367.841528,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +367.841693,0.166174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +367.841862,0.165917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +367.842031,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +367.842199,0.165022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +367.842367,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +367.842533,0.166461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +367.842702,0.166557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +367.842871,0.166238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +367.843040,0.167293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +367.843210,0.167581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +367.843379,0.166622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +367.843549,0.169085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +367.843720,0.168253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +367.843890,0.165565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +367.844058,0.168062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +367.844229,0.168221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +367.844400,0.167293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +367.844568,0.165566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +367.844736,0.168509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +367.844907,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +367.845072,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +367.845237,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +367.845402,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +367.845567,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +367.845733,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +367.845900,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +367.846066,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +367.846234,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +367.846401,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +367.846568,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +367.846734,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +367.846900,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +367.847066,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +367.847231,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +367.847397,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +367.847563,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +367.847728,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +367.847894,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +367.848060,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +367.848227,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +367.848394,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +367.848559,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +367.848725,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +367.848891,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +367.849056,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +367.849222,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +367.849387,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +367.849552,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +367.849716,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +367.849882,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +367.850047,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +367.850213,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +367.850379,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +367.850545,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +367.850710,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +367.850875,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +367.851040,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +367.851207,0.015231,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +367.851225,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +367.851391,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +367.851556,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +367.851723,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +367.851888,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +367.852053,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +367.852219,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +367.852386,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +367.852551,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +367.852716,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +367.852881,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +367.853047,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +367.853213,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +367.853379,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +367.853545,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +367.853711,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +367.853876,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +367.854041,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +367.854206,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +367.854372,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +367.854538,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +367.854704,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +367.854869,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +367.855035,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +367.855201,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +367.855368,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +367.855534,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +367.855699,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +367.855865,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +367.856030,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +367.856198,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +367.856364,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +367.856530,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +367.856696,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +367.856862,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +367.857027,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +367.857193,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +367.857359,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +367.857525,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +367.857692,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +367.857858,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +367.858024,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +367.858189,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +367.858354,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +367.858519,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +367.858685,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +367.858852,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +367.859018,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +367.859183,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +367.859349,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +367.859513,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +367.859680,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +367.859845,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +367.860010,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +367.860175,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +367.860342,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +367.860508,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +367.860674,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +367.860839,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +367.861005,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +367.861170,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +367.861336,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +367.861501,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +367.861667,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +367.861832,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +367.861998,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +367.862164,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +367.862331,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +367.862496,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +367.862662,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +367.862827,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +367.862994,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +367.863159,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +367.863325,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +367.863490,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +367.863655,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +367.863820,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +367.863986,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +367.864150,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +367.864315,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +367.864481,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +367.864646,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +367.864812,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +367.864977,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +367.865143,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +367.865308,0.136957,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +367.865448,0.042304,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +367.865493,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +367.865659,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +367.865825,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +367.865991,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +367.866157,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +367.866323,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +367.866489,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +367.866655,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +367.866821,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +367.866986,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +367.867152,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +367.867318,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +367.867484,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +367.867651,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +367.867818,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +367.867984,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +367.868149,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +367.868315,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +367.868481,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +367.868647,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +367.868813,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +367.868978,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +367.869144,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +367.869310,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +367.869476,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +367.869642,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +367.869810,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +367.869977,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +367.870142,0.059999,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +367.870204,0.062367,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +367.870268,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +367.870434,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +367.870600,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +367.870765,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +367.870931,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +367.871096,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +367.871261,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +367.871427,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +367.871593,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +367.871759,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +367.871925,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +367.872091,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +367.872256,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +367.872422,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +367.872588,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +367.872753,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +367.872918,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +367.873084,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +367.873250,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +367.873414,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +367.873581,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +367.873747,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +367.873912,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +367.874079,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +367.874244,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +367.874410,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +367.874576,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +367.874741,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +367.874907,0.039487,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +367.897646,55.622019,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","25",,,"spmv3",251 +367.897756,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +367.953267,5.239244,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","24",,,"sum",255 +367.953343,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +367.953346,5.238572,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","25",,,"sum",259 +367.958622,10.411353,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","24",,,"divide",264 +367.958673,7.639142,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","25",,,"divide",269 +367.969189,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +367.969207,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +367.969378,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +367.969393,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +367.969442,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +367.969456,0.001344,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +367.969470,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +367.969483,0.001344,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +367.969814,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +367.970052,56.026077,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","26",,,"spmv3",287 +367.970285,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +368.026078,53.718626,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","27",,,"spmv3",297 +368.026177,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +368.079796,4.846930,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","26",,,"sum",301 +368.079877,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +368.079881,4.845331,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","27",,,"sum",305 +368.084761,9.664741,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","26",,,"divide",310 +368.084813,7.160333,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","27",,,"divide",315 +368.094561,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +368.094578,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +368.094706,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +368.094720,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +368.094769,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +368.094782,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +368.094825,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +368.094838,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +368.095241,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +368.095410,54.744882,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","28",,,"spmv3",333 +368.095710,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +368.150154,53.683746,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","29",,,"spmv3",343 +368.150261,0.002080,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +368.203837,4.621910,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","28",,,"sum",347 +368.203950,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +368.203955,4.621494,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","29",,,"sum",351 +368.208553,9.284715,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","28",,,"divide",356 +368.208650,6.894193,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","29",,,"divide",361 +368.217966,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +368.217983,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +368.218107,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +368.218121,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +368.218174,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +368.218187,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +368.218239,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +368.218253,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +368.218500,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +368.218681,54.550997,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","30",,,"spmv3",379 +368.218847,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +368.273232,53.528261,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","31",,,"spmv3",389 +368.273363,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +368.326759,4.620181,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","30",,,"sum",393 +368.326864,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +368.326868,4.618678,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","31",,,"sum",397 +368.331493,9.243627,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","30",,,"divide",402 +368.331582,6.905105,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","31",,,"divide",407 +368.340822,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +368.340838,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +368.340949,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +368.340963,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +368.341014,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +368.341027,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +368.341074,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +368.341087,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +368.341332,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +368.341510,54.552756,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","32",,,"spmv3",425 +368.341767,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +368.396063,53.501382,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","33",,,"spmv3",435 +368.396205,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +368.449563,4.618902,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","32",,,"sum",439 +368.449668,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +368.449672,4.618358,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","33",,,"sum",443 +368.454274,9.294539,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","32",,,"divide",448 +368.454368,6.894097,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","33",,,"divide",453 +368.463700,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +368.463717,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +368.463836,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +368.463851,0.001183,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +368.463899,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +368.463912,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +368.463954,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +368.463967,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +368.464048,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +368.464065,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +368.464066,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +368.464155,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +368.464172,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +368.464173,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +376.787798,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +376.787845,0.061727,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +376.787946,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +376.788110,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +376.788274,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +376.788438,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +376.788602,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +376.788765,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +376.788929,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +376.789093,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +376.789257,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +376.789421,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +376.789585,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +376.789748,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +376.789913,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +376.790077,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +376.790241,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +376.790405,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +376.790569,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +376.790734,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +376.790899,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +376.791064,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +376.791228,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +376.791392,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +376.791556,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +376.791720,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +376.791884,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +376.792048,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +376.792212,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +376.792376,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +376.792540,0.039295,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +376.792581,0.142558,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +376.792725,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +376.792889,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +376.793053,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +376.793218,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +376.793382,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +376.793547,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +376.793712,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +376.793877,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +376.794042,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +376.794207,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +376.794374,0.170205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +376.794545,0.166654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +376.794713,0.168445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +376.794883,0.167357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +376.795051,0.167710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +376.795220,0.168061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +376.795390,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +376.795555,0.167230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +376.795724,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +376.795888,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +376.796054,0.165726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +376.796221,0.166653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +376.796388,0.169149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +376.796559,0.167837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +376.796728,0.168510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +376.796898,0.167485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +376.797066,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +376.797233,0.165534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +376.797400,0.166941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +376.797568,0.166557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +376.797736,0.168190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +376.797905,0.166237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +376.798073,0.166365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +376.798240,0.165982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +376.798408,0.193181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +376.798602,0.221821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +376.798825,0.225436,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +376.799052,0.218877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +376.799272,0.223356,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +376.799496,0.225756,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +376.799723,0.226141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +376.799951,0.220284,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +376.800172,0.228125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +376.800402,0.227613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +376.800630,0.222364,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +376.800854,0.228893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +376.801084,0.220220,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +376.801305,0.224988,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +376.801532,0.219133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +376.801752,0.209404,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +376.801963,0.222589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +376.802187,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +376.802375,0.170365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +376.802546,0.170653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +376.802718,0.208861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +376.802928,0.219932,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +376.803150,0.222909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +376.803374,0.216956,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +376.803592,0.224221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +376.803817,0.216828,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +376.804036,0.220413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +376.804257,0.212028,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +376.804471,0.209693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +376.804682,0.219996,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +376.804903,0.219869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +376.805124,0.224092,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +376.805349,0.226524,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +376.805577,0.224733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +376.805803,0.234012,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +376.806038,0.204829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +376.806244,0.171069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +376.806416,0.165885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +376.806584,0.167742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +376.806752,0.165085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +376.806919,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +376.807084,0.169374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +376.807255,0.167965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +376.807424,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +376.807589,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +376.807755,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +376.807919,0.171933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +376.808092,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +376.808258,0.166014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +376.808425,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +376.808590,0.159454,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +376.808751,0.021248,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +376.808773,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +376.808938,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +376.809102,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +376.809295,0.201245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +376.809498,0.197084,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +376.809696,0.204509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +376.809902,0.204413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +376.810107,0.202108,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +376.810311,0.203165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +376.810515,0.202109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +376.810719,0.199197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +376.810919,0.202460,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +376.811123,0.195901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +376.811320,0.200221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +376.811522,0.198653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +376.811722,0.196221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +376.811919,0.171197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +376.812092,0.172349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +376.812265,0.196509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +376.812463,0.193757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +376.812658,0.194365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +376.812854,0.204508,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +376.813059,0.194333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +376.813255,0.196573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +376.813453,0.189373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +376.813643,0.199805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +376.813844,0.202941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +376.814049,0.194333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +376.814244,0.195645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +376.814441,0.193661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +376.814636,0.197885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +376.814835,0.187773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +376.815024,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +376.815205,0.180829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +376.815387,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +376.815571,0.191453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +376.815764,0.188637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +376.815954,0.186589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +376.816142,0.190429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +376.816333,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +376.816522,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +376.816709,0.183837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +376.816894,0.189789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +376.817085,0.183197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +376.817269,0.183389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +376.817454,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +376.817640,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +376.817822,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +376.818008,0.186301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +376.818195,0.186493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +376.818383,0.185117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +376.818570,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +376.818755,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +376.818937,0.186461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +376.819125,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +376.819311,0.183869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +376.819496,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +376.819682,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +376.819866,0.182493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +376.820049,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +376.820234,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +376.820416,0.189373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +376.820606,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +376.820793,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +376.820978,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +376.821160,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +376.821350,0.189661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +376.821541,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +376.821724,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +376.821907,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +376.822093,0.183453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +376.822278,0.191229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +376.822471,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +376.822658,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +376.822844,0.175230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +376.823020,0.177149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +376.823199,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +376.823380,0.175645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +376.823557,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +376.823742,0.170845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +376.823914,0.177917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +376.824094,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +376.824281,0.186845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +376.824469,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +376.824652,0.167710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +376.824821,0.123358,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +376.824946,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +376.825137,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +376.825320,0.174205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +376.825495,0.170845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +376.825667,0.172573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +376.825842,0.184093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +376.826027,0.174237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +376.826202,0.176702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +376.826380,0.188413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +376.826570,0.185373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +376.826756,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +376.826939,0.186205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +376.827126,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +376.827310,0.179101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +376.827490,0.177245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +376.827668,0.174077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +376.827844,0.183901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +376.828029,0.176029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +376.828206,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +376.828389,0.181181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +376.828571,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +376.828758,0.181438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +376.828940,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +376.829123,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +376.829308,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +376.829493,0.178781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +376.829673,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +376.829853,0.186653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +376.830041,0.108990,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +376.830151,0.108574,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +376.830260,0.174974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +376.830437,0.181822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +376.830620,0.186461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +376.830807,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +376.830991,0.191933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +376.831184,0.185373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +376.831370,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +376.831557,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +376.831742,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +376.831932,0.182686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +376.832116,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +376.832303,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +376.832486,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +376.832672,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +376.832859,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +376.833047,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +376.833232,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +376.833418,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +376.833607,0.188861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +376.833797,0.213692,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +376.834012,0.211517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +376.834225,0.199069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +376.834425,0.194429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +376.834621,0.205181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +376.834827,0.202493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +376.835031,0.191965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +376.835224,0.197660,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +376.835423,0.191069,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +376.835857,64.603795,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","34",,,"spmv3",473 +376.836301,0.001984,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +376.836415,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +376.836579,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +376.836744,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +376.836909,0.172253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +376.837085,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +376.837250,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +376.837415,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +376.837580,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +376.837746,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +376.837912,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +376.838087,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +376.838252,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +376.838417,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +376.838583,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +376.838748,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +376.838914,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +376.839079,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +376.839245,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +376.839410,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +376.839576,0.165309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +376.839744,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +376.839909,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +376.840075,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +376.840241,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +376.840407,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +376.840572,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +376.840737,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +376.840902,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +376.841068,0.100414,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +376.841171,0.122942,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +376.841296,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +376.841462,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +376.841627,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +376.841793,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +376.841958,0.171965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +376.842132,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +376.842298,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +376.842464,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +376.842629,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +376.842793,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +376.842959,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +376.843125,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +376.843291,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +376.843457,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +376.843622,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +376.843787,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +376.843952,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +376.844117,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +376.844284,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +376.844449,0.169277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +376.844620,0.167037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +376.844789,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +376.844959,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +376.845124,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +376.845289,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +376.845455,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +376.845620,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +376.845785,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +376.845949,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +376.846115,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +376.846281,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +376.846447,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +376.846612,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +376.846777,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +376.846942,0.172285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +376.847117,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +376.847282,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +376.847448,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +376.847614,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +376.847780,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +376.847945,0.171709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +376.848118,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +376.848285,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +376.848450,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +376.848615,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +376.848781,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +376.848946,0.172030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +376.849120,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +376.849287,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +376.849452,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +376.849617,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +376.849783,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +376.849949,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +376.850114,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +376.850281,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +376.850445,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +376.850610,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +376.850775,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +376.850940,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +376.851107,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +376.851272,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +376.851438,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +376.851604,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +376.851770,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +376.851936,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +376.852101,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +376.852266,0.165150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +376.852433,0.167645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +376.852603,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +376.852771,0.165405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +376.852939,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +376.853106,0.166045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +376.853274,0.166237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +376.853442,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +376.853609,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +376.853777,0.167581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +376.853946,0.175517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +376.854124,0.166910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +376.854293,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +376.854462,0.166653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +376.854630,0.167518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +376.854799,0.165757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +376.854968,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +376.855136,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +376.855302,0.166462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +376.855472,0.014752,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +376.855488,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +376.855654,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +376.855820,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +376.855987,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +376.856153,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +376.856317,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +376.856483,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +376.856649,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +376.856815,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +376.856981,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +376.857146,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +376.857313,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +376.857479,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +376.857644,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +376.857809,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +376.857975,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +376.858140,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +376.858305,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +376.858472,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +376.858637,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +376.858804,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +376.858970,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +376.859136,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +376.859301,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +376.859466,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +376.859630,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +376.859796,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +376.859962,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +376.860136,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +376.860302,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +376.860468,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +376.860634,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +376.860799,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +376.860964,0.172093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +376.861138,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +376.861304,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +376.861469,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +376.861635,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +376.861801,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +376.861966,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +376.862133,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +376.862299,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +376.862466,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +376.862631,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +376.862797,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +376.862962,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +376.863127,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +376.863292,0.165534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +376.863460,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +376.863626,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +376.863792,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +376.863957,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +376.864122,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +376.864287,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +376.864453,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +376.864618,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +376.864784,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +376.864949,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +376.865115,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +376.865280,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +376.865447,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +376.865613,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +376.865779,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +376.865945,0.175101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +376.866122,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +376.866287,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +376.866453,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +376.866619,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +376.866784,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +376.866951,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +376.867115,0.165597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +376.867283,0.167198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +376.867452,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +376.867618,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +376.867783,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +376.867947,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +376.868114,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +376.868279,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +376.868445,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +376.868611,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +376.868777,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +376.868944,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +376.869117,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +376.869282,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +376.869448,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +376.869614,0.136318,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +376.869753,0.041503,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +376.869797,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +376.869964,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +376.870130,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +376.870296,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +376.870460,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +376.870625,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +376.870791,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +376.870956,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +376.871122,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +376.871287,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +376.871453,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +376.871619,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +376.871784,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +376.871950,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +376.872116,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +376.872281,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +376.872446,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +376.872613,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +376.872779,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +376.872944,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +376.873110,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +376.873275,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +376.873441,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +376.873607,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +376.873773,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +376.873938,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +376.874103,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +376.874269,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +376.874435,0.060799,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +376.874499,0.062015,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +376.874562,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +376.874727,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +376.874894,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +376.875060,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +376.875227,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +376.875392,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +376.875557,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +376.875723,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +376.875889,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +376.876055,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +376.876220,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +376.876386,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +376.876552,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +376.876718,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +376.876883,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +376.877048,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +376.877214,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +376.877379,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +376.877544,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +376.877710,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +376.877876,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +376.878042,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +376.878207,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +376.878375,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +376.878541,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +376.878707,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +376.878872,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +376.879038,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +376.879204,0.039359,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +376.900460,53.497957,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","35",,,"spmv3",483 +376.900580,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +376.953957,4.620694,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","34",,,"sum",487 +376.954072,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +376.954077,4.620182,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","35",,,"sum",491 +376.958689,9.280011,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","34",,,"divide",496 +376.958752,6.886994,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","35",,,"divide",501 +376.968127,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +376.968149,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +376.968325,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +376.968345,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +376.968368,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +376.968386,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +376.968399,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +376.968416,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +376.968645,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +376.968803,54.572852,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","36",,,"spmv3",519 +376.968965,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +377.023375,53.561668,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","37",,,"spmv3",529 +377.023511,0.001856,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +377.076936,4.619030,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","36",,,"sum",533 +377.077065,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +377.077070,4.618870,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","37",,,"sum",537 +377.081694,9.246060,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","36",,,"divide",542 +377.081729,6.910162,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","37",,,"divide",547 +377.090980,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +377.091000,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +377.091097,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +377.091115,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +377.091208,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +377.091225,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +377.091250,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +377.091266,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +377.091566,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +377.091749,54.578004,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","38",,,"spmv3",565 +377.091962,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +377.146326,53.570756,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","39",,,"spmv3",575 +377.146457,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +377.199896,4.620982,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","38",,,"sum",579 +377.200042,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +377.200046,4.619798,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","39",,,"sum",583 +377.204659,9.280299,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","38",,,"divide",588 +377.204740,6.903985,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","39",,,"divide",593 +377.214076,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +377.214097,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +377.214256,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +377.214274,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +377.214320,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +377.214337,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +377.214376,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +377.214393,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +377.214641,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +377.214822,54.488790,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","40",,,"spmv3",611 +377.214978,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +377.269310,53.555044,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","41",,,"spmv3",621 +377.269394,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +377.322864,4.620406,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","40",,,"sum",625 +377.322935,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +377.322940,4.618550,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","41",,,"sum",629 +377.327620,9.254379,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","40",,,"divide",634 +377.327637,6.913489,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","41",,,"divide",639 +377.336912,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +377.336932,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +377.337034,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +377.337052,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +377.337097,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +377.337114,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +377.337161,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +377.337178,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +377.337446,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +377.337709,54.530549,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","42",,,"spmv3",657 +377.337943,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +377.392239,53.528324,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","43",,,"spmv3",667 +377.392331,0.001920,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +377.445766,4.619830,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","42",,,"sum",671 +377.445924,0.001695,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +377.445928,4.619446,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","43",,,"sum",675 +377.450525,9.273515,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","42",,,"divide",680 +377.450613,6.906289,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","43",,,"divide",685 +377.459913,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +377.459934,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +377.460080,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +377.460099,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +377.460143,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +377.460160,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +377.460196,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +377.460212,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +377.460284,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +377.460305,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +377.460306,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +377.460358,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +377.460378,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +377.460379,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +385.574721,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +385.574768,0.061887,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +385.574876,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +385.575041,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +385.575205,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +385.575369,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +385.575533,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +385.575697,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +385.575861,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +385.576025,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +385.576189,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +385.576352,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +385.576516,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +385.576680,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +385.576844,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +385.577008,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +385.577172,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +385.577337,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +385.577501,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +385.577665,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +385.577829,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +385.577994,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +385.578158,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +385.578324,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +385.578489,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +385.578653,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +385.578817,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +385.578982,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +385.579146,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +385.579311,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +385.579475,0.039199,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +385.579515,0.142814,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +385.579659,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +385.579823,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +385.579987,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +385.580151,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +385.580315,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +385.580479,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +385.580644,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +385.580808,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +385.580972,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +385.581136,0.166814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +385.581304,0.167773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +385.581474,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +385.581642,0.165438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +385.581808,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +385.581973,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +385.582138,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +385.582302,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +385.582466,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +385.582632,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +385.582800,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +385.582967,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +385.583131,0.164990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +385.583297,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +385.583462,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +385.583627,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +385.583792,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +385.583956,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +385.584121,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +385.584286,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +385.584451,0.164542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +385.584617,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +385.584782,0.205533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +385.584989,0.214876,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +385.585205,0.213149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +385.585420,0.222492,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +385.585644,0.223484,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +385.585868,0.227581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +385.586097,0.220060,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +385.586319,0.214557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +385.586535,0.215068,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +385.586751,0.226685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +385.586979,0.215612,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +385.587196,0.215741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +385.587413,0.224092,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +385.587638,0.222236,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +385.587862,0.208285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +385.588071,0.200381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +385.588273,0.167293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +385.588441,0.165949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +385.588608,0.195901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +385.588805,0.208829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +385.589015,0.201501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +385.589218,0.209500,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +385.589429,0.203229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +385.589633,0.204765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +385.589839,0.206332,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +385.590047,0.199613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +385.590248,0.208765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +385.590458,0.208156,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +385.590667,0.203517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +385.590872,0.211517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +385.591085,0.215612,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +385.591302,0.212925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +385.591516,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +385.591702,0.169181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +385.591873,0.166653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +385.592040,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +385.592205,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +385.592369,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +385.592533,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +385.592699,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +385.592863,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +385.593028,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +385.593192,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +385.593356,0.167070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +385.593525,0.165245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +385.593691,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +385.593855,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +385.594019,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +385.594183,0.190525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +385.594375,0.197629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +385.594573,0.192605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +385.594767,0.200348,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +385.594969,0.195229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +385.595165,0.186237,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +385.595353,0.026208,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +385.595380,0.200381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +385.595582,0.192700,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +385.595776,0.193597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +385.595970,0.196893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +385.596169,0.195549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +385.596365,0.177405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +385.596544,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +385.596708,0.190845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +385.596900,0.199869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +385.597102,0.197949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +385.597301,0.189501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +385.597491,0.197981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +385.597691,0.193277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +385.597885,0.190396,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +385.598077,0.195101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +385.598273,0.191037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +385.598465,0.191421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +385.598658,0.194173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +385.598853,0.194141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +385.599049,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +385.599236,0.175389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +385.599412,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +385.599593,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +385.599775,0.180669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +385.599957,0.180477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +385.600139,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +385.600321,0.183645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +385.600506,0.178462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +385.600686,0.177149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +385.600864,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +385.601051,0.178973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +385.601231,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +385.601406,0.176093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +385.601583,0.175741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +385.601760,0.177405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +385.601939,0.181630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +385.602122,0.176797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +385.602300,0.176669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +385.602477,0.177117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +385.602656,0.175773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +385.602833,0.176541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +385.603011,0.178013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +385.603190,0.176414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +385.603367,0.174205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +385.603543,0.181885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +385.603726,0.175517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +385.603903,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +385.604082,0.172765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +385.604256,0.174173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +385.604431,0.173726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +385.604606,0.174557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +385.604782,0.180029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +385.604963,0.171357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +385.605136,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +385.605317,0.179389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +385.605498,0.177533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +385.605676,0.179646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +385.605857,0.173757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +385.606032,0.169917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +385.606203,0.173309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +385.606378,0.167678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +385.606547,0.170909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +385.606719,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +385.606885,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +385.607056,0.175902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +385.607233,0.173982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +385.607408,0.168637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +385.607578,0.170141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +385.607749,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +385.607928,0.170558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +385.608100,0.170333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +385.608271,0.166333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +385.608439,0.171709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +385.608612,0.168542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +385.608781,0.174301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +385.608957,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +385.609141,0.182269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +385.609324,0.171101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +385.609496,0.171165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +385.609669,0.173566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +385.609844,0.167741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +385.610013,0.175741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +385.610189,0.169245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +385.610360,0.175549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +385.610537,0.175518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +385.610713,0.128702,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +385.610844,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +385.611026,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +385.611208,0.179869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +385.611389,0.172253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +385.611562,0.173053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +385.611736,0.171069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +385.611909,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +385.612077,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +385.612245,0.174557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +385.612421,0.177181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +385.612600,0.175614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +385.612776,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +385.612958,0.179005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +385.613138,0.178493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +385.613318,0.169405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +385.613489,0.171453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +385.613661,0.170430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +385.613833,0.169117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +385.614003,0.169469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +385.614174,0.174973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +385.614350,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +385.614532,0.178525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +385.614712,0.193181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +385.614907,0.187805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +385.615096,0.191901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +385.615289,0.190333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +385.615480,0.188253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +385.615670,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +385.615855,0.115358,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +385.615972,0.114334,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +385.616087,0.197469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +385.616286,0.192605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +385.616480,0.174077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +385.616655,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +385.616820,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +385.616984,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +385.617148,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +385.617313,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +385.617477,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +385.617641,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +385.617806,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +385.617970,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +385.618134,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +385.618299,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +385.618464,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +385.618628,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +385.618792,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +385.618956,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +385.619120,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +385.619284,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +385.619449,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +385.619613,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +385.619778,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +385.619942,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +385.620106,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +385.620271,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +385.620435,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +385.620599,0.160893,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +385.621215,64.643282,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","44",,,"spmv3",705 +385.621585,0.001920,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +385.621696,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +385.621861,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +385.622026,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +385.622193,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +385.622358,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +385.622524,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +385.622688,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +385.622854,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +385.623018,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +385.623184,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +385.623349,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +385.623515,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +385.623680,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +385.623845,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +385.624010,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +385.624175,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +385.624340,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +385.624506,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +385.624671,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +385.624836,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +385.625001,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +385.625167,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +385.625333,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +385.625499,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +385.625665,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +385.625830,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +385.625996,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +385.626162,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +385.626328,0.100190,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +385.626432,0.122654,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +385.626556,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +385.626722,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +385.626888,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +385.627053,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +385.627219,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +385.627384,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +385.627550,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +385.627717,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +385.627882,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +385.628048,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +385.628213,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +385.628381,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +385.628547,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +385.628712,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +385.628876,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +385.629043,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +385.629209,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +385.629375,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +385.629541,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +385.629706,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +385.629871,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +385.630037,0.164766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +385.630203,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +385.630369,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +385.630534,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +385.630701,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +385.630865,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +385.631031,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +385.631197,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +385.631361,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +385.631527,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +385.631693,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +385.631858,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +385.632023,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +385.632190,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +385.632355,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +385.632521,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +385.632688,0.170845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +385.632860,0.171517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +385.633034,0.171070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +385.633207,0.170877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +385.633380,0.171517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +385.633553,0.168157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +385.633724,0.166718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +385.633893,0.167805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +385.634062,0.166845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +385.634232,0.169693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +385.634404,0.168574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +385.634575,0.167165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +385.634744,0.168317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +385.634915,0.166718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +385.635084,0.167454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +385.635254,0.166781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +385.635423,0.165981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +385.635591,0.171454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +385.635765,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +385.635931,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +385.636097,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +385.636262,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +385.636427,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +385.636594,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +385.636760,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +385.636925,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +385.637090,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +385.637256,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +385.637421,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +385.637587,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +385.637752,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +385.637917,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +385.638083,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +385.638248,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +385.638415,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +385.638580,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +385.638746,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +385.638912,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +385.639077,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +385.639243,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +385.639409,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +385.639574,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +385.639739,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +385.639905,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +385.640071,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +385.640237,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +385.640402,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +385.640567,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +385.640733,0.014944,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +385.640750,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +385.640916,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +385.641082,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +385.641248,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +385.641414,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +385.641580,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +385.641746,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +385.641914,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +385.642081,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +385.642246,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +385.642412,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +385.642577,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +385.642743,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +385.642908,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +385.643074,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +385.643239,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +385.643404,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +385.643569,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +385.643735,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +385.643901,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +385.644067,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +385.644232,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +385.644398,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +385.644563,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +385.644728,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +385.644893,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +385.645060,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +385.645226,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +385.645392,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +385.645558,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +385.645723,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +385.645888,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +385.646054,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +385.646219,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +385.646385,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +385.646551,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +385.646716,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +385.646881,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +385.647047,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +385.647214,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +385.647379,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +385.647544,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +385.647709,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +385.647874,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +385.648040,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +385.648206,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +385.648372,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +385.648537,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +385.648702,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +385.648867,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +385.649033,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +385.649199,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +385.649364,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +385.649531,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +385.649696,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +385.649863,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +385.650029,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +385.650193,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +385.650359,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +385.650524,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +385.650690,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +385.650855,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +385.651021,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +385.651187,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +385.651352,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +385.651518,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +385.651682,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +385.651847,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +385.652012,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +385.652178,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +385.652343,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +385.652508,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +385.652673,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +385.652839,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +385.653004,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +385.653171,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +385.653337,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +385.653503,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +385.653669,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +385.653834,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +385.653999,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +385.654166,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +385.654332,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +385.654497,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +385.654663,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +385.654828,0.136189,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +385.654967,0.042592,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +385.655012,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +385.655177,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +385.655342,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +385.655507,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +385.655674,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +385.655839,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +385.656005,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +385.656171,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +385.656336,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +385.656501,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +385.656666,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +385.656831,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +385.656997,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +385.657163,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +385.657329,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +385.657495,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +385.657659,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +385.657826,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +385.657992,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +385.658157,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +385.658323,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +385.658487,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +385.658652,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +385.658818,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +385.658984,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +385.659150,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +385.659315,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +385.659481,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +385.659647,0.059327,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +385.659709,0.062303,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +385.659775,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +385.659941,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +385.660105,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +385.660271,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +385.660436,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +385.660602,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +385.660769,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +385.660934,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +385.661100,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +385.661266,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +385.661431,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +385.661597,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +385.661763,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +385.661928,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +385.662094,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +385.662258,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +385.662424,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +385.662589,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +385.662755,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +385.662921,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +385.663087,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +385.663252,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +385.663419,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +385.663584,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +385.663751,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +385.663916,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +385.664082,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +385.664248,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +385.664413,0.040031,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +385.685857,53.414183,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","45",,,"spmv3",715 +385.686012,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +385.739271,4.619766,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","44",,,"sum",719 +385.739403,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +385.739410,4.619126,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","45",,,"sum",723 +385.744035,9.255308,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","44",,,"divide",728 +385.744125,6.896049,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","45",,,"divide",733 +385.753354,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +385.753378,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +385.753644,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +385.753667,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +385.753843,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +385.753865,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +385.754055,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +385.754078,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +385.754461,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +385.754836,54.655859,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","46",,,"spmv3",751 +385.754994,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +385.809491,53.578532,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","47",,,"spmv3",761 +385.809604,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +385.863069,4.619766,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","46",,,"sum",765 +385.863182,0.011104,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +385.863198,4.618934,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","47",,,"sum",769 +385.867798,9.273515,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","46",,,"divide",774 +385.867888,6.894386,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","47",,,"divide",779 +385.877122,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +385.877146,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +385.877419,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +385.877441,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +385.877614,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +385.877637,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +385.877773,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +385.877795,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +385.878065,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +385.878348,54.517717,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","48",,,"spmv3",797 +385.878508,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +385.932865,53.477349,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","49",,,"spmv3",807 +385.932976,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +385.986342,4.620374,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","48",,,"sum",811 +385.986480,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +385.986486,4.619798,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","49",,,"sum",815 +385.991071,9.278251,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","48",,,"divide",820 +385.991215,6.896401,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","49",,,"divide",825 +386.000438,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +386.000462,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +386.000568,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +386.000592,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +386.000637,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +386.000657,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +386.000698,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +386.000718,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +386.000941,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +386.001152,54.559988,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","50",,,"spmv3",843 +386.001310,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +386.055711,53.550660,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","51",,,"spmv3",853 +386.055837,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +386.109261,4.622518,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","50",,,"sum",857 +386.109385,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +386.109390,4.619254,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","51",,,"sum",861 +386.113990,9.277739,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","50",,,"divide",866 +386.114083,6.891889,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","51",,,"divide",871 +386.123348,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +386.123372,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +386.123488,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +386.123510,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +386.123574,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +386.123608,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +386.123636,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +386.123656,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +386.123896,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +386.124044,54.640563,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","52",,,"spmv3",889 +386.124192,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +386.178684,53.527013,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","53",,,"spmv3",899 +386.178822,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +386.232210,4.619318,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","52",,,"sum",903 +386.232323,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +386.232329,4.618070,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","53",,,"sum",907 +386.236936,9.291435,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","52",,,"divide",912 +386.237026,6.910193,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","53",,,"divide",917 +386.246340,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +386.246364,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +386.246494,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +386.246516,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +386.246556,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +386.246576,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +386.246611,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +386.246631,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +386.246687,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +386.246711,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +386.246712,0.005247,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +386.246760,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +386.246783,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +386.246784,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +394.510492,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +394.510539,0.061695,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +394.510648,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +394.510813,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +394.510976,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +394.511140,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +394.511304,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +394.511468,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +394.511632,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +394.511796,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +394.511961,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +394.512125,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +394.512289,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +394.512453,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +394.512617,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +394.512780,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +394.512944,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +394.513108,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +394.513272,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +394.513436,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +394.513601,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +394.513765,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +394.513931,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +394.514095,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +394.514259,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +394.514424,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +394.514588,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +394.514752,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +394.514916,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +394.515081,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +394.515245,0.039359,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +394.515286,0.142558,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +394.515429,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +394.515594,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +394.515758,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +394.515922,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +394.516086,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +394.516250,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +394.516415,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +394.516579,0.165918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +394.516746,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +394.516912,0.166173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +394.517079,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +394.517243,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +394.517407,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +394.517571,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +394.517736,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +394.517901,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +394.518066,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +394.518230,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +394.518396,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +394.518559,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +394.518724,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +394.518888,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +394.519052,0.171229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +394.519224,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +394.519388,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +394.519552,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +394.519717,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +394.519881,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +394.520046,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +394.520210,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +394.520374,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +394.520539,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +394.520703,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +394.520867,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +394.521031,0.191293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +394.521224,0.202141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +394.521427,0.203068,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +394.521631,0.210365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +394.521843,0.209341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +394.522054,0.213468,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +394.522268,0.211005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +394.522481,0.210428,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +394.522692,0.209693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +394.522903,0.205341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +394.523110,0.211708,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +394.523323,0.209949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +394.523534,0.209372,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +394.523744,0.204157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +394.523950,0.220829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +394.524172,0.186493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +394.524360,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +394.524525,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +394.524690,0.190013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +394.524882,0.208701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +394.525091,0.203452,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +394.525296,0.203101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +394.525500,0.202077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +394.525704,0.199805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +394.525905,0.203996,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +394.526110,0.199517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +394.526311,0.205757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +394.526518,0.212668,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +394.526732,0.209885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +394.526943,0.210301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +394.527155,0.211484,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +394.527367,0.209981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +394.527578,0.172221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +394.527752,0.165501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +394.527918,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +394.528085,0.171357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +394.528257,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +394.528421,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +394.528585,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +394.528750,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +394.528914,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +394.529078,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +394.529242,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +394.529408,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +394.529574,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +394.529739,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +394.529903,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +394.530067,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +394.530231,0.178813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +394.530411,0.194909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +394.530607,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +394.530794,0.025632,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +394.530821,0.194813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +394.531017,0.194589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +394.531213,0.199004,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +394.531413,0.198493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +394.531613,0.195421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +394.531809,0.190717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +394.532001,0.202973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +394.532206,0.196668,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +394.532404,0.192925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +394.532598,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +394.532762,0.176925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +394.532941,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +394.533135,0.196828,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +394.533333,0.194141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +394.533529,0.190589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +394.533720,0.193309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +394.533915,0.198237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +394.534114,0.199709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +394.534315,0.192317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +394.534509,0.189501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +394.534700,0.194428,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +394.534896,0.190333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +394.535087,0.204861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +394.535293,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +394.535476,0.179453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +394.535657,0.177949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +394.535836,0.179325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +394.536016,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +394.536199,0.173854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +394.536374,0.175229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +394.536550,0.178749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +394.536730,0.181757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +394.536913,0.182621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +394.537097,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +394.537281,0.179197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +394.537461,0.178429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +394.537641,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +394.537827,0.181981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +394.538010,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +394.538197,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +394.538382,0.186237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +394.538569,0.176958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +394.538747,0.184733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +394.538933,0.191197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +394.539125,0.184670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +394.539311,0.178301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +394.539491,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +394.539673,0.179485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +394.539854,0.187997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +394.540043,0.186877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +394.540231,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +394.540414,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +394.540596,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +394.540780,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +394.540966,0.189405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +394.541157,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +394.541342,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +394.541524,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +394.541706,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +394.541896,0.177629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +394.542075,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +394.542247,0.177246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +394.542426,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +394.542599,0.171581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +394.542771,0.170781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +394.542943,0.178077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +394.543123,0.178749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +394.543303,0.170622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +394.543474,0.171101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +394.543647,0.175773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +394.543824,0.168349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +394.543993,0.169534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +394.544164,0.169277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +394.544334,0.173341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +394.544509,0.170589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +394.544681,0.178813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +394.544861,0.182174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +394.545044,0.178685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +394.545224,0.170109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +394.545395,0.170237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +394.545567,0.170365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +394.545738,0.166590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +394.545906,0.169117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +394.546076,0.175421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +394.546253,0.179037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +394.546433,0.124798,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +394.546559,0.179005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +394.546740,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +394.546921,0.180733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +394.547103,0.177438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +394.547282,0.170749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +394.547454,0.170365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +394.547625,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +394.547793,0.166110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +394.547960,0.171101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +394.548132,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +394.548311,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +394.548492,0.178365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +394.548672,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +394.548854,0.179965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +394.549035,0.172894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +394.549209,0.168797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +394.549379,0.173469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +394.549553,0.167485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +394.549722,0.169214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +394.549892,0.172893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +394.550066,0.182781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +394.550250,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +394.550431,0.190493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +394.550623,0.189917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +394.550814,0.194141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +394.551010,0.186269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +394.551197,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +394.551385,0.188317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +394.551575,0.114942,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +394.551691,0.120894,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +394.551813,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +394.552004,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +394.552191,0.186397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +394.552379,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +394.552543,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +394.552707,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +394.552871,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +394.553035,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +394.553199,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +394.553363,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +394.553527,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +394.553692,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +394.553856,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +394.554020,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +394.554184,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +394.554348,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +394.554513,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +394.554676,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +394.554841,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +394.555005,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +394.555168,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +394.555333,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +394.555497,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +394.555661,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +394.555825,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +394.555990,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +394.556154,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +394.556318,0.161149,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +394.556646,64.623859,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","54",,,"spmv3",937 +394.556932,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +394.557033,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +394.557199,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +394.557364,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +394.557531,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +394.557696,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +394.557862,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +394.558028,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +394.558193,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +394.558358,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +394.558523,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +394.558689,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +394.558855,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +394.559019,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +394.559184,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +394.559349,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +394.559514,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +394.559680,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +394.559844,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +394.560010,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +394.560174,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +394.560340,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +394.560505,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +394.560670,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +394.560835,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +394.561001,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +394.561166,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +394.561331,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +394.561496,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +394.561662,0.100414,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +394.561765,0.123518,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +394.561891,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +394.562057,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +394.562222,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +394.562389,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +394.562554,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +394.562719,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +394.562885,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +394.563051,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +394.563217,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +394.563383,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +394.563549,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +394.563715,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +394.563880,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +394.564045,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +394.564210,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +394.564375,0.164542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +394.564542,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +394.564709,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +394.564874,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +394.565040,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +394.565206,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +394.565372,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +394.565538,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +394.565705,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +394.565871,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +394.566037,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +394.566202,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +394.566368,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +394.566534,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +394.566700,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +394.566865,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +394.567030,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +394.567197,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +394.567363,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +394.567528,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +394.567694,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +394.567859,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +394.568025,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +394.568190,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +394.568355,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +394.568520,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +394.568688,0.170781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +394.568861,0.168990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +394.569032,0.168734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +394.569203,0.170429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +394.569376,0.166653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +394.569544,0.165566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +394.569712,0.167485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +394.569880,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +394.570047,0.169789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +394.570219,0.168542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +394.570390,0.167965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +394.570560,0.168381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +394.570730,0.169342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +394.570901,0.166494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +394.571069,0.166429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +394.571239,0.168605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +394.571409,0.166366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +394.571578,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +394.571747,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +394.571913,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +394.572079,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +394.572244,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +394.572409,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +394.572575,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +394.572741,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +394.572908,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +394.573074,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +394.573240,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +394.573406,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +394.573571,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +394.573736,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +394.573901,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +394.574065,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +394.574231,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +394.574395,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +394.574561,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +394.574727,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +394.574893,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +394.575058,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +394.575224,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +394.575390,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +394.575556,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +394.575722,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +394.575887,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +394.576053,0.014560,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +394.576070,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +394.576236,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +394.576401,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +394.576567,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +394.576734,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +394.576900,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +394.577065,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +394.577232,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +394.577399,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +394.577565,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +394.577731,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +394.577896,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +394.578061,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +394.578226,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +394.578392,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +394.578557,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +394.578722,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +394.578888,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +394.579053,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +394.579218,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +394.579384,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +394.579550,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +394.579715,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +394.579881,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +394.580046,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +394.580211,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +394.580377,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +394.580542,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +394.580709,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +394.580875,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +394.581041,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +394.581207,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +394.581372,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +394.581538,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +394.581703,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +394.581869,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +394.582033,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +394.582199,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +394.582364,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +394.582529,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +394.582695,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +394.582860,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +394.583026,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +394.583191,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +394.583357,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +394.583522,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +394.583687,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +394.583853,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +394.584019,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +394.584185,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +394.584349,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +394.584514,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +394.584680,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +394.584846,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +394.585011,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +394.585176,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +394.585341,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +394.585507,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +394.585671,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +394.585836,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +394.586000,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +394.586166,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +394.586332,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +394.586497,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +394.586663,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +394.586828,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +394.586992,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +394.587157,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +394.587321,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +394.587487,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +394.587651,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +394.587817,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +394.587982,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +394.588147,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +394.588313,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +394.588478,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +394.588643,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +394.588808,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +394.588973,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +394.589139,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +394.589305,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +394.589470,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +394.589636,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +394.589802,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +394.589967,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +394.590132,0.135710,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +394.590270,0.042431,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +394.590315,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +394.590479,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +394.590644,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +394.590809,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +394.590975,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +394.591143,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +394.591309,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +394.591475,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +394.591642,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +394.591808,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +394.591973,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +394.592139,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +394.592305,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +394.592471,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +394.592637,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +394.592802,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +394.592968,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +394.593134,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +394.593299,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +394.593464,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +394.593630,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +394.593796,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +394.593962,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +394.594127,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +394.594292,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +394.594458,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +394.594623,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +394.594788,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +394.594954,0.060319,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +394.595017,0.062399,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +394.595081,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +394.595246,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +394.595412,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +394.595578,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +394.595745,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +394.595910,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +394.596075,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +394.596241,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +394.596406,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +394.596571,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +394.596736,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +394.596901,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +394.597068,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +394.597235,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +394.597399,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +394.597565,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +394.597730,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +394.597895,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +394.598061,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +394.598226,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +394.598392,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +394.598558,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +394.598724,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +394.598889,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +394.599055,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +394.599220,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +394.599385,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +394.599551,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +394.599717,0.039679,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +394.621269,53.427943,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","55",,,"spmv3",947 +394.621403,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +394.674696,4.619413,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","54",,,"sum",951 +394.674790,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +394.674798,4.618838,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","55",,,"sum",955 +394.679418,9.249707,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","54",,,"divide",960 +394.679509,6.895346,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","55",,,"divide",965 +394.688769,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +394.688796,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +394.688961,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +394.688987,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +394.689027,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +394.689051,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +394.689079,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +394.689103,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +394.689338,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +394.689488,54.622804,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","56",,,"spmv3",983 +394.689749,0.011488,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +394.744111,53.528197,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","57",,,"spmv3",993 +394.744224,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +394.797638,4.619254,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","56",,,"sum",997 +394.797734,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +394.797741,4.619062,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","57",,,"sum",1001 +394.802371,9.253707,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","56",,,"divide",1006 +394.802464,6.905937,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","57",,,"divide",1011 +394.811679,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +394.811705,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +394.811779,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +394.811804,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +394.811840,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +394.811863,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +394.811904,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +394.811928,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +394.812175,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +394.812353,54.518805,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","58",,,"spmv3",1029 +394.812488,0.002304,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +394.866871,53.596068,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","59",,,"spmv3",1039 +394.866972,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +394.920467,4.619349,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","58",,,"sum",1043 +394.920601,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +394.920608,4.619638,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","59",,,"sum",1047 +394.925194,9.289323,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","58",,,"divide",1052 +394.925333,6.910417,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","59",,,"divide",1057 +394.934565,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +394.934595,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +394.934698,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +394.934722,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +394.934759,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +394.934782,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +394.934814,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +394.934837,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +394.935060,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +394.935246,54.596692,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","60",,,"spmv3",1075 +394.935380,0.002624,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +394.989842,53.530245,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","61",,,"spmv3",1085 +394.989938,0.001920,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +395.043372,4.622230,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","60",,,"sum",1089 +395.043470,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +395.043478,4.618134,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","61",,,"sum",1093 +395.048095,9.281163,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","60",,,"divide",1098 +395.048186,6.909297,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","61",,,"divide",1103 +395.057409,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +395.057434,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +395.057544,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +395.057569,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +395.057592,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +395.057616,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +395.057652,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +395.057676,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +395.057894,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +395.058071,54.599060,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","62",,,"spmv3",1121 +395.058201,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +395.112669,53.577861,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","63",,,"spmv3",1131 +395.112774,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +395.166247,4.620725,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","62",,,"sum",1135 +395.166355,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +395.166363,4.618454,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","63",,,"sum",1139 +395.170951,9.280203,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","62",,,"divide",1144 +395.171051,6.895954,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","63",,,"divide",1149 +395.180309,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +395.180338,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +395.180444,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +395.180469,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +395.180498,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +395.180522,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +395.180524,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +395.180548,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +395.180573,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +395.180613,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +395.180614,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +395.180633,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +395.180660,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +395.180661,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +402.557463,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +402.557513,0.061631,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +402.557628,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +402.557792,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +402.557956,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +402.558120,0.171421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +402.558293,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +402.558457,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +402.558620,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +402.558784,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +402.558948,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +402.559112,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +402.559276,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +402.559440,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +402.559604,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +402.559768,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +402.559932,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +402.560096,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +402.560260,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +402.560423,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +402.560587,0.164766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +402.560753,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +402.560918,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +402.561082,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +402.561247,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +402.561411,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +402.561576,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +402.561740,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +402.561904,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +402.562068,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +402.562233,0.039615,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +402.562274,0.143518,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +402.562418,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +402.562583,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +402.562747,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +402.562912,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +402.563076,0.172606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +402.563249,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +402.563413,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +402.563578,0.164958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +402.563745,0.166429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +402.563912,0.168605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +402.564082,0.165310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +402.564248,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +402.564413,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +402.564578,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +402.564742,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +402.564908,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +402.565074,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +402.565239,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +402.565404,0.165341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +402.565571,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +402.565735,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +402.565902,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +402.566068,0.165022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +402.566234,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +402.566399,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +402.566563,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +402.566728,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +402.566892,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +402.567056,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +402.567221,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +402.567385,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +402.567549,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +402.567714,0.169725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +402.567885,0.204669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +402.568091,0.204093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +402.568296,0.205692,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +402.568503,0.196925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +402.568701,0.208541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +402.568911,0.205020,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +402.569117,0.201885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +402.569321,0.206941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +402.569529,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +402.569733,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +402.569937,0.212189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +402.570151,0.202941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +402.570355,0.206204,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +402.570562,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +402.570754,0.198653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +402.570954,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +402.571121,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +402.571286,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +402.571451,0.182781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +402.571635,0.210973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +402.571847,0.216860,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +402.572066,0.220029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +402.572287,0.205341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +402.572494,0.203389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +402.572699,0.199549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +402.572899,0.204444,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +402.573105,0.197853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +402.573305,0.216925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +402.573523,0.202844,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +402.573727,0.196349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +402.573924,0.204701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +402.574130,0.207581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +402.574339,0.202620,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +402.574543,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +402.574728,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +402.574895,0.165917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +402.575062,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +402.575227,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +402.575394,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +402.575557,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +402.575722,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +402.575885,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +402.576049,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +402.576213,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +402.576378,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +402.576542,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +402.576706,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +402.576870,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +402.577034,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +402.577197,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +402.577364,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +402.577529,0.156542,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +402.577687,0.021312,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +402.577710,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +402.577875,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +402.578039,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +402.578204,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +402.578368,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +402.578532,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +402.578696,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +402.578860,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +402.579024,0.176254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +402.579201,0.190812,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +402.579393,0.185853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +402.579580,0.191197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +402.579773,0.192477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +402.579966,0.196573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +402.580164,0.193917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +402.580359,0.194557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +402.580555,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +402.580742,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +402.580928,0.195357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +402.581125,0.194941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +402.581321,0.190588,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +402.581513,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +402.581677,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +402.581860,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +402.582043,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +402.582227,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +402.582416,0.188669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +402.582606,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +402.582797,0.187293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +402.582985,0.190589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +402.583177,0.188317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +402.583367,0.188317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +402.583556,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +402.583746,0.191869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +402.583939,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +402.584124,0.173341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +402.584299,0.175965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +402.584476,0.173373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +402.584651,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +402.584830,0.178653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +402.585010,0.172670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +402.585184,0.177341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +402.585362,0.177501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +402.585541,0.175613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +402.585718,0.175581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +402.585894,0.173149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +402.586069,0.178589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +402.586249,0.177214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +402.586427,0.173117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +402.586601,0.173469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +402.586776,0.173629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +402.586951,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +402.587125,0.173662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +402.587300,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +402.587477,0.175645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +402.587654,0.173053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +402.587828,0.171805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +402.588001,0.174142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +402.588176,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +402.588352,0.176157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +402.588529,0.173629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +402.588704,0.171805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +402.588877,0.175005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +402.589053,0.174206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +402.589228,0.171133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +402.589400,0.174589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +402.589576,0.171773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +402.589749,0.171486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +402.589922,0.173373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +402.590097,0.173245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +402.590271,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +402.590452,0.175805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +402.590629,0.175005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +402.590805,0.173694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +402.590980,0.177053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +402.591158,0.176509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +402.591336,0.174397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +402.591511,0.170749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +402.591683,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +402.591849,0.177053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +402.592028,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +402.592193,0.168381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +402.592362,0.165598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +402.592529,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +402.592695,0.170941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +402.592867,0.121918,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +402.592990,0.169470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +402.593161,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +402.593326,0.166365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +402.593494,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +402.593664,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +402.593830,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +402.593997,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +402.594163,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +402.594329,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +402.594495,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +402.594661,0.166814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +402.594829,0.173277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +402.595003,0.175101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +402.595180,0.172413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +402.595353,0.165342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +402.595520,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +402.595685,0.165085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +402.595852,0.165662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +402.596019,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +402.596184,0.167709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +402.596353,0.166302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +402.596520,0.170301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +402.596692,0.169469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +402.596862,0.172701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +402.597036,0.172382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +402.597210,0.173661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +402.597385,0.175037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +402.597561,0.172893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +402.597735,0.104190,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +402.597840,0.104287,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +402.597946,0.165309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +402.598112,0.164669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +402.598278,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +402.598444,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +402.598609,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +402.598776,0.167166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +402.598944,0.173501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +402.599119,0.169949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +402.599290,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +402.599462,0.172030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +402.599636,0.173789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +402.599810,0.169533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +402.599981,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +402.600147,0.165342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +402.600314,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +402.600480,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +402.600645,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +402.600810,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +402.600975,0.166333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +402.601142,0.170942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +402.601315,0.171453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +402.601487,0.171325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +402.601660,0.189501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +402.601851,0.186205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +402.602038,0.185757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +402.602225,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +402.602409,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +402.602591,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +402.602991,64.626867,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","64",,,"spmv3",1169 +402.603561,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +402.603672,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +402.603838,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +402.604003,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +402.604168,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +402.604333,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +402.604499,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +402.604664,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +402.604829,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +402.604995,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +402.605160,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +402.605326,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +402.605492,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +402.605658,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +402.605822,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +402.605988,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +402.606154,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +402.606319,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +402.606484,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +402.606650,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +402.606815,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +402.606981,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +402.607146,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +402.607312,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +402.607478,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +402.607643,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +402.607808,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +402.607972,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +402.608139,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +402.608305,0.100574,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +402.608407,0.123230,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +402.608533,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +402.608699,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +402.608864,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +402.609030,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +402.609196,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +402.609362,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +402.609527,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +402.609693,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +402.609858,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +402.610024,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +402.610189,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +402.610356,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +402.610521,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +402.610686,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +402.610851,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +402.611017,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +402.611182,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +402.611349,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +402.611514,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +402.611681,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +402.611846,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +402.612012,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +402.612177,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +402.612343,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +402.612508,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +402.612673,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +402.612839,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +402.613004,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +402.613171,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +402.613337,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +402.613502,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +402.613667,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +402.613834,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +402.613998,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +402.614164,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +402.614328,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +402.614494,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +402.614659,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +402.614825,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +402.614991,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +402.615156,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +402.615321,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +402.615485,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +402.615651,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +402.615816,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +402.615982,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +402.616147,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +402.616313,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +402.616478,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +402.616642,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +402.616808,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +402.616973,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +402.617138,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +402.617304,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +402.617468,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +402.617634,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +402.617800,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +402.617965,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +402.618131,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +402.618298,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +402.618463,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +402.618629,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +402.618795,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +402.618960,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +402.619126,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +402.619291,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +402.619456,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +402.619621,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +402.619789,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +402.619956,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +402.620122,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +402.620288,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +402.620455,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +402.620621,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +402.620788,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +402.620954,0.164669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +402.621121,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +402.621288,0.164830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +402.621455,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +402.621620,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +402.621786,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +402.621952,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +402.622119,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +402.622285,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +402.622451,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +402.622616,0.014912,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +402.622633,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +402.622799,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +402.622965,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +402.623131,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +402.623299,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +402.623465,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +402.623630,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +402.623795,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +402.623960,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +402.624126,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +402.624292,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +402.624456,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +402.624622,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +402.624787,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +402.624953,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +402.625118,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +402.625282,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +402.625448,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +402.625613,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +402.625777,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +402.625943,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +402.626109,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +402.626275,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +402.626439,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +402.626604,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +402.626770,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +402.626936,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +402.627101,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +402.627267,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +402.627433,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +402.627599,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +402.627765,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +402.627930,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +402.628095,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +402.628260,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +402.628425,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +402.628591,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +402.628757,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +402.628922,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +402.629087,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +402.629252,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +402.629418,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +402.629583,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +402.629749,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +402.629914,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +402.630080,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +402.630244,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +402.630411,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +402.630577,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +402.630742,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +402.630907,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +402.631073,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +402.631238,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +402.631403,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +402.631569,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +402.631734,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +402.631900,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +402.632066,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +402.632231,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +402.632397,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +402.632563,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +402.632730,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +402.632895,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +402.633060,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +402.633226,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +402.633392,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +402.633558,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +402.633723,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +402.633888,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +402.634053,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +402.634218,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +402.634384,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +402.634549,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +402.634714,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +402.634880,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +402.635046,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +402.635211,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +402.635376,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +402.635541,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +402.635706,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +402.635871,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +402.636038,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +402.636203,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +402.636369,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +402.636534,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +402.636700,0.135742,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +402.636838,0.042527,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +402.636882,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +402.637048,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +402.637213,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +402.637378,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +402.637543,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +402.637708,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +402.637874,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +402.638039,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +402.638205,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +402.638369,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +402.638534,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +402.638700,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +402.638866,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +402.639031,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +402.639197,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +402.639363,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +402.639528,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +402.639695,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +402.639859,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +402.640025,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +402.640190,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +402.640356,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +402.640523,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +402.640688,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +402.640853,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +402.641018,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +402.641184,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +402.641349,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +402.641515,0.059423,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +402.641576,0.061919,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +402.641640,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +402.641806,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +402.641971,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +402.642137,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +402.642303,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +402.642468,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +402.642634,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +402.642800,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +402.642965,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +402.643130,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +402.643296,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +402.643462,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +402.643629,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +402.643794,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +402.643960,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +402.644125,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +402.644291,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +402.644458,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +402.644624,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +402.644789,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +402.644954,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +402.645120,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +402.645286,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +402.645453,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +402.645619,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +402.645785,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +402.645950,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +402.646115,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +402.646282,0.039455,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +402.667617,53.397320,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","65",,,"spmv3",1179 +402.667743,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +402.721014,4.619445,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","64",,,"sum",1183 +402.721107,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +402.721116,4.618070,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","65",,,"sum",1187 +402.725756,9.246635,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","64",,,"divide",1192 +402.725840,6.895506,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","65",,,"divide",1197 +402.735060,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +402.735091,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +402.735189,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +402.735217,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +402.735250,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +402.735276,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +402.735306,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +402.735332,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +402.735540,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +402.735727,54.547253,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","66",,,"spmv3",1215 +402.735859,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +402.790274,53.495750,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","67",,,"spmv3",1225 +402.790385,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +402.843769,4.620917,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","66",,,"sum",1229 +402.843863,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +402.843873,4.618422,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","67",,,"sum",1233 +402.848498,9.259659,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","66",,,"divide",1238 +402.848593,6.915569,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","67",,,"divide",1243 +402.857793,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +402.857823,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +402.857909,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +402.857937,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +402.857957,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +402.857984,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +402.858009,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +402.858035,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +402.858247,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +402.858428,54.565397,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","68",,,"spmv3",1261 +402.858551,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +402.912993,53.360360,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","69",,,"spmv3",1271 +402.913098,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +402.966352,4.619926,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","68",,,"sum",1275 +402.966470,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +402.966480,4.619990,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","69",,,"sum",1279 +402.971049,9.278795,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","68",,,"divide",1284 +402.971218,6.903217,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","69",,,"divide",1289 +402.980405,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +402.980436,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +402.980550,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +402.980577,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +402.980647,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +402.980674,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +402.980708,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +402.980734,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +402.981086,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +402.981284,54.573812,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","70",,,"spmv3",1307 +402.981432,0.001856,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +403.035857,53.540326,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","71",,,"spmv3",1317 +403.035986,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +403.089397,4.619861,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","70",,,"sum",1321 +403.089492,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +403.089500,4.617206,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","71",,,"sum",1325 +403.094129,9.255307,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","70",,,"divide",1330 +403.094244,6.907793,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","71",,,"divide",1335 +403.103476,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +403.103506,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +403.103583,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +403.103610,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +403.103614,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +403.103638,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +403.103641,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +403.103665,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +403.103867,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +403.104018,54.525845,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","72",,,"spmv3",1353 +403.104149,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +403.158543,53.585541,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","73",,,"spmv3",1363 +403.158692,0.001888,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +403.212128,4.620470,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","72",,,"sum",1367 +403.212240,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +403.212249,4.620214,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","73",,,"sum",1371 +403.216869,9.265739,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","72",,,"divide",1376 +403.216995,6.911409,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","73",,,"divide",1381 +403.226230,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +403.226260,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +403.226340,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +403.226368,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +403.226377,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +403.226403,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +403.226403,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +403.226429,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +403.226447,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +403.226476,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +403.226478,0.005312,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +403.226487,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +403.226517,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +403.226519,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +410.601832,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +410.601878,0.061663,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +410.601981,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +410.602146,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +410.602310,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +410.602474,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +410.602638,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +410.602803,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +410.602967,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +410.603131,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +410.603295,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +410.603459,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +410.603624,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +410.603787,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +410.603952,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +410.604116,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +410.604280,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +410.604445,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +410.604610,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +410.604775,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +410.604939,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +410.605104,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +410.605268,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +410.605432,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +410.605597,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +410.605762,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +410.605926,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +410.606090,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +410.606255,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +410.606419,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +410.606584,0.039679,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +410.606625,0.143166,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +410.606769,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +410.606934,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +410.607099,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +410.607265,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +410.607431,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +410.607597,0.171197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +410.607769,0.168445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +410.607939,0.172445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +410.608113,0.170334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +410.608284,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +410.608452,0.165501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +410.608619,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +410.608784,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +410.608949,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +410.609116,0.165534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +410.609283,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +410.609449,0.167837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +410.609618,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +410.609783,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +410.609948,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +410.610113,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +410.610279,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +410.610444,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +410.610609,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +410.610774,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +410.610939,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +410.611104,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +410.611269,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +410.611435,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +410.611600,0.194013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +410.611795,0.212445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +410.612009,0.200957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +410.612211,0.207996,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +410.612421,0.212413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +410.612634,0.216092,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +410.612852,0.213501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +410.613067,0.200189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +410.613268,0.208764,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +410.613478,0.201405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +410.613681,0.196957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +410.613879,0.203645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +410.614084,0.200156,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +410.614286,0.203005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +410.614490,0.197053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +410.614688,0.190013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +410.614880,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +410.615046,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +410.615211,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +410.615376,0.191485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +410.615569,0.195997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +410.615766,0.197756,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +410.615965,0.192349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +410.616159,0.197053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +410.616357,0.198621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +410.616557,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +410.616754,0.191933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +410.616948,0.201116,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +410.617150,0.200029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +410.617352,0.205149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +410.617558,0.203197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +410.617763,0.199260,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +410.617963,0.203037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +410.618167,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +410.618349,0.168253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +410.618519,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +410.618684,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +410.618848,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +410.619015,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +410.619180,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +410.619344,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +410.619508,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +410.619672,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +410.619837,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +410.620002,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +410.620166,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +410.620331,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +410.620495,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +410.620661,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +410.620827,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +410.620991,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +410.621156,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +410.621320,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +410.621485,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +410.621649,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +410.621813,0.155773,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +410.621970,0.021536,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +410.621993,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +410.622158,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +410.622322,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +410.622487,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +410.622651,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +410.622837,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +410.623032,0.188925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +410.623222,0.201085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +410.623424,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +410.623617,0.195676,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +410.623814,0.189725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +410.624005,0.194813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +410.624201,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +410.624385,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +410.624571,0.193981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +410.624767,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +410.624954,0.174365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +410.625130,0.168638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +410.625300,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +410.625486,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +410.625675,0.187229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +410.625863,0.185565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +410.626050,0.188797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +410.626241,0.190620,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +410.626433,0.188893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +410.626623,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +410.626814,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +410.627000,0.191101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +410.627193,0.188765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +410.627383,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +410.627572,0.180477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +410.627754,0.172733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +410.627928,0.175678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +410.628105,0.178557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +410.628285,0.175421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +410.628461,0.176125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +410.628639,0.174941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +410.628815,0.178845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +410.628995,0.186749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +410.629183,0.176094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +410.629360,0.174622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +410.629536,0.177277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +410.629715,0.174493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +410.629890,0.176573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +410.630068,0.175805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +410.630245,0.173438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +410.630420,0.173438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +410.630595,0.174845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +410.630771,0.173853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +410.630946,0.173149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +410.631120,0.177277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +410.631299,0.176958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +410.631477,0.170173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +410.631648,0.173821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +410.631824,0.177565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +410.632002,0.175933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +410.632180,0.174269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +410.632355,0.171006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +410.632528,0.172637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +410.632702,0.172061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +410.632875,0.174365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +410.633051,0.172382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +410.633224,0.173661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +410.633399,0.171357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +410.633572,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +410.633748,0.176573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +410.633925,0.171550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +410.634098,0.171390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +410.634271,0.173917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +410.634446,0.175677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +410.634623,0.171773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +410.634796,0.176509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +410.634974,0.173342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +410.635149,0.167261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +410.635317,0.175037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +410.635493,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +410.635666,0.165822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +410.635833,0.168157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +410.636002,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +410.636167,0.168510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +410.636337,0.171805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +410.636510,0.171165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +410.636683,0.165245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +410.636849,0.166398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +410.637017,0.167197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +410.637185,0.118238,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +410.637305,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +410.637470,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +410.637636,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +410.637802,0.167965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +410.637971,0.164766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +410.638137,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +410.638306,0.173949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +410.638481,0.174685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +410.638657,0.171838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +410.638830,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +410.638998,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +410.639164,0.166046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +410.639331,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +410.639498,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +410.639663,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +410.639829,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +410.639995,0.170109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +410.640166,0.170621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +410.640338,0.170878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +410.640510,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +410.640692,0.175997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +410.640870,0.178301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +410.641049,0.171837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +410.641222,0.166430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +410.641390,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +410.641556,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +410.641723,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +410.641888,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +410.642053,0.100894,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +410.642156,0.103455,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +410.642260,0.166781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +410.642428,0.172989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +410.642603,0.172733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +410.642777,0.171070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +410.642949,0.170685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +410.643121,0.172509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +410.643295,0.168445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +410.643465,0.166462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +410.643632,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +410.643798,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +410.643965,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +410.644131,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +410.644296,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +410.644461,0.165022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +410.644627,0.168957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +410.644797,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +410.644973,0.168893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +410.645143,0.194205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +410.645338,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +410.645527,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +410.645712,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +410.645898,0.179869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +410.646079,0.181853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +410.646262,0.181789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +410.646445,0.183390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +410.646630,0.199453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +410.646831,0.189405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +410.647021,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +410.647608,65.855168,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","74",,,"spmv3",1401 +410.647887,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +410.647991,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +410.648156,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +410.648321,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +410.648487,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +410.648653,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +410.648819,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +410.648985,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +410.649150,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +410.649315,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +410.649481,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +410.649648,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +410.649814,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +410.649979,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +410.650145,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +410.650311,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +410.650478,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +410.650644,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +410.650810,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +410.650976,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +410.651142,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +410.651309,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +410.651475,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +410.651641,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +410.651807,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +410.651973,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +410.652138,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +410.652305,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +410.652470,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +410.652636,0.100767,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +410.652739,0.123199,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +410.652864,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +410.653031,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +410.653197,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +410.653364,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +410.653529,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +410.653694,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +410.653861,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +410.654026,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +410.654191,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +410.654358,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +410.654525,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +410.654692,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +410.654857,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +410.655022,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +410.655188,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +410.655354,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +410.655520,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +410.655685,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +410.655850,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +410.656017,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +410.656184,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +410.656351,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +410.656516,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +410.656682,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +410.656848,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +410.657014,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +410.657180,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +410.657347,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +410.657513,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +410.657678,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +410.657845,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +410.658010,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +410.658176,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +410.658342,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +410.658507,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +410.658673,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +410.658839,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +410.659005,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +410.659170,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +410.659336,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +410.659502,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +410.659666,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +410.659833,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +410.659999,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +410.660165,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +410.660331,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +410.660496,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +410.660663,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +410.660829,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +410.660996,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +410.661163,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +410.661329,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +410.661495,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +410.661661,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +410.661828,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +410.661994,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +410.662161,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +410.662327,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +410.662493,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +410.662658,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +410.662825,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +410.662992,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +410.663158,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +410.663324,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +410.663493,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +410.663661,0.165054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +410.663828,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +410.663994,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +410.664160,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +410.664326,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +410.664492,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +410.664659,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +410.664824,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +410.664991,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +410.665157,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +410.665324,0.165341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +410.665492,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +410.665658,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +410.665824,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +410.665991,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +410.666158,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +410.666324,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +410.666490,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +410.666656,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +410.666823,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +410.666990,0.014944,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +410.667007,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +410.667174,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +410.667341,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +410.667507,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +410.667673,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +410.667838,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +410.668004,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +410.668170,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +410.668335,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +410.668501,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +410.668667,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +410.668831,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +410.668998,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +410.669163,0.164669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +410.669329,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +410.669495,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +410.669660,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +410.669826,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +410.669991,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +410.670157,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +410.670323,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +410.670488,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +410.670654,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +410.670819,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +410.670984,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +410.671149,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +410.671314,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +410.671479,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +410.671644,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +410.671810,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +410.671975,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +410.672140,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +410.672306,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +410.672472,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +410.672638,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +410.672804,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +410.672970,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +410.673135,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +410.673301,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +410.673466,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +410.673634,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +410.673799,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +410.673965,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +410.674131,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +410.674297,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +410.674463,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +410.674628,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +410.674793,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +410.674959,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +410.675125,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +410.675291,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +410.675456,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +410.675621,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +410.675786,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +410.675952,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +410.676118,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +410.676285,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +410.676451,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +410.676615,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +410.676780,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +410.676945,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +410.677111,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +410.677278,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +410.677443,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +410.677609,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +410.677775,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +410.677941,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +410.678106,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +410.678271,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +410.678437,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +410.678602,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +410.678767,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +410.678933,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +410.679098,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +410.679264,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +410.679429,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +410.679595,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +410.679761,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +410.679927,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +410.680092,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +410.680258,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +410.680424,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +410.680589,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +410.680756,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +410.680922,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +410.681087,0.136094,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +410.681225,0.042399,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +410.681269,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +410.681434,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +410.681601,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +410.681766,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +410.681932,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +410.682097,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +410.682263,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +410.682429,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +410.682595,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +410.682761,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +410.682927,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +410.683093,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +410.683260,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +410.683426,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +410.683591,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +410.683757,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +410.683922,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +410.684088,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +410.684254,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +410.684420,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +410.684585,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +410.684751,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +410.684917,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +410.685083,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +410.685250,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +410.685418,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +410.685584,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +410.685750,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +410.685916,0.060287,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +410.685979,0.062495,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +410.686043,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +410.686208,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +410.686373,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +410.686538,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +410.686704,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +410.686869,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +410.687035,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +410.687201,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +410.687366,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +410.687531,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +410.687697,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +410.687863,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +410.688029,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +410.688195,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +410.688361,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +410.688527,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +410.688692,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +410.688859,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +410.689025,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +410.689191,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +410.689356,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +410.689521,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +410.689686,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +410.689851,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +410.690016,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +410.690182,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +410.690348,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +410.690514,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +410.690680,0.039967,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +410.713462,55.396104,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","75",,,"spmv3",1411 +410.713566,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +410.768858,4.850002,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","74",,,"sum",1415 +410.768925,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +410.768935,4.849682,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","75",,,"sum",1419 +410.773784,9.669733,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","74",,,"divide",1424 +410.773851,7.161805,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","75",,,"divide",1429 +410.783544,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +410.783578,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +410.783850,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +410.783882,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +410.783909,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +410.783935,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +410.783939,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +410.783977,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +410.784191,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +410.784358,54.816529,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","76",,,"spmv3",1447 +410.784507,0.002016,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +410.839174,53.732771,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","77",,,"spmv3",1457 +410.839260,0.001920,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +410.892906,4.841170,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","76",,,"sum",1461 +410.892974,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +410.892985,4.840691,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","77",,,"sum",1465 +410.897824,9.660197,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","76",,,"divide",1470 +410.897890,7.169965,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","77",,,"divide",1475 +410.907561,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +410.907595,0.001247,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +410.907717,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +410.907748,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +410.907802,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +410.907832,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +410.907844,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +410.907873,0.011744,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +410.908169,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +410.908328,54.674932,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","78",,,"spmv3",1493 +410.908460,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +410.963002,53.551461,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","79",,,"spmv3",1503 +410.963085,0.001856,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +411.016553,4.621302,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","78",,,"sum",1507 +411.016656,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +411.016667,4.620790,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","79",,,"sum",1511 +411.021259,9.273867,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","78",,,"divide",1516 +411.021363,6.892690,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","79",,,"divide",1521 +411.030636,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +411.030669,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +411.030875,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +411.030906,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +411.030938,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +411.030968,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +411.030989,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +411.031018,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +411.031264,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +411.031448,54.574709,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","80",,,"spmv3",1539 +411.031589,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +411.086022,53.532422,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","81",,,"spmv3",1549 +411.086085,0.001856,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +411.139554,4.623030,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","80",,,"sum",1553 +411.139614,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +411.139624,4.620374,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","81",,,"sum",1557 +411.144255,9.259340,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","80",,,"divide",1562 +411.144290,6.908081,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","81",,,"divide",1567 +411.153594,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +411.153627,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +411.153730,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +411.153760,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +411.153788,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +411.153817,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +411.153839,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +411.153868,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +411.154073,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +411.154258,54.446967,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","82",,,"spmv3",1585 +411.154375,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +411.208704,53.395880,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","83",,,"spmv3",1595 +411.208773,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +411.262099,4.621238,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","82",,,"sum",1599 +411.262159,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +411.262169,4.619830,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","83",,,"sum",1603 +411.266800,9.265387,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","82",,,"divide",1608 +411.266835,6.906930,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","83",,,"divide",1613 +411.276086,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +411.276118,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +411.276193,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +411.276223,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +411.276249,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +411.276278,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +411.276300,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +411.276329,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +411.276370,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +411.276403,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +411.276404,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +411.276437,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +411.276469,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +411.276471,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +418.683812,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +418.683974,0.061471,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +418.684348,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +418.684728,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +418.685104,0.171773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +418.685345,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +418.685508,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +418.685673,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +418.685837,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +418.686001,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +418.686165,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +418.686329,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +418.686493,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +418.686658,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +418.686822,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +418.686986,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +418.687150,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +418.687314,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +418.687478,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +418.687642,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +418.687806,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +418.687971,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +418.688134,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +418.688298,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +418.688462,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +418.688626,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +418.688791,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +418.688955,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +418.689120,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +418.689284,0.168285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +418.689454,0.042848,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +418.689498,0.151421,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +418.689650,0.168606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +418.689820,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +418.689987,0.166365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +418.690155,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +418.690322,0.167230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +418.690490,0.165245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +418.690657,0.165501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +418.690823,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +418.690990,0.165597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +418.691156,0.167293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +418.691325,0.167486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +418.691494,0.166301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +418.691661,0.165245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +418.691828,0.164894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +418.691994,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +418.692159,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +418.692323,0.165726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +418.692490,0.165309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +418.692657,0.168381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +418.692826,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +418.693011,0.207933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +418.693220,0.219772,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +418.693441,0.207389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +418.693650,0.214461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +418.693866,0.214588,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +418.694082,0.222365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +418.694305,0.208540,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +418.694515,0.211389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +418.694728,0.205629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +418.694935,0.206364,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +418.695142,0.216477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +418.695360,0.217820,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +418.695579,0.204573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +418.695785,0.205629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +418.695992,0.195100,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +418.696188,0.169662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +418.696359,0.170557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +418.696530,0.190685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +418.696722,0.207645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +418.696931,0.209116,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +418.697142,0.200157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +418.697343,0.205821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +418.697550,0.203548,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +418.697755,0.204573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +418.697961,0.207869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +418.698170,0.207516,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +418.698378,0.208253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +418.698588,0.205181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +418.698794,0.216188,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +418.699012,0.209821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +418.699223,0.218204,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +418.699442,0.202173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +418.699645,0.171293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +418.699818,0.166270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +418.699985,0.167197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +418.700154,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +418.700318,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +418.700482,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +418.700647,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +418.700811,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +418.700977,0.165405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +418.701143,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +418.701309,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +418.701474,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +418.701638,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +418.701801,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +418.701966,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +418.702130,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +418.702294,0.192348,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +418.702488,0.200477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +418.702690,0.193405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +418.702884,0.197821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +418.703084,0.195517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +418.703280,0.196157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +418.703478,0.191964,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +418.703671,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +418.703867,0.187773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +418.704056,0.193949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +418.704251,0.197437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +418.704450,0.201853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +418.704653,0.182781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +418.704837,0.179965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +418.705018,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +418.705210,0.190685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +418.705402,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +418.705587,0.025215,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +418.705614,0.197373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +418.705812,0.190429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +418.706005,0.193405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +418.706199,0.207229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +418.706408,0.191293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +418.706600,0.191100,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +418.706793,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +418.706986,0.195453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +418.707183,0.199005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +418.707383,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +418.707566,0.184829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +418.707752,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +418.707935,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +418.708123,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +418.708309,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +418.708492,0.180093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +418.708674,0.185981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +418.708861,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +418.709042,0.177246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +418.709221,0.184829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +418.709407,0.180061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +418.709588,0.178301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +418.709767,0.177981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +418.709947,0.181181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +418.710129,0.182493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +418.710313,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +418.710496,0.182557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +418.710679,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +418.710863,0.185245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +418.711050,0.186589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +418.711238,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +418.711420,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +418.711602,0.179325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +418.711783,0.179198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +418.711963,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +418.712143,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +418.712326,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +418.712508,0.191133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +418.712700,0.186525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +418.712888,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +418.713070,0.177789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +418.713249,0.180349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +418.713431,0.180317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +418.713612,0.178557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +418.713792,0.176893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +418.713970,0.178878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +418.714150,0.184638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +418.714336,0.179613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +418.714517,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +418.714701,0.182045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +418.714884,0.177117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +418.715063,0.172125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +418.715236,0.177597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +418.715415,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +418.715583,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +418.715763,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +418.715931,0.173277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +418.716105,0.177341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +418.716284,0.178749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +418.716464,0.170238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +418.716635,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +418.716807,0.175933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +418.716984,0.173949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +418.717160,0.169406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +418.717330,0.166749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +418.717498,0.170813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +418.717670,0.171101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +418.717842,0.169694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +418.718013,0.175165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +418.718190,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +418.718376,0.180349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +418.718558,0.180445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +418.718739,0.173149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +418.718914,0.171645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +418.719086,0.170942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +418.719259,0.174493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +418.719434,0.171965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +418.719607,0.169405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +418.719778,0.174813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +418.719954,0.176990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +418.720132,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +418.720308,0.175293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +418.720484,0.175965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +418.720661,0.176413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +418.720839,0.174173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +418.721014,0.123806,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +418.721139,0.177086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +418.721318,0.171197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +418.721490,0.169501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +418.721661,0.170589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +418.721832,0.173502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +418.722007,0.168413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +418.722177,0.169213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +418.722347,0.169501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +418.722518,0.173150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +418.722692,0.174557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +418.722868,0.172925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +418.723042,0.173981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +418.723217,0.174877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +418.723393,0.173790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +418.723568,0.170013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +418.723739,0.170461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +418.723911,0.170013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +418.724082,0.169406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +418.724253,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +418.724421,0.169917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +418.724592,0.171133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +418.724764,0.172798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +418.724938,0.176701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +418.725116,0.188317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +418.725306,0.186333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +418.725493,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +418.725679,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +418.725866,0.187997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +418.726055,0.112606,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +418.726169,0.114366,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +418.726285,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +418.726475,0.184125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +418.726660,0.194525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +418.726856,0.189917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +418.727047,0.174621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +418.727222,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +418.727387,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +418.727551,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +418.727716,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +418.727880,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +418.728045,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +418.728209,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +418.728373,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +418.728537,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +418.728701,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +418.728865,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +418.729029,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +418.729193,0.171998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +418.729366,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +418.729531,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +418.729695,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +418.729859,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +418.730023,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +418.730188,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +418.730352,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +418.730516,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +418.730680,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +418.730845,0.160125,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +418.731376,64.618869,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","84",,,"spmv3",1633 +418.731639,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +418.731749,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +418.731915,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +418.732080,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +418.732255,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +418.732421,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +418.732587,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +418.732752,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +418.732918,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +418.733083,0.172573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +418.733258,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +418.733423,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +418.733590,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +418.733755,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +418.733921,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +418.734086,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +418.734251,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +418.734418,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +418.734582,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +418.734748,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +418.734914,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +418.735079,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +418.735244,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +418.735410,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +418.735576,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +418.735742,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +418.735908,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +418.736073,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +418.736238,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +418.736404,0.100798,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +418.736508,0.122238,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +418.736633,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +418.736799,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +418.736966,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +418.737131,0.171389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +418.737305,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +418.737470,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +418.737637,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +418.737803,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +418.737968,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +418.738133,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +418.738298,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +418.738465,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +418.738630,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +418.738795,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +418.738962,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +418.739127,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +418.739294,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +418.739459,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +418.739625,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +418.739790,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +418.739956,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +418.740120,0.172349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +418.740295,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +418.740459,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +418.740626,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +418.740791,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +418.740956,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +418.741120,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +418.741286,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +418.741451,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +418.741617,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +418.741783,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +418.741948,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +418.742113,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +418.742278,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +418.742443,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +418.742609,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +418.742773,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +418.742938,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +418.743104,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +418.743271,0.171485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +418.743445,0.181693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +418.743629,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +418.743810,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +418.743984,0.169726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +418.744155,0.167517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +418.744325,0.167805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +418.744496,0.167773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +418.744665,0.168830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +418.744836,0.172253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +418.745010,0.168669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +418.745183,0.183869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +418.745369,0.167421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +418.745539,0.167102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +418.745709,0.166589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +418.745877,0.166781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +418.746046,0.165982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +418.746214,0.166302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +418.746383,0.165437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +418.746550,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +418.746717,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +418.746882,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +418.747048,0.172733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +418.747223,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +418.747388,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +418.747555,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +418.747721,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +418.747886,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +418.748051,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +418.748225,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +418.748390,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +418.748555,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +418.748720,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +418.748886,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +418.749052,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +418.749217,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +418.749382,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +418.749548,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +418.749713,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +418.749879,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +418.750045,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +418.750211,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +418.750377,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +418.750542,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +418.750707,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +418.750873,0.014720,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +418.750889,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +418.751054,0.172125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +418.751229,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +418.751395,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +418.751560,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +418.751726,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +418.751891,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +418.752056,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +418.752222,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +418.752386,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +418.752552,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +418.752717,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +418.752882,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +418.753048,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +418.753214,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +418.753380,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +418.753546,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +418.753713,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +418.753877,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +418.754043,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +418.754208,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +418.754375,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +418.754541,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +418.754706,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +418.754871,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +418.755036,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +418.755202,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +418.755367,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +418.755533,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +418.755697,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +418.755863,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +418.756029,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +418.756194,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +418.756360,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +418.756524,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +418.756691,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +418.756855,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +418.757021,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +418.757186,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +418.757350,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +418.757516,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +418.757681,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +418.757847,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +418.758013,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +418.758179,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +418.758344,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +418.758510,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +418.758676,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +418.758841,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +418.759007,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +418.759172,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +418.759337,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +418.759502,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +418.759668,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +418.759833,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +418.759999,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +418.760165,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +418.760331,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +418.760497,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +418.760663,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +418.760828,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +418.760993,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +418.761159,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +418.761325,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +418.761490,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +418.761656,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +418.761821,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +418.761987,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +418.762153,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +418.762319,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +418.762485,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +418.762650,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +418.762817,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +418.762981,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +418.763147,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +418.763312,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +418.763476,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +418.763642,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +418.763808,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +418.763973,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +418.764138,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +418.764303,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +418.764468,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +418.764634,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +418.764799,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +418.764965,0.135902,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +418.765104,0.041663,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +418.765148,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +418.765314,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +418.765479,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +418.765645,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +418.765811,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +418.765977,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +418.766142,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +418.766307,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +418.766474,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +418.766639,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +418.766805,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +418.766970,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +418.767135,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +418.767300,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +418.767466,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +418.767632,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +418.767798,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +418.767964,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +418.768130,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +418.768296,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +418.768462,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +418.768627,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +418.768793,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +418.768958,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +418.769124,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +418.769290,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +418.769455,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +418.769621,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +418.769786,0.060063,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +418.769848,0.061951,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +418.769912,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +418.770077,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +418.770242,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +418.770408,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +418.770574,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +418.770739,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +418.770904,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +418.771070,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +418.771236,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +418.771402,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +418.771567,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +418.771732,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +418.771898,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +418.772063,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +418.772228,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +418.772394,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +418.772560,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +418.772725,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +418.772891,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +418.773056,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +418.773221,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +418.773386,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +418.773552,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +418.773718,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +418.773884,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +418.774049,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +418.774215,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +418.774380,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +418.774545,0.039680,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +418.795994,53.371305,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","85",,,"spmv3",1643 +418.796056,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +418.849365,4.619222,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","84",,,"sum",1647 +418.849399,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +418.849410,4.618102,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","85",,,"sum",1651 +418.854035,9.249515,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","84",,,"divide",1656 +418.854061,6.891474,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","85",,,"divide",1661 +418.863309,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +418.863346,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +418.863432,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +418.863466,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +418.863490,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +418.863522,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +418.863546,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +418.863578,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +418.863887,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +418.864040,54.657365,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","86",,,"spmv3",1679 +418.864153,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +418.918696,53.601541,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","87",,,"spmv3",1689 +418.918795,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +418.972297,4.620438,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","86",,,"sum",1693 +418.972360,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +418.972372,4.620214,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","87",,,"sum",1697 +418.977028,9.259691,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","86",,,"divide",1702 +418.977097,6.911601,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","87",,,"divide",1707 +418.986317,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +418.986352,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +418.986438,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +418.986471,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +418.986509,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +418.986542,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +418.986563,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +418.986595,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +418.986859,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +418.987014,54.528886,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","88",,,"spmv3",1725 +418.987131,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +419.041542,53.573446,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","89",,,"spmv3",1735 +419.041612,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +419.095115,4.619862,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","88",,,"sum",1739 +419.095234,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +419.095245,4.618198,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","89",,,"sum",1743 +419.099840,9.290315,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","88",,,"divide",1748 +419.099932,6.891154,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","89",,,"divide",1753 +419.109176,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +419.109211,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +419.109298,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +419.109331,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +419.109354,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +419.109386,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +419.109406,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +419.109437,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +419.109645,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +419.109834,54.517622,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","90",,,"spmv3",1771 +419.109942,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +419.164351,53.410441,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","91",,,"spmv3",1781 +419.164426,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +419.217761,4.619574,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","90",,,"sum",1785 +419.217847,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +419.217859,4.618902,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","91",,,"sum",1789 +419.222486,9.243372,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","90",,,"divide",1794 +419.222572,6.904497,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","91",,,"divide",1799 +419.231746,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +419.231781,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +419.231849,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +419.231882,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +419.231904,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +419.231936,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +419.231958,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +419.231990,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +419.232153,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +419.232353,54.514743,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","92",,,"spmv3",1817 +419.232459,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +419.286867,53.469800,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","93",,,"spmv3",1827 +419.286963,0.001920,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +419.340337,4.621174,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","92",,,"sum",1831 +419.340421,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +419.340433,4.617718,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","93",,,"sum",1835 +419.345028,9.279468,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","92",,,"divide",1840 +419.345088,6.883537,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","93",,,"divide",1845 +419.354354,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +419.354389,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +419.354470,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +419.354503,0.001183,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +419.354526,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +419.354558,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +419.354578,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +419.354609,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +419.354653,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +419.354688,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +419.354690,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +419.354719,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +419.354755,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +419.354756,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +426.577232,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +426.577343,0.061727,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +426.577618,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +426.577883,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +426.578147,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +426.578413,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +426.578684,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +426.578950,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +426.579217,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +426.579483,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +426.579756,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +426.580023,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +426.580288,0.162205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +426.580555,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +426.580825,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +426.581091,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +426.581357,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +426.581630,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +426.581896,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +426.582157,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +426.582419,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +426.582686,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +426.582953,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +426.583217,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +426.583478,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +426.583744,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +426.584006,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +426.584269,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +426.584532,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +426.584799,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +426.584963,0.039327,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +426.585106,0.142366,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +426.585370,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +426.585640,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +426.585906,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +426.586171,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +426.586437,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +426.586709,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +426.586975,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +426.587241,0.172925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +426.587466,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +426.587676,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +426.587882,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +426.588083,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +426.588285,0.170621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +426.588487,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +426.588694,0.181661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +426.588896,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +426.589102,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +426.589318,0.208989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +426.589528,0.212157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +426.589741,0.208604,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +426.589951,0.215325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +426.590168,0.219964,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +426.590389,0.209405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +426.590600,0.213180,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +426.590814,0.220029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +426.591035,0.205469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +426.591242,0.198620,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +426.591442,0.190845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +426.591634,0.165598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +426.591801,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +426.591966,0.187677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +426.592155,0.208285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +426.592364,0.196604,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +426.592562,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +426.592760,0.204509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +426.592966,0.201469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +426.593168,0.205180,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +426.593375,0.206493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +426.593582,0.210045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +426.593794,0.210076,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +426.594005,0.209757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +426.594216,0.209629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +426.594427,0.215100,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +426.594643,0.204957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +426.594849,0.169693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +426.595020,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +426.595186,0.166494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +426.595354,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +426.595518,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +426.595682,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +426.595846,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +426.596012,0.167005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +426.596180,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +426.596346,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +426.596512,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +426.596676,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +426.596840,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +426.597004,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +426.597169,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +426.597333,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +426.597496,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +426.597662,0.196669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +426.597860,0.199388,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +426.598060,0.197277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +426.598259,0.193821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +426.598454,0.194589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +426.598650,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +426.598846,0.196477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +426.599044,0.195260,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +426.599240,0.193789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +426.599435,0.204349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +426.599641,0.196285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +426.599838,0.188029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +426.600028,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +426.600192,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +426.600373,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +426.600559,0.190077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +426.600750,0.192765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +426.600944,0.195517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +426.601141,0.191421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +426.601334,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +426.601525,0.195229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +426.601721,0.190717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +426.601913,0.191037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +426.602106,0.192188,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +426.602299,0.024800,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +426.602325,0.195261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +426.602522,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +426.602709,0.179165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +426.602890,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +426.603070,0.179389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +426.603251,0.179549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +426.603432,0.178653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +426.603611,0.179774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +426.603792,0.179549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +426.603973,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +426.604155,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +426.604338,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +426.604519,0.177917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +426.604698,0.176349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +426.604876,0.178365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +426.605056,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +426.605237,0.179038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +426.605417,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +426.605601,0.180157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +426.605782,0.179549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +426.605963,0.180509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +426.606145,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +426.606326,0.178333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +426.606506,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +426.606688,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +426.606870,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +426.607054,0.178685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +426.607234,0.177790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +426.607412,0.180733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +426.607594,0.176765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +426.607772,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +426.607955,0.178397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +426.608134,0.175229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +426.608310,0.179133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +426.608491,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +426.608671,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +426.608854,0.174430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +426.609029,0.177917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +426.609208,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +426.609391,0.178653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +426.609571,0.177373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +426.609750,0.187037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +426.609938,0.181853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +426.610121,0.169309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +426.610291,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +426.610480,0.167102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +426.610648,0.178685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +426.610828,0.166845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +426.610996,0.174365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +426.611172,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +426.611355,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +426.611538,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +426.611704,0.172637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +426.611878,0.172061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +426.612051,0.166558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +426.612219,0.169917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +426.612390,0.170461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +426.612561,0.170141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +426.612733,0.169470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +426.612903,0.176157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +426.613081,0.191965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +426.613274,0.179069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +426.613454,0.168701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +426.613624,0.170141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +426.613795,0.170270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +426.613967,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +426.614136,0.168797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +426.614306,0.172829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +426.614480,0.178078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +426.614659,0.177470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +426.614838,0.174781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +426.615014,0.183133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +426.615198,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +426.615379,0.177341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +426.615558,0.172093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +426.615731,0.169566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +426.615902,0.170109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +426.616073,0.167485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +426.616242,0.169597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +426.616413,0.177502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +426.616591,0.177725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +426.616770,0.173757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +426.616945,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +426.617126,0.179261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +426.617306,0.178141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +426.617486,0.119326,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +426.617606,0.171006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +426.617778,0.168285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +426.617948,0.167805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +426.618117,0.175933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +426.618294,0.175037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +426.618470,0.181310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +426.618653,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +426.618834,0.196732,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +426.619031,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +426.619222,0.193149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +426.619416,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +426.619607,0.198717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +426.619807,0.197085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +426.620005,0.198205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +426.620204,0.200444,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +426.620406,0.194781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +426.620602,0.188253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +426.620792,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +426.620979,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +426.621143,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +426.621307,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +426.621471,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +426.621635,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +426.621799,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +426.621964,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +426.622128,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +426.622292,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +426.622456,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +426.622620,0.099998,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +426.622721,0.101983,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +426.622824,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +426.622988,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +426.623153,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +426.623317,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +426.623480,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +426.623644,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +426.623809,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +426.623972,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +426.624137,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +426.624310,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +426.624473,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +426.624638,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +426.624802,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +426.624966,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +426.625130,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +426.625295,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +426.625460,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +426.625624,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +426.625788,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +426.625952,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +426.626116,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +426.626289,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +426.626453,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +426.626617,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +426.626781,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +426.626946,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +426.627110,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +426.627274,0.161598,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +426.627899,64.666454,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","94",,,"spmv3",1865 +426.628153,0.001888,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +426.628255,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +426.628420,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +426.628585,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +426.628750,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +426.628916,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +426.629081,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +426.629248,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +426.629413,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +426.629579,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +426.629744,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +426.629909,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +426.630075,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +426.630240,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +426.630406,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +426.630572,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +426.630738,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +426.630903,0.165150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +426.631071,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +426.631237,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +426.631402,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +426.631568,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +426.631734,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +426.631900,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +426.632066,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +426.632231,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +426.632397,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +426.632563,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +426.632729,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +426.632895,0.100351,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +426.632998,0.123582,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +426.633123,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +426.633289,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +426.633454,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +426.633620,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +426.633786,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +426.633952,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +426.634118,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +426.634284,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +426.634450,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +426.634615,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +426.634781,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +426.634947,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +426.635113,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +426.635277,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +426.635442,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +426.635607,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +426.635773,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +426.635939,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +426.636105,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +426.636270,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +426.636435,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +426.636599,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +426.636765,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +426.636931,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +426.637096,0.168733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +426.637267,0.170142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +426.637441,0.167997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +426.637611,0.168125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +426.637781,0.169053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +426.637954,0.172030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +426.638127,0.169437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +426.638300,0.172061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +426.638474,0.171069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +426.638647,0.175261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +426.638826,0.174174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +426.639003,0.169245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +426.639174,0.172989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +426.639349,0.169341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +426.639520,0.171454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +426.639693,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +426.639862,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +426.640031,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +426.640201,0.166462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +426.640369,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +426.640538,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +426.640703,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +426.640868,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +426.641033,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +426.641199,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +426.641365,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +426.641531,0.172957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +426.641706,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +426.641905,0.167581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +426.642074,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +426.642241,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +426.642407,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +426.642572,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +426.642738,0.165085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +426.642905,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +426.643070,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +426.643236,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +426.643400,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +426.643566,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +426.643733,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +426.643898,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +426.644063,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +426.644229,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +426.644394,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +426.644560,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +426.644724,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +426.644890,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +426.645056,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +426.645221,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +426.645387,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +426.645552,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +426.645717,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +426.645883,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +426.646049,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +426.646214,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +426.646379,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +426.646545,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +426.646710,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +426.646876,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +426.647041,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +426.647207,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +426.647374,0.014560,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +426.647390,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +426.647555,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +426.647721,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +426.647886,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +426.648052,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +426.648218,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +426.648384,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +426.648550,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +426.648716,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +426.648882,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +426.649048,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +426.649214,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +426.649379,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +426.649544,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +426.649710,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +426.649875,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +426.650041,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +426.650206,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +426.650372,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +426.650537,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +426.650703,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +426.650868,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +426.651032,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +426.651198,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +426.651364,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +426.651530,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +426.651695,0.169598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +426.651867,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +426.652032,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +426.652197,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +426.652363,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +426.652530,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +426.652695,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +426.652860,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +426.653025,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +426.653190,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +426.653356,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +426.653522,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +426.653687,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +426.653854,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +426.654018,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +426.654184,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +426.654350,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +426.654516,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +426.654682,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +426.654848,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +426.655014,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +426.655179,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +426.655346,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +426.655511,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +426.655677,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +426.655842,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +426.656008,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +426.656173,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +426.656338,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +426.656504,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +426.656669,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +426.656835,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +426.657000,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +426.657166,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +426.657331,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +426.657496,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +426.657662,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +426.657828,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +426.657993,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +426.658158,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +426.658324,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +426.658490,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +426.658655,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +426.658823,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +426.658989,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +426.659155,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +426.659319,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +426.659484,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +426.659649,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +426.659815,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +426.659980,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +426.660145,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +426.660310,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +426.660476,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +426.660640,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +426.660807,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +426.660974,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +426.661140,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +426.661306,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +426.661471,0.136414,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +426.661610,0.041920,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +426.661654,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +426.661820,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +426.661985,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +426.662150,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +426.662315,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +426.662481,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +426.662646,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +426.662812,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +426.662978,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +426.663143,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +426.663308,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +426.663473,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +426.663638,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +426.663803,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +426.663968,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +426.664135,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +426.664299,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +426.664465,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +426.664630,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +426.664798,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +426.664963,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +426.665129,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +426.665295,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +426.665460,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +426.665626,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +426.665791,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +426.665957,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +426.666123,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +426.666289,0.060287,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +426.666352,0.061887,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +426.666416,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +426.666582,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +426.666747,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +426.666912,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +426.667077,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +426.667241,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +426.667405,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +426.667571,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +426.667736,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +426.667901,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +426.668067,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +426.668232,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +426.668398,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +426.668565,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +426.668730,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +426.668896,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +426.669061,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +426.669226,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +426.669392,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +426.669558,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +426.669723,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +426.669888,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +426.670054,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +426.670220,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +426.670386,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +426.670551,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +426.670717,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +426.670881,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +426.671047,0.039360,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +426.692565,53.533927,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","95",,,"spmv3",1875 +426.692706,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +426.746098,4.619894,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","94",,,"sum",1879 +426.746188,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +426.746201,4.619542,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","95",,,"sum",1883 +426.750851,9.252268,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","94",,,"divide",1888 +426.750926,6.894609,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","95",,,"divide",1893 +426.760129,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +426.760169,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +426.760426,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +426.760465,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +426.760610,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +426.760647,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +426.760772,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +426.760809,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +426.761006,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +426.761426,54.558743,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","96",,,"spmv3",1911 +426.761576,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +426.815984,53.573606,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","97",,,"spmv3",1921 +426.816116,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +426.869557,4.620247,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","96",,,"sum",1925 +426.869704,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +426.869716,4.618806,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","97",,,"sum",1929 +426.874357,9.253452,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","96",,,"divide",1934 +426.874467,6.911953,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","97",,,"divide",1939 +426.883645,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +426.883685,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +426.883762,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +426.883798,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +426.883818,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +426.883854,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +426.883872,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +426.883907,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +426.884095,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +426.884247,54.516728,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","98",,,"spmv3",1957 +426.884371,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +426.938763,53.520168,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","99",,,"spmv3",1967 +426.938901,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +426.992282,4.619030,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","98",,,"sum",1971 +426.992429,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +426.992442,4.617686,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","99",,,"sum",1975 +426.997038,9.301419,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","98",,,"divide",1980 +426.997125,6.903858,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","99",,,"divide",1985 +427.006432,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +427.006471,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +427.006582,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +427.006618,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +427.006651,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +427.006686,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +427.006702,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +427.006737,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +427.006945,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +427.007132,54.574807,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","100",,,"spmv3",2003 +427.007258,0.001920,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +427.061706,53.513671,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","101",,,"spmv3",2013 +427.061854,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +427.115219,4.618358,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","100",,,"sum",2017 +427.115373,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +427.115387,4.615958,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","101",,,"sum",2021 +427.119980,9.281612,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","100",,,"divide",2026 +427.120067,6.897682,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","101",,,"divide",2031 +427.129365,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +427.129403,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +427.129496,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +427.129532,0.001344,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +427.129568,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +427.129604,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +427.129630,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +427.129666,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +427.130070,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +427.130259,54.594262,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","102",,,"spmv3",2049 +427.130370,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +427.184853,53.470057,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","103",,,"spmv3",2059 +427.184985,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +427.238322,4.620214,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","102",,,"sum",2063 +427.238417,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +427.238430,4.617942,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","103",,,"sum",2067 +427.243086,9.257260,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","102",,,"divide",2072 +427.243166,6.906322,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","103",,,"divide",2077 +427.252365,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +427.252402,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +427.252460,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +427.252497,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +427.252516,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +427.252551,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +427.252571,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +427.252605,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +427.252636,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +427.252674,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +427.252675,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +427.252682,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +427.252720,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +427.252722,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +434.444768,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +434.444896,0.061759,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +434.445195,0.162174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +434.445495,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +434.445803,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +434.446103,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +434.446404,0.162237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +434.446710,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +434.447013,0.162238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +434.447315,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +434.447620,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +434.447920,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +434.448221,0.172253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +434.448425,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +434.448589,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +434.448753,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +434.448917,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +434.449081,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +434.449245,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +434.449410,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +434.449574,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +434.449738,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +434.449902,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +434.450066,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +434.450231,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +434.450404,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +434.450569,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +434.450732,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +434.450897,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +434.451062,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +434.451226,0.039327,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +434.451266,0.145406,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +434.451413,0.168093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +434.451582,0.167709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +434.451751,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +434.451916,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +434.452081,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +434.452245,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +434.452410,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +434.452574,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +434.452739,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +434.452903,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +434.453067,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +434.453231,0.171965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +434.453404,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +434.453569,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +434.453734,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +434.453898,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +434.454062,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +434.454225,0.171229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +434.454398,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +434.454561,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +434.454726,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +434.454891,0.183645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +434.455076,0.204893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +434.455282,0.209980,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +434.455493,0.204061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +434.455699,0.210461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +434.455911,0.215548,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +434.456127,0.203709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +434.456332,0.204061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +434.456538,0.206556,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +434.456745,0.200669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +434.456947,0.206909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +434.457155,0.212540,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +434.457369,0.210077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +434.457580,0.205053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +434.457787,0.202076,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +434.457990,0.194301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +434.458186,0.173182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +434.458360,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +434.458525,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +434.458706,0.200701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +434.458907,0.201181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +434.459110,0.203132,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +434.459314,0.206685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +434.459522,0.201277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +434.459725,0.201820,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +434.459928,0.197565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +434.460126,0.209533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +434.460337,0.204189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +434.460543,0.209052,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +434.460753,0.212797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +434.460967,0.212252,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +434.461181,0.217725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +434.461400,0.173277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +434.461574,0.166813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +434.461742,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +434.461908,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +434.462072,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +434.462236,0.171517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +434.462409,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +434.462574,0.164765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +434.462740,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +434.462906,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +434.463070,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +434.463234,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +434.463398,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +434.463564,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +434.463728,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +434.463892,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +434.464056,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +434.464219,0.190365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +434.464411,0.197565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +434.464610,0.206684,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +434.464818,0.192637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +434.465012,0.193405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +434.465206,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +434.465406,0.196893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +434.465604,0.196413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +434.465801,0.188797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +434.465992,0.193629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +434.466187,0.203325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +434.466391,0.198013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +434.466590,0.174461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +434.466766,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +434.466948,0.183133,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +434.467132,0.026080,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +434.467160,0.199581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +434.467361,0.196412,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +434.467558,0.196285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +434.467756,0.191549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +434.467949,0.198749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +434.468148,0.203133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +434.468353,0.191677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +434.468546,0.191581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +434.468739,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +434.468935,0.196733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +434.469133,0.188925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +434.469323,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +434.469507,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +434.469690,0.188861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +434.469880,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +434.470069,0.185117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +434.470255,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +434.470442,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +434.470631,0.192477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +434.470825,0.185277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +434.471011,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +434.471196,0.185085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +434.471382,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +434.471569,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +434.471755,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +434.471942,0.198621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +434.472141,0.194781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +434.472338,0.195453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +434.472534,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +434.472725,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +434.472914,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +434.473096,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +434.473289,0.188541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +434.473478,0.183869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +434.473663,0.181757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +434.473846,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +434.474029,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +434.474215,0.190781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +434.474407,0.187389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +434.474596,0.183581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +434.474781,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +434.474962,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +434.475147,0.185757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +434.475334,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +434.475518,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +434.475708,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +434.475889,0.180189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +434.476071,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +434.476254,0.189501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +434.476445,0.170429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +434.476617,0.179134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +434.476797,0.169533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +434.476968,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +434.477145,0.166557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +434.477312,0.173502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +434.477487,0.181374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +434.477670,0.176253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +434.477847,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +434.478012,0.175421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +434.478189,0.173469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +434.478364,0.168606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +434.478533,0.166973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +434.478702,0.170205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +434.478873,0.169790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +434.479044,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +434.479218,0.180285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +434.479400,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +434.479584,0.174173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +434.479759,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +434.479929,0.172318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +434.480103,0.167389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +434.480271,0.166205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +434.480439,0.168990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +434.480609,0.175293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +434.480785,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +434.480968,0.179005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +434.481148,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +434.481338,0.178845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +434.481518,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +434.481701,0.170301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +434.481872,0.173150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +434.482047,0.168893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +434.482217,0.166173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +434.482385,0.169501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +434.482555,0.177598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +434.482734,0.126654,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +434.482862,0.176830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +434.483040,0.177085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +434.483218,0.178269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +434.483398,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +434.483582,0.170685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +434.483754,0.176957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +434.483932,0.170078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +434.484103,0.167549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +434.484272,0.170365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +434.484444,0.175869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +434.484621,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +434.484805,0.176990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +434.484984,0.196604,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +434.485181,0.185277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +434.485368,0.189853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +434.485559,0.189981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +434.485751,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +434.485940,0.183421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +434.486124,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +434.486310,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +434.486502,0.189885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +434.486693,0.185821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +434.486880,0.165854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +434.487047,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +434.487211,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +434.487375,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +434.487540,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +434.487703,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +434.487868,0.100127,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +434.487969,0.102238,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +434.488072,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +434.488236,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +434.488400,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +434.488565,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +434.488729,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +434.488893,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +434.489057,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +434.489222,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +434.489386,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +434.489550,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +434.489714,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +434.489879,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +434.490043,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +434.490207,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +434.490372,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +434.490536,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +434.490700,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +434.490864,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +434.491028,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +434.491193,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +434.491357,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +434.491522,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +434.491686,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +434.491851,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +434.492015,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +434.492179,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +434.492342,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +434.492507,0.160670,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +434.493136,64.666487,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","104",,,"spmv3",2097 +434.493384,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +434.493491,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +434.493656,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +434.493822,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +434.493987,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +434.494153,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +434.494318,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +434.494483,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +434.494648,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +434.494813,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +434.494978,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +434.495144,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +434.495310,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +434.495476,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +434.495641,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +434.495807,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +434.495973,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +434.496138,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +434.496304,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +434.496469,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +434.496634,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +434.496799,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +434.496966,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +434.497132,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +434.497297,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +434.497464,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +434.497631,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +434.497796,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +434.497960,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +434.498126,0.100415,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +434.498228,0.123998,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +434.498354,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +434.498520,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +434.498685,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +434.498851,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +434.499017,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +434.499183,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +434.499349,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +434.499515,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +434.499680,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +434.499845,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +434.500011,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +434.500175,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +434.500340,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +434.500507,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +434.500673,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +434.500838,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +434.501003,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +434.501169,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +434.501335,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +434.501500,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +434.501666,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +434.501832,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +434.501998,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +434.502164,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +434.502330,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +434.502495,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +434.502661,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +434.502827,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +434.502993,0.166782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +434.503161,0.169565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +434.503334,0.168541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +434.503504,0.166846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +434.503673,0.166654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +434.503842,0.167549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +434.504011,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +434.504178,0.166782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +434.504348,0.168285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +434.504519,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +434.504689,0.167934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +434.504859,0.167005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +434.505029,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +434.505198,0.166045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +434.505366,0.166558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +434.505535,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +434.505702,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +434.505870,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +434.506037,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +434.506206,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +434.506370,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +434.506535,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +434.506701,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +434.506867,0.164830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +434.507034,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +434.507200,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +434.507366,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +434.507531,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +434.507697,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +434.507862,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +434.508028,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +434.508193,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +434.508359,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +434.508525,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +434.508691,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +434.508857,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +434.509023,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +434.509189,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +434.509354,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +434.509520,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +434.509685,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +434.509850,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +434.510015,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +434.510180,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +434.510346,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +434.510512,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +434.510678,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +434.510844,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +434.511008,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +434.511174,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +434.511339,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +434.511506,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +434.511672,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +434.511837,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +434.512002,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +434.512167,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +434.512332,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +434.512497,0.014848,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +434.512514,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +434.512680,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +434.512845,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +434.513010,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +434.513176,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +434.513342,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +434.513508,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +434.513673,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +434.513839,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +434.514004,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +434.514170,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +434.514337,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +434.514503,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +434.514669,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +434.514836,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +434.515001,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +434.515167,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +434.515331,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +434.515496,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +434.515661,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +434.515827,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +434.515992,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +434.516158,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +434.516323,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +434.516488,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +434.516653,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +434.516818,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +434.516984,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +434.517149,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +434.517314,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +434.517481,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +434.517647,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +434.517812,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +434.517978,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +434.518144,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +434.518310,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +434.518475,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +434.518641,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +434.518806,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +434.518971,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +434.519137,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +434.519302,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +434.519468,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +434.519634,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +434.519800,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +434.519966,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +434.520132,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +434.520299,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +434.520464,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +434.520629,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +434.520796,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +434.520962,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +434.521127,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +434.521293,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +434.521459,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +434.521625,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +434.521790,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +434.521955,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +434.522121,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +434.522286,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +434.522452,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +434.522618,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +434.522783,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +434.522949,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +434.523114,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +434.523279,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +434.523444,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +434.523609,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +434.523776,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +434.523941,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +434.524107,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +434.524273,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +434.524438,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +434.524604,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +434.524770,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +434.524936,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +434.525102,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +434.525268,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +434.525434,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +434.525600,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +434.525765,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +434.525931,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +434.526097,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +434.526263,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +434.526428,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +434.526594,0.135742,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +434.526732,0.042015,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +434.526776,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +434.526944,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +434.527110,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +434.527276,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +434.527441,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +434.527606,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +434.527772,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +434.527939,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +434.528104,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +434.528270,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +434.528436,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +434.528603,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +434.528767,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +434.528933,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +434.529098,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +434.529264,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +434.529431,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +434.529595,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +434.529760,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +434.529925,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +434.530091,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +434.530257,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +434.530424,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +434.530588,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +434.530756,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +434.530922,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +434.531088,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +434.531253,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +434.531418,0.059519,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +434.531480,0.062463,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +434.531545,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +434.531711,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +434.531876,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +434.532042,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +434.532209,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +434.532374,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +434.532539,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +434.532705,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +434.532870,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +434.533036,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +434.533201,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +434.533367,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +434.533532,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +434.533698,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +434.533863,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +434.534028,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +434.534193,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +434.534359,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +434.534524,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +434.534689,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +434.534855,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +434.535021,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +434.535188,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +434.535353,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +434.535519,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +434.535686,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +434.535852,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +434.536017,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +434.536182,0.039808,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +434.557802,53.506472,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","105",,,"spmv3",2107 +434.557951,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +434.611307,4.621335,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","104",,,"sum",2111 +434.611407,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +434.611421,4.620214,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","105",,,"sum",2115 +434.616077,9.261580,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","104",,,"divide",2120 +434.616163,6.903121,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","105",,,"divide",2125 +434.625360,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +434.625403,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +434.625486,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +434.625526,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +434.625700,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +434.625741,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +434.625924,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +434.625966,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +434.626308,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +434.626674,54.520056,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","106",,,"spmv3",2143 +434.626821,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +434.681193,53.484490,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","107",,,"spmv3",2153 +434.681328,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +434.734677,4.619766,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","106",,,"sum",2157 +434.734799,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +434.734813,4.619415,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","107",,,"sum",2161 +434.739438,9.251981,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","106",,,"divide",2166 +434.739527,6.909586,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","107",,,"divide",2171 +434.748720,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +434.748763,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +434.748829,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +434.748868,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +434.748888,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +434.748927,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +434.748939,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +434.748977,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +434.749156,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +434.749346,54.548632,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","108",,,"spmv3",2189 +434.749522,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +434.803894,53.555560,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","109",,,"spmv3",2199 +434.803998,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +434.857449,4.622966,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","108",,,"sum",2203 +434.857576,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +434.857593,4.622614,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","109",,,"sum",2207 +434.862195,9.293100,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","108",,,"divide",2212 +434.862286,6.899218,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","109",,,"divide",2217 +434.871532,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +434.871574,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +434.871680,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +434.871720,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +434.871762,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +434.871801,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +434.871815,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +434.871853,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +434.872063,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +434.872251,54.576855,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","110",,,"spmv3",2235 +434.872379,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +434.926828,53.599208,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","111",,,"spmv3",2245 +434.926927,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +434.980426,4.619030,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","110",,,"sum",2249 +434.980519,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +434.980532,4.617750,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","111",,,"sum",2253 +434.985243,9.245740,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","110",,,"divide",2258 +434.985307,6.906545,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","111",,,"divide",2263 +434.994500,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +434.994541,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +434.994621,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +434.994660,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +434.994677,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +434.994716,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +434.994731,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +434.994769,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +434.994932,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +434.995116,54.530456,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","112",,,"spmv3",2281 +434.995219,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +435.049646,53.560936,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","113",,,"spmv3",2291 +435.049771,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +435.103206,4.620406,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","112",,,"sum",2295 +435.103323,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +435.103337,4.619382,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","113",,,"sum",2299 +435.107937,9.291404,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","112",,,"divide",2304 +435.108028,6.906802,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","113",,,"divide",2309 +435.117282,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +435.117323,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +435.117394,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +435.117433,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +435.117451,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +435.117489,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +435.117503,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +435.117540,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +435.117576,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +435.117617,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +435.117619,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +435.117642,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +435.117684,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +435.117685,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +442.411490,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +442.411534,0.061663,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +442.411637,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +442.411801,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +442.411964,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +442.412128,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +442.412292,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +442.412456,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +442.412620,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +442.412784,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +442.412948,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +442.413112,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +442.413276,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +442.413440,0.162365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +442.413604,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +442.413767,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +442.413931,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +442.414094,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +442.414259,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +442.414423,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +442.414587,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +442.414752,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +442.414916,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +442.415081,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +442.415245,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +442.415411,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +442.415575,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +442.415740,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +442.415904,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +442.416068,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +442.416233,0.039456,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +442.416273,0.142909,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +442.416417,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +442.416581,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +442.416745,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +442.416910,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +442.417074,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +442.417238,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +442.417403,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +442.417567,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +442.417732,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +442.417896,0.167197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +442.418064,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +442.418230,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +442.418395,0.167869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +442.418564,0.168029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +442.418733,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +442.418898,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +442.419062,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +442.419226,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +442.419390,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +442.419554,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +442.419720,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +442.419886,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +442.420050,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +442.420215,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +442.420379,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +442.420543,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +442.420707,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +442.420872,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +442.421036,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +442.421199,0.171389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +442.421372,0.169982,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +442.421543,0.202973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +442.421747,0.213341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +442.421962,0.207484,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +442.422171,0.204573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +442.422376,0.216157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +442.422594,0.217020,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +442.422812,0.202973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +442.423017,0.205373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +442.423223,0.212604,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +442.423437,0.205725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +442.423644,0.211453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +442.423857,0.215740,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +442.424074,0.219677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +442.424295,0.215164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +442.424511,0.211997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +442.424724,0.172989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +442.424898,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +442.425063,0.166782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +442.425231,0.206332,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +442.425439,0.205181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +442.425645,0.207421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +442.425854,0.204316,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +442.426059,0.206845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +442.426268,0.206685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +442.426475,0.199452,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +442.426676,0.204157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +442.426881,0.208765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +442.427091,0.207644,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +442.427300,0.209789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +442.427511,0.206237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +442.427719,0.211164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +442.427932,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +442.428123,0.169214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +442.428294,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +442.428461,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +442.428625,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +442.428789,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +442.428954,0.166141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +442.429121,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +442.429286,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +442.429451,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +442.429615,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +442.429778,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +442.429942,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +442.430107,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +442.430272,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +442.430435,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +442.430600,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +442.430764,0.196541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +442.430961,0.194173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +442.431157,0.198205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +442.431356,0.194301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +442.431552,0.197628,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +442.431751,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +442.431938,0.025312,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +442.431964,0.197597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +442.432163,0.192157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +442.432356,0.188125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +442.432546,0.192765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +442.432740,0.193084,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +442.432934,0.181150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +442.433117,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +442.433300,0.194012,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +442.433496,0.191069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +442.433688,0.194589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +442.433884,0.196893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +442.434082,0.192029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +442.434275,0.205053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +442.434482,0.211772,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +442.434695,0.189981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +442.434886,0.194589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +442.435082,0.198621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +442.435282,0.203037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +442.435486,0.191677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +442.435679,0.183997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +442.435864,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +442.436054,0.188445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +442.436244,0.191132,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +442.436436,0.180670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +442.436618,0.183997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +442.436803,0.189533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +442.436994,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +442.437178,0.191325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +442.437370,0.182557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +442.437554,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +442.437735,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +442.437919,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +442.438107,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +442.438293,0.186525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +442.438481,0.184765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +442.438667,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +442.438850,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +442.439034,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +442.439218,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +442.439403,0.182557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +442.439586,0.178717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +442.439766,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +442.439950,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +442.440132,0.197437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +442.440330,0.182013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +442.440514,0.179837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +442.440695,0.185245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +442.440881,0.184797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +442.441067,0.179870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +442.441248,0.179453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +442.441429,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +442.441612,0.181661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +442.441795,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +442.441981,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +442.442163,0.172829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +442.442337,0.179389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +442.442518,0.169150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +442.442688,0.175773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +442.442865,0.166749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +442.443033,0.175677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +442.443210,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +442.443391,0.177181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +442.443569,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +442.443734,0.176381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +442.443912,0.172765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +442.444086,0.169277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +442.444256,0.167038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +442.444424,0.171325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +442.444597,0.171037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +442.444769,0.171614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +442.444942,0.181886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +442.445125,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +442.445308,0.173821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +442.445483,0.168285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +442.445652,0.173949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +442.445827,0.169662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +442.445998,0.165917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +442.446165,0.169981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +442.446336,0.180029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +442.446518,0.176477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +442.446696,0.179358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +442.446876,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +442.447058,0.180541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +442.447240,0.178909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +442.447420,0.171613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +442.447593,0.122046,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +442.447716,0.169437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +442.447887,0.167038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +442.448055,0.166877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +442.448223,0.173885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +442.448398,0.179197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +442.448578,0.175550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +442.448755,0.178781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +442.448935,0.179677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +442.449116,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +442.449297,0.169693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +442.449468,0.170109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +442.449639,0.170078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +442.449810,0.168221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +442.449979,0.169469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +442.450150,0.175709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +442.450327,0.179806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +442.450508,0.179165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +442.450689,0.194237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +442.450884,0.191612,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +442.451077,0.188605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +442.451267,0.189085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +442.451457,0.183389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +442.451641,0.187869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +442.451831,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +442.452020,0.189437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +442.452211,0.196701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +442.452409,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +442.452596,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +442.452760,0.100126,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +442.452861,0.102398,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +442.452965,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +442.453129,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +442.453293,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +442.453457,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +442.453621,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +442.453786,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +442.453950,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +442.454114,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +442.454278,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +442.454442,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +442.454607,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +442.454771,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +442.454935,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +442.455099,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +442.455264,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +442.455428,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +442.455592,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +442.455757,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +442.455921,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +442.456085,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +442.456250,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +442.456414,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +442.456579,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +442.456743,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +442.456907,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +442.457071,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +442.457236,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +442.457400,0.161246,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +442.457916,64.589976,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","114",,,"spmv3",2329 +442.458164,0.002112,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +442.458267,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +442.458433,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +442.458598,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +442.458763,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +442.458929,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +442.459095,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +442.459262,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +442.459427,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +442.459592,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +442.459758,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +442.459924,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +442.460089,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +442.460254,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +442.460419,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +442.460584,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +442.460749,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +442.460914,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +442.461079,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +442.461244,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +442.461411,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +442.461577,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +442.461743,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +442.461909,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +442.462076,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +442.462241,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +442.462407,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +442.462572,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +442.462739,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +442.462905,0.100575,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +442.463007,0.123198,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +442.463133,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +442.463299,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +442.463465,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +442.463630,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +442.463795,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +442.463961,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +442.464128,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +442.464294,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +442.464459,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +442.464624,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +442.464790,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +442.464956,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +442.465121,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +442.465286,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +442.465453,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +442.465618,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +442.465783,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +442.465948,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +442.466113,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +442.466279,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +442.466444,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +442.466611,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +442.466777,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +442.466942,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +442.467108,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +442.467273,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +442.467439,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +442.467604,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +442.467769,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +442.467935,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +442.468100,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +442.468265,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +442.468431,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +442.468597,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +442.468763,0.171485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +442.468938,0.167997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +442.469109,0.169086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +442.469279,0.167838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +442.469449,0.167261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +442.469618,0.167293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +442.469788,0.166334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +442.469956,0.168029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +442.470126,0.166749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +442.470296,0.167390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +442.470465,0.167485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +442.470635,0.169149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +442.470806,0.167837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +442.470976,0.166398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +442.471144,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +442.471312,0.165757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +442.471481,0.170334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +442.471653,0.168893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +442.471824,0.165597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +442.471992,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +442.472157,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +442.472322,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +442.472489,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +442.472654,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +442.472819,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +442.472985,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +442.473150,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +442.473317,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +442.473481,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +442.473647,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +442.473813,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +442.473979,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +442.474144,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +442.474311,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +442.474477,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +442.474642,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +442.474807,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +442.474972,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +442.475138,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +442.475304,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +442.475469,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +442.475636,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +442.475801,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +442.475966,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +442.476132,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +442.476298,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +442.476463,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +442.476629,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +442.476794,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +442.476960,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +442.477126,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +442.477291,0.014880,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +442.477308,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +442.477473,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +442.477638,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +442.477804,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +442.477970,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +442.478136,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +442.478302,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +442.478468,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +442.478633,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +442.478798,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +442.478963,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +442.479128,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +442.479294,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +442.479459,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +442.479624,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +442.479790,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +442.479955,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +442.480121,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +442.480285,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +442.480451,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +442.480617,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +442.480782,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +442.480947,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +442.481112,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +442.481278,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +442.481444,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +442.481609,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +442.481776,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +442.481941,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +442.482106,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +442.482271,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +442.482437,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +442.482602,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +442.482768,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +442.482933,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +442.483099,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +442.483264,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +442.483431,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +442.483596,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +442.483762,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +442.483927,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +442.484092,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +442.484257,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +442.484423,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +442.484589,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +442.484754,0.169117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +442.484926,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +442.485092,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +442.485257,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +442.485424,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +442.485589,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +442.485755,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +442.485920,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +442.486086,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +442.486251,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +442.486416,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +442.486582,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +442.486748,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +442.486914,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +442.487080,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +442.487246,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +442.487413,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +442.487579,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +442.487745,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +442.487911,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +442.488076,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +442.488242,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +442.488406,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +442.488572,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +442.488738,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +442.488903,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +442.489069,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +442.489235,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +442.489400,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +442.489567,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +442.489733,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +442.489898,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +442.490064,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +442.490230,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +442.490396,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +442.490562,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +442.490727,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +442.490892,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +442.491058,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +442.491223,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +442.491390,0.136190,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +442.491529,0.042111,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +442.491574,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +442.491740,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +442.491907,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +442.492074,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +442.492238,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +442.492404,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +442.492569,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +442.492735,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +442.492901,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +442.493067,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +442.493233,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +442.493398,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +442.493563,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +442.493729,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +442.493895,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +442.494060,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +442.494225,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +442.494390,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +442.494555,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +442.494720,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +442.494885,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +442.495051,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +442.495217,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +442.495384,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +442.495549,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +442.495714,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +442.495879,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +442.496044,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +442.496211,0.059967,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +442.496274,0.062111,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +442.496338,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +442.496503,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +442.496669,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +442.496835,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +442.496999,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +442.497165,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +442.497330,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +442.497496,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +442.497662,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +442.497828,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +442.497992,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +442.498158,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +442.498324,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +442.498490,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +442.498655,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +442.498821,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +442.498987,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +442.499152,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +442.499320,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +442.499485,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +442.499650,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +442.499814,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +442.499979,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +442.500144,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +442.500310,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +442.500475,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +442.500640,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +442.500805,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +442.500972,0.039807,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +442.522506,53.466699,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","115",,,"spmv3",2339 +442.522622,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +442.575972,4.622038,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","114",,,"sum",2343 +442.576092,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +442.576107,4.619478,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","115",,,"sum",2347 +442.580732,9.248396,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","114",,,"divide",2352 +442.580842,6.896018,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","115",,,"divide",2357 +442.589992,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +442.590038,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +442.590103,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +442.590146,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +442.590159,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +442.590201,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +442.590208,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +442.590249,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +442.590388,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +442.590540,54.527802,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","116",,,"spmv3",2375 +442.590642,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +442.645068,53.607144,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","117",,,"spmv3",2385 +442.645201,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +442.698674,4.620567,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","116",,,"sum",2389 +442.698798,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +442.698814,4.619606,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","117",,,"sum",2393 +442.703433,9.247949,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","116",,,"divide",2398 +442.703481,6.913521,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","117",,,"divide",2403 +442.712740,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +442.712786,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +442.712868,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +442.712912,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +442.712933,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +442.712976,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +442.712991,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +442.713033,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +442.713421,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +442.713612,54.611320,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","118",,,"spmv3",2421 +442.713724,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +442.768223,53.504810,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","119",,,"spmv3",2431 +442.768345,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +442.821727,4.620214,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","118",,,"sum",2435 +442.821892,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +442.821909,4.619478,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","119",,,"sum",2439 +442.826490,9.295820,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","118",,,"divide",2444 +442.826667,6.897586,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","119",,,"divide",2449 +442.835835,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +442.835880,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +442.835948,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +442.835991,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +442.836007,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +442.836049,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +442.836059,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +442.836100,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +442.836303,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +442.836496,54.603033,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","120",,,"spmv3",2467 +442.836603,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +442.891098,53.565065,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","121",,,"spmv3",2477 +442.891235,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +442.944663,4.620278,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","120",,,"sum",2481 +442.944781,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +442.944796,4.619767,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","121",,,"sum",2485 +442.949424,9.253388,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","120",,,"divide",2490 +442.949539,6.901394,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","121",,,"divide",2495 +442.958709,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +442.958754,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +442.958821,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +442.958863,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +442.958877,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +442.958918,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +442.958934,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +442.958975,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +442.959180,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +442.959374,54.547769,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","122",,,"spmv3",2513 +442.959477,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +443.013921,53.374988,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","123",,,"spmv3",2523 +443.014036,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +443.067295,4.620470,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","122",,,"sum",2527 +443.067402,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +443.067416,4.619446,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","123",,,"sum",2531 +443.072042,9.256588,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","122",,,"divide",2536 +443.072121,6.909266,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","123",,,"divide",2541 +443.081309,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +443.081354,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +443.081407,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +443.081449,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +443.081463,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +443.081505,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +443.081516,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +443.081556,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +443.081584,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +443.081628,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +443.081629,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +443.081651,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +443.081696,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +443.081697,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +450.367583,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +450.367631,0.061695,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +450.367738,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +450.367903,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +450.368067,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +450.368231,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +450.368395,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +450.368559,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +450.368723,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +450.368887,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +450.369051,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +450.369215,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +450.369379,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +450.369543,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +450.369707,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +450.369872,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +450.370036,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +450.370200,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +450.370363,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +450.370527,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +450.370692,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +450.370858,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +450.371022,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +450.371186,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +450.371351,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +450.371515,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +450.371679,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +450.371843,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +450.372008,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +450.372172,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +450.372336,0.039679,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +450.372377,0.142814,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +450.372521,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +450.372685,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +450.372850,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +450.373015,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +450.373179,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +450.373344,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +450.373509,0.165438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +450.373675,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +450.373842,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +450.374009,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +450.374175,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +450.374340,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +450.374504,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +450.374670,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +450.374835,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +450.375000,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +450.375164,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +450.375328,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +450.375493,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +450.375657,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +450.375821,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +450.375986,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +450.376150,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +450.376315,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +450.376479,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +450.376643,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +450.376807,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +450.376971,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +450.377135,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +450.377300,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +450.377464,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +450.377628,0.176030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +450.377805,0.202748,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +450.378009,0.204957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +450.378215,0.202237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +450.378419,0.202333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +450.378622,0.209916,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +450.378833,0.205725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +450.379040,0.203261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +450.379245,0.200828,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +450.379447,0.196221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +450.379644,0.209565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +450.379855,0.198365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +450.380054,0.212252,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +450.380268,0.211389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +450.380480,0.188765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +450.380670,0.203069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +450.380875,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +450.381040,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +450.381205,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +450.381371,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +450.381559,0.197757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +450.381758,0.198428,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +450.381957,0.195293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +450.382154,0.199901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +450.382355,0.212893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +450.382569,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +450.382760,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +450.382950,0.196381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +450.383148,0.199133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +450.383348,0.194141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +450.383543,0.205245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +450.383750,0.199517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +450.383951,0.211484,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +450.384163,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +450.384352,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +450.384520,0.165886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +450.384687,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +450.384852,0.164958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +450.385018,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +450.385182,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +450.385346,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +450.385510,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +450.385676,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +450.385842,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +450.386007,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +450.386171,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +450.386335,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +450.386500,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +450.386664,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +450.386828,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +450.386992,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +450.387155,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +450.387320,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +450.387484,0.156094,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +450.387642,0.021247,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +450.387664,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +450.387828,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +450.387992,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +450.388157,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +450.388321,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +450.388485,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +450.388648,0.177661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +450.388827,0.194717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +450.389023,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +450.389215,0.192509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +450.389409,0.190173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +450.389601,0.193565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +450.389796,0.189021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +450.389986,0.198813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +450.390186,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +450.390379,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +450.390564,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +450.390755,0.193789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +450.390950,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +450.391132,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +450.391297,0.191549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +450.391490,0.185885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +450.391677,0.186845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +450.391865,0.186333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +450.392053,0.189693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +450.392243,0.191101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +450.392436,0.189789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +450.392627,0.189437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +450.392818,0.184157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +450.393003,0.191613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +450.393196,0.189405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +450.393387,0.189245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +450.393577,0.180125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +450.393758,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +450.393932,0.178493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +450.394112,0.173918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +450.394287,0.176925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +450.394465,0.175453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +450.394642,0.172765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +450.394816,0.173533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +450.394990,0.176413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +450.395168,0.174654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +450.395344,0.173917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +450.395519,0.178333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +450.395698,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +450.395877,0.174717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +450.396053,0.177118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +450.396231,0.173950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +450.396406,0.172445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +450.396580,0.172445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +450.396753,0.176381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +450.396931,0.174622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +450.397107,0.176765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +450.397285,0.173981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +450.397460,0.172221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +450.397633,0.173085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +450.397807,0.176638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +450.397985,0.174526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +450.398161,0.173405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +450.398335,0.171453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +450.398508,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +450.398689,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +450.398874,0.177021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +450.399053,0.173278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +450.399227,0.170141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +450.399398,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +450.399571,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +450.399745,0.171390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +450.399917,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +450.400094,0.169949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +450.400265,0.172957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +450.400440,0.174078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +450.400615,0.175453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +450.400792,0.175325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +450.400968,0.175517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +450.401145,0.170749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +450.401317,0.166366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +450.401484,0.174973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +450.401660,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +450.401825,0.170877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +450.401997,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +450.402162,0.165757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +450.402329,0.177117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +450.402507,0.171390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +450.402680,0.168669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +450.402849,0.115422,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +450.402966,0.168957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +450.403136,0.169694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +450.403307,0.165437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +450.403474,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +450.403641,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +450.403807,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +450.403973,0.165437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +450.404140,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +450.404306,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +450.404478,0.173501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +450.404653,0.175933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +450.404830,0.169374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +450.405001,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +450.405167,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +450.405333,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +450.405500,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +450.405665,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +450.405830,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +450.405996,0.166717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +450.406164,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +450.406338,0.174813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +450.406514,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +450.406698,0.179230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +450.406878,0.173789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +450.407053,0.172861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +450.407227,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +450.407401,0.165726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +450.407568,0.166365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +450.407735,0.101438,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +450.407838,0.104511,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +450.407943,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +450.408109,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +450.408274,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +450.408440,0.167677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +450.408609,0.172701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +450.408783,0.169853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +450.408954,0.171518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +450.409127,0.173213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +450.409301,0.172349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +450.409474,0.171037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +450.409647,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +450.409813,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +450.409979,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +450.410144,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +450.410310,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +450.410475,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +450.410641,0.166110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +450.410808,0.171933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +450.410981,0.171485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +450.411154,0.168542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +450.411323,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +450.411516,0.182462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +450.411700,0.186653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +450.411887,0.185821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +450.412074,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +450.412260,0.182333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +450.412444,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +450.412628,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +450.413016,64.626554,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","124",,,"spmv3",2561 +450.413357,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +450.413461,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +450.413627,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +450.413792,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +450.413958,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +450.414124,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +450.414289,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +450.414455,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +450.414619,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +450.414785,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +450.414950,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +450.415115,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +450.415282,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +450.415447,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +450.415613,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +450.415780,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +450.415944,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +450.416109,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +450.416274,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +450.416440,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +450.416605,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +450.416771,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +450.416936,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +450.417101,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +450.417266,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +450.417432,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +450.417599,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +450.417764,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +450.417931,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +450.418095,0.100607,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +450.418198,0.123454,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +450.418323,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +450.418489,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +450.418655,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +450.418819,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +450.418985,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +450.419151,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +450.419318,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +450.419483,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +450.419648,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +450.419815,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +450.419980,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +450.420145,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +450.420310,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +450.420476,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +450.420640,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +450.420806,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +450.420971,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +450.421136,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +450.421302,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +450.421467,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +450.421632,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +450.421797,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +450.421962,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +450.422129,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +450.422294,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +450.422459,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +450.422625,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +450.422791,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +450.422957,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +450.423121,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +450.423287,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +450.423452,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +450.423618,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +450.423784,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +450.423949,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +450.424115,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +450.424280,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +450.424445,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +450.424610,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +450.424776,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +450.424941,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +450.425106,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +450.425271,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +450.425436,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +450.425601,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +450.425767,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +450.425933,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +450.426098,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +450.426265,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +450.426430,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +450.426594,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +450.426759,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +450.426924,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +450.427091,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +450.427256,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +450.427421,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +450.427588,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +450.427753,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +450.427918,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +450.428083,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +450.428250,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +450.428416,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +450.428582,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +450.428747,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +450.428914,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +450.429080,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +450.429245,0.165118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +450.429413,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +450.429580,0.164542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +450.429747,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +450.429913,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +450.430079,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +450.430246,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +450.430413,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +450.430579,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +450.430745,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +450.430910,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +450.431077,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +450.431245,0.167037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +450.431413,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +450.431581,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +450.431747,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +450.431914,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +450.432080,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +450.432246,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +450.432413,0.014496,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +450.432429,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +450.432596,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +450.432762,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +450.432928,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +450.433094,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +450.433260,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +450.433427,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +450.433593,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +450.433758,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +450.433924,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +450.434089,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +450.434254,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +450.434419,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +450.434585,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +450.434751,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +450.434917,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +450.435083,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +450.435248,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +450.435415,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +450.435581,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +450.435746,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +450.435911,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +450.436077,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +450.436242,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +450.436408,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +450.436574,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +450.436740,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +450.436905,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +450.437070,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +450.437235,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +450.437400,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +450.437565,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +450.437730,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +450.437896,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +450.438062,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +450.438229,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +450.438394,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +450.438558,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +450.438724,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +450.438888,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +450.439054,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +450.439220,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +450.439384,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +450.439550,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +450.439716,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +450.439882,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +450.440048,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +450.440214,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +450.440379,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +450.440544,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +450.440711,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +450.440876,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +450.441041,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +450.441206,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +450.441372,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +450.441538,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +450.441704,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +450.441870,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +450.442036,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +450.442201,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +450.442367,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +450.442532,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +450.442698,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +450.442863,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +450.443029,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +450.443193,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +450.443358,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +450.443524,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +450.443690,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +450.443855,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +450.444021,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +450.444187,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +450.444353,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +450.444519,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +450.444684,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +450.444849,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +450.445015,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +450.445181,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +450.445347,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +450.445513,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +450.445678,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +450.445844,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +450.446010,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +450.446176,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +450.446341,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +450.446509,0.135838,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +450.446647,0.041919,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +450.446690,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +450.446854,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +450.447021,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +450.447186,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +450.447352,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +450.447518,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +450.447683,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +450.447849,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +450.448014,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +450.448180,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +450.448345,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +450.448510,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +450.448676,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +450.448842,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +450.449009,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +450.449174,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +450.449340,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +450.449504,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +450.449670,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +450.449836,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +450.450001,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +450.450167,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +450.450333,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +450.450498,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +450.450663,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +450.450828,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +450.450993,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +450.451159,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +450.451324,0.059967,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +450.451387,0.062527,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +450.451452,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +450.451618,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +450.451784,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +450.451950,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +450.452116,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +450.452281,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +450.452446,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +450.452611,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +450.452776,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +450.452942,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +450.453108,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +450.453273,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +450.453439,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +450.453604,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +450.453770,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +450.453934,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +450.454100,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +450.454266,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +450.454431,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +450.454597,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +450.454762,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +450.454927,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +450.455093,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +450.455259,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +450.455425,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +450.455590,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +450.455756,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +450.455921,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +450.456087,0.039679,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +450.477642,53.523819,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","125",,,"spmv3",2571 +450.477760,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +450.531165,4.621526,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","124",,,"sum",2575 +450.531260,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +450.531276,4.619511,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","125",,,"sum",2579 +450.535901,9.258861,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","124",,,"divide",2584 +450.535990,6.896946,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","125",,,"divide",2589 +450.545167,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +450.545216,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +450.545357,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +450.545404,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +450.545415,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +450.545461,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +450.545467,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +450.545512,0.001183,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +450.545693,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +450.545862,54.562106,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","126",,,"spmv3",2607 +450.545963,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +450.600423,53.529515,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","127",,,"spmv3",2617 +450.600520,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +450.653952,4.621174,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","126",,,"sum",2621 +450.654043,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +450.654060,4.619510,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","127",,,"sum",2625 +450.658682,9.251501,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","126",,,"divide",2630 +450.658779,6.913490,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","127",,,"divide",2635 +450.667923,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +450.667970,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +450.668026,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +450.668072,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +450.668072,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +450.668117,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +450.668170,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +450.668215,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +450.668375,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +450.668558,54.548634,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","128",,,"spmv3",2653 +450.668658,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +450.723106,53.519787,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","129",,,"spmv3",2663 +450.723207,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +450.776625,4.618967,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","128",,,"sum",2667 +450.776765,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +450.776782,4.618038,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","129",,,"sum",2671 +450.781363,9.279468,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","128",,,"divide",2676 +450.781485,6.899442,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","129",,,"divide",2681 +450.790674,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +450.790723,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +450.790787,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +450.790832,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +450.790843,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +450.790888,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +450.790895,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +450.790939,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +450.791151,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +450.791342,54.628281,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","130",,,"spmv3",2699 +450.791441,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +450.845969,53.528394,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","131",,,"spmv3",2709 +450.846082,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +450.899497,4.620247,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","130",,,"sum",2713 +450.899592,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +450.899608,4.619126,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","131",,,"sum",2717 +450.904227,9.269228,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","130",,,"divide",2722 +450.904321,6.918321,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","131",,,"divide",2727 +450.913482,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +450.913529,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +450.913571,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +450.913617,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +450.913625,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +450.913670,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +450.913674,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +450.913718,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +450.913861,0.001471,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +450.914043,54.572890,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","132",,,"spmv3",2745 +450.914131,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +450.968615,53.416172,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","133",,,"spmv3",2755 +450.968711,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +451.022031,4.620631,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","132",,,"sum",2759 +451.022160,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +451.022177,4.619158,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","133",,,"sum",2763 +451.026763,9.278188,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","132",,,"divide",2768 +451.026877,6.894770,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","133",,,"divide",2773 +451.036070,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +451.036118,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +451.036183,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +451.036229,0.001344,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +451.036239,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +451.036284,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +451.036291,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +451.036336,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +451.036359,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +451.036407,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +451.036408,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +451.036426,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +451.036474,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +451.036475,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +458.367820,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +458.367865,0.061919,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +458.367965,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +458.368129,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +458.368294,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +458.368458,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +458.368622,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +458.368786,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +458.368951,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +458.369115,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +458.369279,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +458.369443,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +458.369607,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +458.369771,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +458.369935,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +458.370100,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +458.370264,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +458.370428,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +458.370592,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +458.370756,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +458.370921,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +458.371087,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +458.371252,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +458.371416,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +458.371582,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +458.371746,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +458.371911,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +458.372075,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +458.372240,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +458.372404,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +458.372569,0.039391,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +458.372609,0.142558,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +458.372753,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +458.372918,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +458.373083,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +458.373247,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +458.373411,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +458.373576,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +458.373740,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +458.373906,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +458.374071,0.166941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +458.374239,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +458.374406,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +458.374571,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +458.374735,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +458.374899,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +458.375064,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +458.375229,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +458.375393,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +458.375558,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +458.375723,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +458.375887,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +458.376052,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +458.376216,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +458.376381,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +458.376545,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +458.376709,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +458.376873,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +458.377038,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +458.377202,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +458.377367,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +458.377531,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +458.377696,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +458.377861,0.196477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +458.378059,0.208669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +458.378269,0.203228,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +458.378474,0.211837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +458.378687,0.209021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +458.378898,0.203484,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +458.379102,0.204125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +458.379308,0.206301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +458.379515,0.209756,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +458.379726,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +458.379931,0.200253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +458.380132,0.203581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +458.380337,0.205404,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +458.380544,0.195517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +458.380740,0.208861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +458.380950,0.183197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +458.381135,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +458.381300,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +458.381465,0.167933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +458.381635,0.194333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +458.381830,0.201917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +458.382033,0.192349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +458.382227,0.197628,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +458.382426,0.195741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +458.382623,0.194109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +458.382818,0.194813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +458.383014,0.199165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +458.383215,0.202749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +458.383419,0.209756,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +458.383630,0.208509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +458.383840,0.201821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +458.384043,0.202332,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +458.384247,0.201533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +458.384450,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +458.384618,0.166590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +458.384786,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +458.384950,0.165310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +458.385117,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +458.385281,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +458.385445,0.165022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +458.385611,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +458.385776,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +458.385941,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +458.386106,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +458.386271,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +458.386434,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +458.386598,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +458.386763,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +458.386927,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +458.387092,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +458.387257,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +458.387421,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +458.387585,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +458.387749,0.155869,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +458.387906,0.021728,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +458.387929,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +458.388094,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +458.388258,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +458.388423,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +458.388587,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +458.388751,0.167037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +458.388920,0.191773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +458.389113,0.190461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +458.389305,0.192317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +458.389498,0.192253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +458.389692,0.190269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +458.389883,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +458.390071,0.200668,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +458.390273,0.196189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +458.390471,0.188157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +458.390660,0.190717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +458.390852,0.188637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +458.391042,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +458.391229,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +458.391394,0.181694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +458.391577,0.185565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +458.391763,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +458.391947,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +458.392135,0.185181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +458.392321,0.188861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +458.392511,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +458.392701,0.191005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +458.392893,0.186653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +458.393081,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +458.393271,0.184541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +458.393457,0.188893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +458.393647,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +458.393832,0.176957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +458.394010,0.184829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +458.394197,0.187773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +458.394386,0.194845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +458.394582,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +458.394765,0.175613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +458.394942,0.177053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +458.395120,0.174397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +458.395296,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +458.395476,0.176222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +458.395654,0.173789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +458.395829,0.179453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +458.396010,0.176253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +458.396187,0.174525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +458.396363,0.174685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +458.396539,0.174846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +458.396715,0.173245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +458.396890,0.172285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +458.397063,0.175325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +458.397240,0.174461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +458.397416,0.175422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +458.397592,0.175197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +458.397769,0.173469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +458.397943,0.175581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +458.398120,0.173469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +458.398295,0.174078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +458.398470,0.172701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +458.398644,0.171613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +458.398817,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +458.398991,0.171550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +458.399164,0.174141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +458.399339,0.169853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +458.399510,0.172381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +458.399684,0.169310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +458.399854,0.173533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +458.400029,0.175581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +458.400206,0.171581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +458.400379,0.173469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +458.400553,0.174430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +458.400729,0.174781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +458.400905,0.173085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +458.401079,0.175485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +458.401256,0.173021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +458.401431,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +458.401597,0.174397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +458.401773,0.167837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +458.401942,0.168094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +458.402111,0.166685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +458.402279,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +458.402445,0.168254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +458.402614,0.172029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +458.402788,0.170301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +458.402959,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +458.403123,0.118271,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +458.403243,0.169341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +458.403414,0.166269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +458.403581,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +458.403747,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +458.403912,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +458.404079,0.166238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +458.404246,0.165085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +458.404413,0.168061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +458.404582,0.177117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +458.404760,0.179358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +458.404941,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +458.405116,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +458.405283,0.166269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +458.405451,0.166462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +458.405618,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +458.405785,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +458.405951,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +458.406116,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +458.406283,0.171773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +458.406456,0.174846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +458.406632,0.175357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +458.406808,0.172157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +458.406982,0.173693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +458.407157,0.175005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +458.407333,0.168094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +458.407502,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +458.407669,0.166205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +458.407837,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +458.408003,0.103198,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +458.408108,0.106014,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +458.408215,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +458.408381,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +458.408548,0.166749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +458.408716,0.175486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +458.408893,0.172061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +458.409066,0.170973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +458.409238,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +458.409412,0.172829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +458.409586,0.167934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +458.409755,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +458.409921,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +458.410088,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +458.410254,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +458.410420,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +458.410586,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +458.410752,0.170269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +458.410923,0.170269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +458.411095,0.174366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +458.411271,0.168765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +458.411441,0.192061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +458.411634,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +458.411822,0.186877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +458.412010,0.182941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +458.412194,0.181853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +458.412377,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +458.412561,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +458.412744,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +458.412928,0.191005,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +458.413339,65.931270,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","134",,,"spmv3",2793 +458.413612,0.002016,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +458.413713,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +458.413879,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +458.414044,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +458.414211,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +458.414375,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +458.414540,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +458.414706,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +458.414872,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +458.415037,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +458.415202,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +458.415368,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +458.415532,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +458.415697,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +458.415862,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +458.416028,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +458.416194,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +458.416359,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +458.416524,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +458.416691,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +458.416856,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +458.417022,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +458.417187,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +458.417354,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +458.417520,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +458.417685,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +458.417851,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +458.418017,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +458.418183,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +458.418350,0.101342,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +458.418453,0.122558,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +458.418578,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +458.418743,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +458.418909,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +458.419075,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +458.419241,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +458.419407,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +458.419574,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +458.419739,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +458.419905,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +458.420071,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +458.420238,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +458.420404,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +458.420569,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +458.420735,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +458.420901,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +458.421067,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +458.421233,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +458.421397,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +458.421564,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +458.421729,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +458.421895,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +458.422061,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +458.422229,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +458.422394,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +458.422559,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +458.422725,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +458.422890,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +458.423057,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +458.423223,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +458.423389,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +458.423555,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +458.423720,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +458.423885,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +458.424051,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +458.424218,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +458.424383,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +458.424549,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +458.424715,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +458.424880,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +458.425046,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +458.425214,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +458.425379,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +458.425545,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +458.425710,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +458.425876,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +458.426041,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +458.426207,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +458.426372,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +458.426539,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +458.426706,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +458.426871,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +458.427036,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +458.427202,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +458.427368,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +458.427534,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +458.427699,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +458.427866,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +458.428032,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +458.428199,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +458.428364,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +458.428531,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +458.428697,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +458.428863,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +458.429028,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +458.429194,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +458.429360,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +458.429526,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +458.429695,0.165885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +458.429864,0.166238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +458.430032,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +458.430200,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +458.430366,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +458.430532,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +458.430699,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +458.430865,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +458.431031,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +458.431198,0.165053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +458.431364,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +458.431530,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +458.431697,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +458.431864,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +458.432030,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +458.432197,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +458.432363,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +458.432530,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +458.432696,0.015040,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +458.432712,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +458.432879,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +458.433046,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +458.433212,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +458.433379,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +458.433545,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +458.433710,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +458.433875,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +458.434041,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +458.434207,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +458.434373,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +458.434539,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +458.434705,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +458.434870,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +458.435035,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +458.435200,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +458.435368,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +458.435534,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +458.435700,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +458.435864,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +458.436030,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +458.436196,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +458.436363,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +458.436528,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +458.436694,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +458.436859,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +458.437025,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +458.437190,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +458.437358,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +458.437523,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +458.437689,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +458.437855,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +458.438021,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +458.438187,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +458.438353,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +458.438521,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +458.438686,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +458.438852,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +458.439019,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +458.439185,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +458.439351,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +458.439517,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +458.439682,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +458.439848,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +458.440014,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +458.440179,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +458.440345,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +458.440510,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +458.440675,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +458.440842,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +458.441008,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +458.441175,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +458.441340,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +458.441505,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +458.441671,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +458.441837,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +458.442003,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +458.442169,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +458.442334,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +458.442500,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +458.442666,0.165022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +458.442834,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +458.442999,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +458.443164,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +458.443330,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +458.443495,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +458.443661,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +458.443826,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +458.443993,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +458.444157,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +458.444323,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +458.444489,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +458.444655,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +458.444821,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +458.444987,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +458.445152,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +458.445318,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +458.445484,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +458.445651,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +458.445817,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +458.445983,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +458.446149,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +458.446316,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +458.446480,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +458.446647,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +458.446812,0.136894,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +458.446951,0.042751,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +458.446996,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +458.447162,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +458.447327,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +458.447494,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +458.447659,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +458.447824,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +458.447990,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +458.448156,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +458.448321,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +458.448487,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +458.448653,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +458.448819,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +458.448985,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +458.449151,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +458.449317,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +458.449484,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +458.449649,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +458.449816,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +458.449982,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +458.450148,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +458.450315,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +458.450480,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +458.450646,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +458.450812,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +458.450978,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +458.451144,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +458.451310,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +458.451474,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +458.451639,0.060767,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +458.451703,0.063231,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +458.451768,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +458.451933,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +458.452099,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +458.452264,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +458.452431,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +458.452598,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +458.452763,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +458.452929,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +458.453094,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +458.453260,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +458.453426,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +458.453592,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +458.453757,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +458.453925,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +458.454090,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +458.454256,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +458.454423,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +458.454588,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +458.454754,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +458.454920,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +458.455087,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +458.455253,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +458.455418,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +458.455583,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +458.455748,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +458.455915,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +458.456081,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +458.456246,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +458.456413,0.039679,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +458.479270,55.181106,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","135",,,"spmv3",2803 +458.479416,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +458.534451,4.845139,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","134",,,"sum",2807 +458.534568,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +458.534586,4.845043,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","135",,,"sum",2811 +458.539429,9.664294,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","134",,,"divide",2816 +458.539565,7.152814,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","135",,,"divide",2821 +458.549088,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +458.549141,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +458.549188,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +458.549238,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +458.549245,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +458.549293,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +458.549297,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +458.549345,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +458.549506,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +458.549698,54.787064,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","136",,,"spmv3",2839 +458.549791,0.001855,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +458.604484,53.726185,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","137",,,"spmv3",2849 +458.604609,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +458.658210,4.857107,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","136",,,"sum",2853 +458.658325,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +458.658343,4.832755,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","137",,,"sum",2857 +458.663211,9.659750,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","136",,,"divide",2862 +458.663323,7.158446,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","137",,,"divide",2867 +458.672853,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +458.672904,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +458.672940,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +458.672989,0.001376,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +458.672994,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +458.673040,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +458.673042,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +458.673088,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +458.673230,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +458.673411,54.599291,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","138",,,"spmv3",2885 +458.673499,0.001599,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +458.728010,53.506861,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","139",,,"spmv3",2895 +458.728129,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +458.781516,4.620502,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","138",,,"sum",2899 +458.781668,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +458.781686,4.618166,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","139",,,"sum",2903 +458.786277,9.291756,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","138",,,"divide",2908 +458.786403,6.904882,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","139",,,"divide",2913 +458.795597,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +458.795649,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +458.795709,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +458.795758,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +458.795767,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +458.795815,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +458.795819,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +458.795867,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +458.796076,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +458.796234,54.545084,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","140",,,"spmv3",2931 +458.796339,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +458.850779,53.534956,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","141",,,"spmv3",2941 +458.850896,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +458.904313,4.620375,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","140",,,"sum",2945 +458.904432,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +458.904449,4.620278,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","141",,,"sum",2949 +458.909075,9.251373,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","140",,,"divide",2954 +458.909193,6.907058,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","141",,,"divide",2959 +458.918311,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +458.918361,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +458.918400,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +458.918450,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +458.918454,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +458.918503,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +458.918507,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +458.918555,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +458.918703,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +458.918855,54.548059,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","142",,,"spmv3",2977 +458.918949,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +458.973402,53.560300,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","143",,,"spmv3",2987 +458.973507,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +459.026962,4.620214,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","142",,,"sum",2991 +459.027054,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +459.027072,4.617879,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","143",,,"sum",2995 +459.031696,9.253868,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","142",,,"divide",3000 +459.031786,6.904562,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","143",,,"divide",3005 +459.040960,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +459.041011,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +459.041090,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +459.041140,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +459.041147,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +459.041196,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +459.041199,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +459.041247,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +459.041268,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +459.041305,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +459.041319,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +459.041321,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +459.041356,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +459.041357,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +466.254921,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +466.254991,0.063327,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +466.255146,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +466.255312,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +466.255477,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +466.255663,0.205565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +466.255870,0.209020,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +466.256080,0.211293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +466.256293,0.205341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +466.256500,0.211708,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +466.256713,0.211261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +466.256925,0.208477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +466.257135,0.210044,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +466.257346,0.206077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +466.257553,0.208157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +466.257763,0.203580,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +466.257967,0.210909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +466.258179,0.212157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +466.258393,0.199708,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +466.258594,0.204765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +466.258800,0.166973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +466.258968,0.164894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +466.259134,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +466.259321,0.208668,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +466.259531,0.200061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +466.259732,0.204861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +466.259938,0.209629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +466.260149,0.206396,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +466.260357,0.203389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +466.260561,0.201277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +466.260764,0.050431,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +466.260815,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +466.261002,0.202013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +466.261206,0.217468,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +466.261424,0.211165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +466.261637,0.210621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +466.261848,0.215068,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +466.262065,0.171389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +466.262238,0.164830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +466.262403,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +466.262569,0.168605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +466.262738,0.165374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +466.262905,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +466.263069,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +466.263233,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +466.263397,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +466.263561,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +466.263726,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +466.263890,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +466.264054,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +466.264218,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +466.264382,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +466.264546,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +466.264710,0.182237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +466.264894,0.199101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +466.265094,0.193149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +466.265289,0.207869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +466.265498,0.192413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +466.265692,0.200925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +466.265894,0.199165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +466.266094,0.196381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +466.266292,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +466.266483,0.194429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +466.266679,0.199101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +466.266880,0.190717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +466.267072,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +466.267236,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +466.267427,0.196573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +466.267624,0.197628,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +466.267823,0.190589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +466.268015,0.198845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +466.268215,0.192605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +466.268409,0.199261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +466.268610,0.195261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +466.268806,0.197053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +466.269004,0.193629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +466.269199,0.194460,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +466.269395,0.195389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +466.269591,0.190717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +466.269783,0.183613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +466.269968,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +466.270155,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +466.270342,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +466.270530,0.186845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +466.270718,0.185661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +466.270905,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +466.271092,0.186685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +466.271280,0.185470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +466.271467,0.188285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +466.271656,0.184766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +466.271842,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +466.272027,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +466.272215,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +466.272400,0.182301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +466.272584,0.187293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +466.272773,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +466.272962,0.189245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +466.273152,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +466.273337,0.190909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +466.273530,0.181853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +466.273713,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +466.273899,0.184125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +466.274084,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +466.274267,0.180189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +466.274449,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +466.274635,0.185117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +466.274821,0.184957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +466.275007,0.182621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +466.275191,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +466.275376,0.186301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +466.275563,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +466.275750,0.180093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +466.275932,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +466.276118,0.184958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +466.276305,0.184094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +466.276490,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +466.276676,0.176669,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +466.276854,0.024735,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +466.276880,0.173310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +466.277055,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +466.277237,0.170717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +466.277409,0.177149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +466.277588,0.170109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +466.277759,0.173438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +466.277933,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +466.278117,0.180541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +466.278299,0.173245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +466.278473,0.170461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +466.278645,0.178557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +466.278825,0.172798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +466.278999,0.175133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +466.279175,0.165981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +466.279342,0.172925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +466.279516,0.170462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +466.279688,0.172893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +466.279862,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +466.280048,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +466.280236,0.178813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +466.280416,0.172957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +466.280590,0.173630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +466.280765,0.172318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +466.280939,0.169725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +466.281110,0.172637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +466.281283,0.182077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +466.281467,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +466.281649,0.183485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +466.281834,0.182974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +466.282018,0.180253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +466.282199,0.182493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +466.282383,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +466.282567,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +466.282744,0.176989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +466.282922,0.170973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +466.283094,0.168126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +466.283264,0.168733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +466.283434,0.175709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +466.283611,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +466.283792,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +466.283974,0.191389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +466.284166,0.196125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +466.284364,0.201885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +466.284567,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +466.284750,0.181053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +466.284932,0.177661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +466.285111,0.177981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +466.285291,0.176350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +466.285468,0.175485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +466.285645,0.177725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +466.285824,0.173597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +466.285999,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +466.286180,0.177789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +466.286359,0.193757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +466.286554,0.187645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +466.286743,0.190205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +466.286934,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +466.287123,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +466.287307,0.187581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +466.287496,0.189693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +466.287687,0.187197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +466.287875,0.191933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +466.288069,0.187613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +466.288257,0.171806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +466.288430,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +466.288594,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +466.288759,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +466.288923,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +466.289088,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +466.289252,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +466.289416,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +466.289581,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +466.289745,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +466.289909,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +466.290073,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +466.290237,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +466.290402,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +466.290566,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +466.290730,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +466.290894,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +466.291058,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +466.291222,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +466.291386,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +466.291550,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +466.291714,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +466.291879,0.115518,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +466.291995,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +466.292160,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +466.292324,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +466.292488,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +466.292653,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +466.292817,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +466.292981,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +466.293146,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +466.293310,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +466.293474,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +466.293638,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +466.293802,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +466.293967,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +466.294131,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +466.294295,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +466.294460,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +466.294624,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +466.294788,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +466.294952,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +466.295117,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +466.295281,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +466.295445,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +466.295609,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +466.295773,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +466.295938,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +466.296102,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +466.296266,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +466.296431,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +466.296595,0.100062,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +466.296696,0.102494,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +466.296799,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +466.296964,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +466.297128,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +466.297292,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +466.297456,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +466.297620,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +466.297784,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +466.297949,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +466.298113,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +466.298277,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +466.298441,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +466.298606,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +466.298770,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +466.298935,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +466.299099,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +466.299264,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +466.299428,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +466.299592,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +466.299756,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +466.299920,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +466.300085,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +466.300249,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +466.300413,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +466.300577,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +466.300742,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +466.300907,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +466.301071,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +466.301235,0.161117,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +466.301571,64.551870,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","144",,,"spmv3",3025 +466.301830,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +466.301966,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +466.302131,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +466.302297,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +466.302462,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +466.302628,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +466.302794,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +466.302960,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +466.303126,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +466.303291,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +466.303458,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +466.303625,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +466.303790,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +466.303955,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +466.304120,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +466.304285,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +466.304451,0.170942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +466.304624,0.170973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +466.304797,0.170173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +466.304970,0.172093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +466.305144,0.173278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +466.305319,0.168509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +466.305490,0.165597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +466.305658,0.168446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +466.305828,0.168573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +466.305999,0.167229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +466.306168,0.169629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +466.306340,0.170846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +466.306513,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +466.306682,0.102174,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +466.306788,0.124766,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +466.306915,0.167198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +466.307085,0.166173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +466.307253,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +466.307422,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +466.307588,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +466.307754,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +466.307920,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +466.308086,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +466.308252,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +466.308419,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +466.308584,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +466.308751,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +466.308917,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +466.309082,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +466.309248,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +466.309412,0.162269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +466.309577,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +466.309743,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +466.309908,0.164669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +466.310074,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +466.310239,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +466.310404,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +466.310569,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +466.310734,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +466.310899,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +466.311065,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +466.311231,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +466.311397,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +466.311563,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +466.311729,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +466.311895,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +466.312061,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +466.312226,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +466.312391,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +466.312557,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +466.312722,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +466.312888,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +466.313054,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +466.313219,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +466.313384,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +466.313551,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +466.313716,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +466.313881,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +466.314047,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +466.314212,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +466.314378,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +466.314543,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +466.314709,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +466.314875,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +466.315040,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +466.315205,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +466.315371,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +466.315536,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +466.315701,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +466.315867,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +466.316033,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +466.316198,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +466.316363,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +466.316531,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +466.316696,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +466.316861,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +466.317027,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +466.317193,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +466.317359,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +466.317524,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +466.317690,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +466.317855,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +466.318021,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +466.318186,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +466.318352,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +466.318517,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +466.318682,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +466.318848,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +466.319013,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +466.319178,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +466.319344,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +466.319509,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +466.319674,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +466.319838,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +466.320004,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +466.320169,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +466.320336,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +466.320503,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +466.320667,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +466.320833,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +466.320999,0.014688,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +466.321016,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +466.321182,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +466.321348,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +466.321514,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +466.321680,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +466.321845,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +466.322011,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +466.322176,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +466.322342,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +466.322507,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +466.322674,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +466.322839,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +466.323003,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +466.323169,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +466.323334,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +466.323500,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +466.323665,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +466.323830,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +466.323997,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +466.324163,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +466.324329,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +466.324495,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +466.324661,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +466.324826,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +466.324992,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +466.325158,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +466.325323,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +466.325490,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +466.325657,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +466.325821,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +466.325987,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +466.326152,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +466.326318,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +466.326486,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +466.326651,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +466.326818,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +466.326984,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +466.327150,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +466.327316,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +466.327483,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +466.327648,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +466.327814,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +466.327979,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +466.328145,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +466.328310,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +466.328476,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +466.328641,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +466.328807,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +466.328972,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +466.329138,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +466.329303,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +466.329469,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +466.329635,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +466.329799,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +466.329965,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +466.330131,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +466.330296,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +466.330462,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +466.330627,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +466.330793,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +466.330958,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +466.331122,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +466.331288,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +466.331453,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +466.331620,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +466.331785,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +466.331950,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +466.332115,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +466.332280,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +466.332445,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +466.332611,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +466.332777,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +466.332942,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +466.333108,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +466.333274,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +466.333439,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +466.333604,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +466.333770,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +466.333936,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +466.334102,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +466.334268,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +466.334432,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +466.334597,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +466.334763,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +466.334929,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +466.335094,0.136094,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +466.335234,0.042719,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +466.335278,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +466.335443,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +466.335609,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +466.335775,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +466.335940,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +466.336106,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +466.336272,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +466.336437,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +466.336603,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +466.336768,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +466.336933,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +466.337099,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +466.337264,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +466.337430,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +466.337595,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +466.337761,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +466.337926,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +466.338091,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +466.338256,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +466.338422,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +466.338588,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +466.338753,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +466.338919,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +466.339084,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +466.339250,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +466.339416,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +466.339581,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +466.339745,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +466.339911,0.059711,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +466.339973,0.062591,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +466.340038,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +466.340205,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +466.340370,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +466.340536,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +466.340702,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +466.340867,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +466.341032,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +466.341197,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +466.341363,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +466.341528,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +466.341692,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +466.341857,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +466.342023,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +466.342191,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +466.342356,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +466.342523,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +466.342689,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +466.342855,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +466.343019,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +466.343185,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +466.343351,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +466.343516,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +466.343683,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +466.343848,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +466.344013,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +466.344178,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +466.344343,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +466.344509,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +466.344675,0.039616,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +466.366122,53.475502,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","145",,,"spmv3",3035 +466.366258,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +466.419597,4.620279,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","144",,,"sum",3039 +466.419714,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +466.419732,4.619991,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","145",,,"sum",3043 +466.424359,9.260012,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","144",,,"divide",3048 +466.424479,6.899058,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","145",,,"divide",3053 +466.433610,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +466.433667,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +466.433715,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +466.433770,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +466.433772,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +466.433820,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +466.433825,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +466.433873,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +466.434040,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +466.434223,54.551357,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","146",,,"spmv3",3071 +466.434313,0.001439,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +466.488774,53.527117,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","147",,,"spmv3",3081 +466.488887,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +466.542301,4.620663,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","146",,,"sum",3085 +466.542405,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +466.542423,4.619031,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","147",,,"sum",3089 +466.547054,9.251309,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","146",,,"divide",3094 +466.547164,6.920562,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","147",,,"divide",3099 +466.556292,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +466.556347,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +466.556385,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +466.556438,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +466.556442,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +466.556489,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +466.556494,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +466.556541,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +466.556697,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +466.556882,54.611836,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","148",,,"spmv3",3117 +466.556969,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +466.611493,53.556013,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","149",,,"spmv3",3127 +466.611621,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +466.665048,4.620022,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","148",,,"sum",3131 +466.665190,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +466.665208,4.617591,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","149",,,"sum",3135 +466.669804,9.286412,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","148",,,"divide",3140 +466.669899,6.897202,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","149",,,"divide",3145 +466.679144,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +466.679201,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +466.679268,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +466.679322,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +466.679334,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +466.679387,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +466.679390,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +466.679444,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +466.679856,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +466.680051,54.598269,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","150",,,"spmv3",3163 +466.680162,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +466.734649,53.558988,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","151",,,"spmv3",3173 +466.734759,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +466.788207,4.620471,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","150",,,"sum",3177 +466.788325,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +466.788342,4.619479,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","151",,,"sum",3181 +466.792969,9.254381,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","150",,,"divide",3186 +466.793098,6.901266,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","151",,,"divide",3191 +466.802204,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +466.802258,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +466.802298,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +466.802351,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +466.802353,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +466.802405,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +466.802405,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +466.802457,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +466.802618,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +466.802802,54.569789,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","152",,,"spmv3",3209 +466.802898,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +466.857372,53.523118,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","153",,,"spmv3",3219 +466.857526,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +466.910894,4.621590,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","152",,,"sum",3223 +466.911016,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +466.911034,4.618935,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","153",,,"sum",3227 +466.915652,9.247501,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","152",,,"divide",3232 +466.915768,6.918098,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","153",,,"divide",3237 +466.924904,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +466.924960,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +466.925010,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +466.925063,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +466.925066,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +466.925117,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +466.925117,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +466.925169,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +466.925185,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +466.925241,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +466.925242,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +466.925255,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +466.925310,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +466.925311,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +474.184994,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +474.185038,0.061695,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +474.185138,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +474.185302,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +474.185466,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +474.185630,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +474.185794,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +474.185959,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +474.186123,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +474.186286,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +474.186451,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +474.186615,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +474.186779,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +474.186942,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +474.187107,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +474.187270,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +474.187434,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +474.187598,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +474.187763,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +474.187926,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +474.188091,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +474.188256,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +474.188420,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +474.188584,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +474.188748,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +474.188913,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +474.189077,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +474.189241,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +474.189406,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +474.189570,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +474.189734,0.039391,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +474.189775,0.142494,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +474.189918,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +474.190083,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +474.190247,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +474.190411,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +474.190575,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +474.190739,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +474.190904,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +474.191069,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +474.191233,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +474.191400,0.165437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +474.191567,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +474.191732,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +474.191896,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +474.192061,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +474.192225,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +474.192390,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +474.192554,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +474.192718,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +474.192883,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +474.193047,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +474.193212,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +474.193378,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +474.193542,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +474.193707,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +474.193871,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +474.194034,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +474.194198,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +474.194363,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +474.194527,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +474.194692,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +474.194856,0.171485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +474.195029,0.204765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +474.195235,0.207261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +474.195443,0.202237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +474.195646,0.203132,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +474.195851,0.207453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +474.196060,0.209629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +474.196271,0.202204,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +474.196474,0.200765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +474.196676,0.193405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +474.196871,0.198685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +474.197071,0.199005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +474.197271,0.208988,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +474.197481,0.204541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +474.197687,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +474.197883,0.208157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +474.198092,0.166237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +474.198259,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +474.198424,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +474.198589,0.178781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +474.198769,0.192829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +474.198963,0.194333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +474.199159,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +474.199349,0.196125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +474.199547,0.196572,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +474.199744,0.207229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +474.199953,0.191933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +474.200146,0.198461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +474.200346,0.215452,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +474.200562,0.196093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +474.200760,0.208477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +474.200969,0.200157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +474.201171,0.200733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +474.201373,0.193084,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +474.201567,0.167038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +474.201735,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +474.201902,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +474.202068,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +474.202233,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +474.202399,0.165118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +474.202566,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +474.202730,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +474.202894,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +474.203059,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +474.203223,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +474.203387,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +474.203551,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +474.203715,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +474.203880,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +474.204045,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +474.204208,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +474.204372,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +474.204537,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +474.204701,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +474.204865,0.156190,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +474.205022,0.021279,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +474.205044,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +474.205209,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +474.205372,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +474.205537,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +474.205701,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +474.205865,0.174653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +474.206041,0.192893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +474.206235,0.191101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +474.206428,0.192957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +474.206622,0.187037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +474.206810,0.190493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +474.207002,0.193917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +474.207197,0.203709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +474.207402,0.196349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +474.207600,0.188125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +474.207789,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +474.207980,0.199004,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +474.208180,0.207325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +474.208389,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +474.208573,0.178365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +474.208753,0.190941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +474.208945,0.190813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +474.209137,0.194941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +474.209333,0.195645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +474.209530,0.197309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +474.209729,0.188989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +474.209919,0.185085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +474.210105,0.193661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +474.210300,0.185085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +474.210486,0.188541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +474.210676,0.196125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +474.210873,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +474.211064,0.183645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +474.211249,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +474.211426,0.174301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +474.211601,0.174077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +474.211777,0.178685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +474.211956,0.175134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +474.212133,0.177981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +474.212312,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +474.212492,0.176221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +474.212669,0.178077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +474.212849,0.175933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +474.213026,0.175902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +474.213203,0.179485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +474.213384,0.173245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +474.213558,0.175869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +474.213735,0.174205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +474.213910,0.173470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +474.214085,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +474.214259,0.174909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +474.214435,0.175741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +474.214612,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +474.214791,0.174526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +474.214967,0.171229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +474.215139,0.173245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +474.215314,0.174493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +474.215489,0.173533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +474.215664,0.173150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +474.215838,0.171901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +474.216011,0.174141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +474.216187,0.173053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +474.216361,0.189565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +474.216552,0.175966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +474.216729,0.173885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +474.216904,0.172445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +474.217077,0.170269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +474.217249,0.174205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +474.217424,0.172606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +474.217598,0.171901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +474.217771,0.176669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +474.217949,0.176573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +474.218127,0.172734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +474.218300,0.175453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +474.218477,0.173725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +474.218652,0.170269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +474.218824,0.168510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +474.218993,0.172669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +474.219167,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +474.219332,0.169277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +474.219502,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +474.219666,0.166877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +474.219835,0.171101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +474.220007,0.171838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +474.220180,0.167805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +474.220349,0.115422,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +474.220465,0.167997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +474.220634,0.168510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +474.220804,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +474.220969,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +474.221136,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +474.221302,0.166045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +474.221469,0.166942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +474.221637,0.165981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +474.221804,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +474.221975,0.175133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +474.222151,0.171294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +474.222323,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +474.222493,0.165501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +474.222660,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +474.222827,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +474.222993,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +474.223158,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +474.223323,0.165085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +474.223489,0.167101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +474.223657,0.177374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +474.223836,0.172381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +474.224010,0.175581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +474.224186,0.174173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +474.224362,0.174301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +474.224537,0.174622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +474.224713,0.166333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +474.224880,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +474.225047,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +474.225214,0.101054,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +474.225316,0.103390,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +474.225420,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +474.225585,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +474.225751,0.167261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +474.225919,0.172766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +474.226093,0.171037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +474.226265,0.171069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +474.226437,0.171805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +474.226611,0.175646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +474.226787,0.170973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +474.226960,0.167645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +474.227128,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +474.227294,0.164669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +474.227460,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +474.227625,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +474.227791,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +474.227955,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +474.228121,0.166206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +474.228288,0.172413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +474.228462,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +474.228632,0.175070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +474.228808,0.189053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +474.228998,0.190172,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +474.229190,0.184126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +474.229375,0.188765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +474.229565,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +474.229751,0.180157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +474.229932,0.183005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +474.230117,0.187453,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +474.230540,64.654591,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","154",,,"spmv3",3257 +474.230829,0.002144,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +474.230930,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +474.231095,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +474.231260,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +474.231425,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +474.231590,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +474.231755,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +474.231921,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +474.232087,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +474.232252,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +474.232418,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +474.232584,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +474.232749,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +474.232914,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +474.233080,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +474.233244,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +474.233410,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +474.233575,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +474.233740,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +474.233906,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +474.234072,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +474.234238,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +474.234403,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +474.234568,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +474.234734,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +474.234900,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +474.235065,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +474.235231,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +474.235398,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +474.235563,0.100415,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +474.235666,0.123614,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +474.235791,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +474.235957,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +474.236122,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +474.236287,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +474.236453,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +474.236619,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +474.236785,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +474.236952,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +474.237119,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +474.237286,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +474.237451,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +474.237618,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +474.237784,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +474.237951,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +474.238116,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +474.238283,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +474.238449,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +474.238614,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +474.238780,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +474.238946,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +474.239111,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +474.239276,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +474.239442,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +474.239609,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +474.239774,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +474.239940,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +474.240106,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +474.240273,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +474.240438,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +474.240604,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +474.240769,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +474.240935,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +474.241100,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +474.241265,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +474.241430,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +474.241594,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +474.241760,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +474.241924,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +474.242090,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +474.242255,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +474.242422,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +474.242587,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +474.242753,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +474.242918,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +474.243084,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +474.243250,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +474.243416,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +474.243582,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +474.243747,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +474.243913,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +474.244077,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +474.244243,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +474.244409,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +474.244575,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +474.244741,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +474.244906,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +474.245071,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +474.245237,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +474.245403,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +474.245569,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +474.245734,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +474.245899,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +474.246063,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +474.246229,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +474.246394,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +474.246559,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +474.246724,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +474.246892,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +474.247058,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +474.247224,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +474.247391,0.165694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +474.247559,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +474.247725,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +474.247891,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +474.248057,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +474.248223,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +474.248390,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +474.248556,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +474.248722,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +474.248888,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +474.249054,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +474.249221,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +474.249387,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +474.249555,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +474.249720,0.165662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +474.249888,0.014399,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +474.249905,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +474.250071,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +474.250237,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +474.250403,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +474.250569,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +474.250735,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +474.250900,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +474.251066,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +474.251231,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +474.251396,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +474.251562,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +474.251726,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +474.251892,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +474.252059,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +474.252225,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +474.252390,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +474.252555,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +474.252720,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +474.252886,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +474.253054,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +474.253221,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +474.253386,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +474.253551,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +474.253716,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +474.253883,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +474.254047,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +474.254215,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +474.254380,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +474.254545,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +474.254711,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +474.254876,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +474.255043,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +474.255208,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +474.255373,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +474.255539,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +474.255705,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +474.255869,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +474.256035,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +474.256201,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +474.256366,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +474.256532,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +474.256698,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +474.256864,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +474.257030,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +474.257195,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +474.257360,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +474.257525,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +474.257690,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +474.257856,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +474.258021,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +474.258187,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +474.258352,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +474.258518,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +474.258683,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +474.258850,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +474.259017,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +474.259183,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +474.259349,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +474.259515,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +474.259681,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +474.259846,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +474.260012,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +474.260178,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +474.260344,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +474.260510,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +474.260675,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +474.260841,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +474.261006,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +474.261173,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +474.261338,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +474.261504,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +474.261669,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +474.261833,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +474.261999,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +474.262165,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +474.262330,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +474.262496,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +474.262661,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +474.262827,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +474.262992,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +474.263158,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +474.263323,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +474.263489,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +474.263655,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +474.263820,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +474.263985,0.136573,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +474.264124,0.042176,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +474.264169,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +474.264334,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +474.264501,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +474.264666,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +474.264832,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +474.264998,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +474.265163,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +474.265328,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +474.265494,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +474.265660,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +474.265825,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +474.265990,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +474.266156,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +474.266322,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +474.266487,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +474.266653,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +474.266819,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +474.266985,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +474.267150,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +474.267316,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +474.267482,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +474.267647,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +474.267812,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +474.267978,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +474.268144,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +474.268308,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +474.268474,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +474.268639,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +474.268805,0.059711,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +474.268867,0.062367,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +474.268931,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +474.269096,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +474.269261,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +474.269426,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +474.269591,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +474.269757,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +474.269923,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +474.270088,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +474.270254,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +474.270420,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +474.270586,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +474.270751,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +474.270917,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +474.271082,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +474.271248,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +474.271414,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +474.271580,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +474.271745,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +474.271912,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +474.272078,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +474.272244,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +474.272409,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +474.272575,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +474.272740,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +474.272906,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +474.273072,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +474.273239,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +474.273404,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +474.273570,0.039392,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +474.295194,53.514382,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","155",,,"spmv3",3267 +474.295310,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +474.348708,4.620822,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","154",,,"sum",3271 +474.348786,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +474.348804,4.619255,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","155",,,"sum",3275 +474.353475,9.246605,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","154",,,"divide",3280 +474.353550,6.893938,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","155",,,"divide",3285 +474.362728,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +474.362788,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +474.362948,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +474.363007,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +474.363008,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +474.363057,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +474.363064,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +474.363113,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +474.363314,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +474.363517,54.526942,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","156",,,"spmv3",3303 +474.363660,0.001471,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +474.418043,53.535919,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","157",,,"spmv3",3313 +474.418154,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +474.471579,4.620119,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","156",,,"sum",3317 +474.471666,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +474.471685,4.617591,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","157",,,"sum",3321 +474.476347,9.238958,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","156",,,"divide",3326 +474.476438,6.901490,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","157",,,"divide",3331 +474.485582,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +474.485642,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +474.485714,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +474.485771,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +474.485776,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +474.485837,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +474.485843,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +474.485893,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +474.486101,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +474.486294,54.604029,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","158",,,"spmv3",3349 +474.486387,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +474.540898,53.514031,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","159",,,"spmv3",3359 +474.540991,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +474.594411,4.618935,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","158",,,"sum",3363 +474.594549,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +474.594569,4.618294,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","159",,,"sum",3367 +474.599141,9.284333,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","158",,,"divide",3372 +474.599300,6.897202,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","159",,,"divide",3377 +474.608441,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +474.608501,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +474.608559,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +474.608615,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +474.608617,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +474.608662,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +474.608671,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +474.608718,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +474.608971,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +474.609156,54.547391,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","160",,,"spmv3",3395 +474.609303,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +474.663703,53.510479,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","161",,,"spmv3",3405 +474.663846,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +474.717213,4.620694,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","160",,,"sum",3409 +474.717347,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +474.717367,4.619095,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","161",,,"sum",3413 +474.721975,9.290317,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","160",,,"divide",3418 +474.722086,6.900435,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","161",,,"divide",3423 +474.731283,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +474.731343,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +474.731395,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +474.731450,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +474.731452,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +474.731498,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +474.731506,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +474.731554,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +474.731812,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +474.732000,54.549599,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","162",,,"spmv3",3441 +474.732113,0.001920,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +474.786549,53.487023,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","163",,,"spmv3",3451 +474.786669,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +474.840036,4.620535,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","162",,,"sum",3455 +474.840150,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +474.840169,4.617847,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","163",,,"sum",3459 +474.844793,9.257837,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","162",,,"divide",3464 +474.844910,6.911666,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","163",,,"divide",3469 +474.854024,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +474.854082,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +474.854112,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +474.854169,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +474.854169,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +474.854219,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +474.854224,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +474.854275,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +474.854284,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +474.854344,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +474.854345,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +474.854350,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +474.854409,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +474.854411,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +482.114692,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +482.114738,0.061599,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +482.114841,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +482.115005,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +482.115168,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +482.115332,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +482.115497,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +482.115661,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +482.115825,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +482.115989,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +482.116153,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +482.116317,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +482.116481,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +482.116645,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +482.116809,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +482.116972,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +482.117137,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +482.117300,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +482.117464,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +482.117628,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +482.117793,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +482.117957,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +482.118121,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +482.118285,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +482.118449,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +482.118614,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +482.118779,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +482.118944,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +482.119108,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +482.119272,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +482.119436,0.039775,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +482.119477,0.143102,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +482.119621,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +482.119786,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +482.119950,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +482.120115,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +482.120279,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +482.120443,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +482.120608,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +482.120772,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +482.120936,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +482.121101,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +482.121265,0.165597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +482.121431,0.165502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +482.121598,0.167325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +482.121767,0.165501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +482.121934,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +482.122098,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +482.122262,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +482.122426,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +482.122592,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +482.122756,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +482.122920,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +482.123085,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +482.123248,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +482.123413,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +482.123578,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +482.123744,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +482.123907,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +482.124071,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +482.124236,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +482.124399,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +482.124563,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +482.124728,0.168541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +482.124898,0.204349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +482.125104,0.209533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +482.125315,0.209692,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +482.125525,0.213501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +482.125740,0.212989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +482.125954,0.219740,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +482.126175,0.211645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +482.126388,0.209564,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +482.126599,0.212829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +482.126813,0.215837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +482.127030,0.208860,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +482.127240,0.217405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +482.127459,0.219676,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +482.127680,0.199357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +482.127880,0.201821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +482.128083,0.167165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +482.128252,0.165310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +482.128418,0.190332,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +482.128610,0.207165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +482.128818,0.197277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +482.129017,0.201277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +482.129219,0.202749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +482.129423,0.206140,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +482.129630,0.208989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +482.129841,0.196701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +482.130038,0.202333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +482.130242,0.203324,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +482.130446,0.202909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +482.130651,0.212061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +482.130864,0.211548,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +482.131077,0.213341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +482.131291,0.170877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +482.131464,0.165566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +482.131630,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +482.131797,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +482.131963,0.164766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +482.132129,0.165245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +482.132295,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +482.132460,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +482.132624,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +482.132788,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +482.132952,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +482.133116,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +482.133280,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +482.133444,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +482.133608,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +482.133772,0.172605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +482.133946,0.198461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +482.134146,0.198556,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +482.134346,0.202461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +482.134549,0.197149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +482.134748,0.201341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +482.134950,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +482.135140,0.026271,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +482.135168,0.199741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +482.135369,0.193533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +482.135563,0.193597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +482.135758,0.200093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +482.135960,0.194685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +482.136155,0.171357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +482.136328,0.170813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +482.136500,0.191229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +482.136693,0.192349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +482.136886,0.192541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +482.137080,0.197213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +482.137278,0.196829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +482.137477,0.190141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +482.137668,0.210364,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +482.137880,0.193149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +482.138074,0.193245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +482.138269,0.199421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +482.138469,0.199773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +482.138670,0.191389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +482.138863,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +482.139047,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +482.139233,0.182269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +482.139417,0.187677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +482.139606,0.190013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +482.139797,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +482.139986,0.189501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +482.140176,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +482.140359,0.181661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +482.140542,0.186365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +482.140729,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +482.140909,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +482.141091,0.185086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +482.141277,0.183902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +482.141462,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +482.141651,0.187133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +482.141839,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +482.142026,0.178557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +482.142206,0.183229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +482.142390,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +482.142574,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +482.142758,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +482.142942,0.181597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +482.143125,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +482.143309,0.186909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +482.143497,0.182013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +482.143680,0.181885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +482.143863,0.180222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +482.144045,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +482.144227,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +482.144410,0.179101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +482.144590,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +482.144776,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +482.144959,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +482.145144,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +482.145330,0.175101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +482.145506,0.173406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +482.145681,0.174653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +482.145857,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +482.146032,0.167709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +482.146201,0.172542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +482.146374,0.180093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +482.146556,0.176989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +482.146734,0.167005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +482.146902,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +482.147079,0.181150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +482.147261,0.167869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +482.147431,0.169341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +482.147601,0.170877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +482.147773,0.170526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +482.147945,0.170493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +482.148117,0.174781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +482.148293,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +482.148478,0.175677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +482.148654,0.170398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +482.148826,0.172797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +482.149000,0.169757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +482.149171,0.166494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +482.149339,0.167485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +482.149507,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +482.149681,0.180541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +482.149862,0.178077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +482.150042,0.183262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +482.150226,0.179645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +482.150407,0.184797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +482.150593,0.174941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +482.150769,0.121726,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +482.150892,0.169981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +482.151063,0.166974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +482.151231,0.166589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +482.151399,0.169853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +482.151570,0.177565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +482.151749,0.177822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +482.151928,0.175870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +482.152105,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +482.152286,0.178845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +482.152466,0.176925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +482.152644,0.169373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +482.152815,0.171390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +482.152987,0.169181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +482.153158,0.167581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +482.153327,0.170558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +482.153498,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +482.153680,0.178205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +482.153860,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +482.154049,0.195773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +482.154246,0.195549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +482.154443,0.183325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +482.154627,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +482.154816,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +482.155002,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +482.155184,0.188733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +482.155374,0.192765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +482.155568,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +482.155756,0.183005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +482.155940,0.100414,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +482.156042,0.102399,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +482.156145,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +482.156309,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +482.156473,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +482.156638,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +482.156802,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +482.156966,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +482.157130,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +482.157294,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +482.157458,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +482.157623,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +482.157787,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +482.157951,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +482.158116,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +482.158280,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +482.158444,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +482.158609,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +482.158773,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +482.158938,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +482.159102,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +482.159266,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +482.159431,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +482.159595,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +482.159759,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +482.159923,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +482.160087,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +482.160252,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +482.160416,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +482.160580,0.161118,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +482.160932,64.553666,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","164",,,"spmv3",3489 +482.161199,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +482.161303,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +482.161468,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +482.161633,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +482.161799,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +482.161964,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +482.162131,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +482.162295,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +482.162462,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +482.162627,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +482.162793,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +482.162958,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +482.163124,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +482.163288,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +482.163452,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +482.163617,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +482.163783,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +482.163948,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +482.164113,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +482.164278,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +482.164444,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +482.164609,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +482.164776,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +482.164941,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +482.165107,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +482.165272,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +482.165438,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +482.165603,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +482.165768,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +482.165935,0.100415,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +482.166037,0.122494,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +482.166161,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +482.166327,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +482.166493,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +482.166658,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +482.166824,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +482.166990,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +482.167156,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +482.167322,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +482.167489,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +482.167654,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +482.167821,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +482.167987,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +482.168153,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +482.168318,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +482.168484,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +482.168649,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +482.168815,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +482.168980,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +482.169145,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +482.169309,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +482.169475,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +482.169640,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +482.169806,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +482.169972,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +482.170137,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +482.170304,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +482.170470,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +482.170635,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +482.170801,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +482.170967,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +482.171132,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +482.171298,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +482.171463,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +482.171628,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +482.171793,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +482.171958,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +482.172124,0.166813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +482.172292,0.168606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +482.172463,0.169437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +482.172635,0.168413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +482.172807,0.167582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +482.172977,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +482.173145,0.166589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +482.173315,0.166174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +482.173482,0.167837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +482.173653,0.168253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +482.173823,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +482.173992,0.169694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +482.174164,0.167741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +482.174334,0.166045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +482.174501,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +482.174668,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +482.174835,0.164893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +482.175002,0.166654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +482.175171,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +482.175339,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +482.175506,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +482.175672,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +482.175839,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +482.176004,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +482.176170,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +482.176335,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +482.176499,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +482.176665,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +482.176830,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +482.176996,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +482.177161,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +482.177328,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +482.177493,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +482.177659,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +482.177824,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +482.177989,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +482.178155,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +482.178320,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +482.178486,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +482.178652,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +482.178817,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +482.178983,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +482.179147,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +482.179312,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +482.179476,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +482.179641,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +482.179808,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +482.179973,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +482.180139,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +482.180305,0.014560,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +482.180322,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +482.180487,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +482.180652,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +482.180818,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +482.180983,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +482.181149,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +482.181315,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +482.181480,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +482.181646,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +482.181811,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +482.181976,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +482.182142,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +482.182308,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +482.182473,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +482.182640,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +482.182805,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +482.182971,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +482.183138,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +482.183303,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +482.183469,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +482.183634,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +482.183800,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +482.183965,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +482.184131,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +482.184297,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +482.184463,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +482.184628,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +482.184793,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +482.184958,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +482.185124,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +482.185290,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +482.185456,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +482.185621,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +482.185787,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +482.185952,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +482.186119,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +482.186284,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +482.186450,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +482.186618,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +482.186784,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +482.186950,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +482.187115,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +482.187280,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +482.187445,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +482.187612,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +482.187777,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +482.187944,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +482.188109,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +482.188276,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +482.188441,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +482.188607,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +482.188773,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +482.188939,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +482.189105,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +482.189270,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +482.189435,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +482.189602,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +482.189766,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +482.189932,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +482.190098,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +482.190265,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +482.190430,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +482.190595,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +482.190762,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +482.190928,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +482.191093,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +482.191258,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +482.191425,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +482.191590,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +482.191757,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +482.191923,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +482.192088,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +482.192254,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +482.192420,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +482.192585,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +482.192750,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +482.192915,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +482.193081,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +482.193247,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +482.193414,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +482.193580,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +482.193745,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +482.193910,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +482.194076,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +482.194242,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +482.194408,0.135709,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +482.194545,0.041472,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +482.194588,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +482.194755,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +482.194920,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +482.195085,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +482.195251,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +482.195417,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +482.195582,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +482.195748,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +482.195914,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +482.196079,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +482.196244,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +482.196409,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +482.196575,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +482.196740,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +482.196905,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +482.197070,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +482.197237,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +482.197403,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +482.197567,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +482.197733,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +482.197899,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +482.198064,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +482.198230,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +482.198396,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +482.198562,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +482.198729,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +482.198894,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +482.199061,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +482.199226,0.059967,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +482.199289,0.062463,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +482.199353,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +482.199519,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +482.199685,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +482.199850,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +482.200015,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +482.200182,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +482.200347,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +482.200512,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +482.200678,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +482.200842,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +482.201007,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +482.201174,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +482.201341,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +482.201507,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +482.201673,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +482.201838,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +482.202004,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +482.202170,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +482.202337,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +482.202503,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +482.202668,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +482.202833,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +482.202999,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +482.203164,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +482.203330,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +482.203495,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +482.203661,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +482.203826,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +482.203991,0.039840,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +482.225485,53.478705,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","165",,,"spmv3",3499 +482.225591,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +482.278963,4.621719,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","164",,,"sum",3503 +482.279024,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +482.279043,4.621015,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","165",,,"sum",3507 +482.283698,9.249165,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","164",,,"divide",3512 +482.283764,6.896755,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","165",,,"divide",3517 +482.292925,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +482.292990,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +482.293027,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +482.293086,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +482.293088,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +482.293139,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +482.293146,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +482.293199,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +482.293472,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +482.293633,54.549920,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","166",,,"spmv3",3535 +482.293716,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +482.348182,53.355955,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","167",,,"spmv3",3545 +482.348274,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +482.401538,4.620150,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","166",,,"sum",3549 +482.401630,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +482.401650,4.619447,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","167",,,"sum",3553 +482.406266,9.263341,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","166",,,"divide",3558 +482.406327,6.920882,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","167",,,"divide",3563 +482.415515,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +482.415580,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +482.415610,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +482.415667,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +482.415671,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +482.415714,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +482.415726,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +482.415774,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +482.415926,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +482.416111,54.569439,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","168",,,"spmv3",3581 +482.416192,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +482.470680,53.471601,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","169",,,"spmv3",3591 +482.470787,0.001856,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +482.524151,4.619095,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","168",,,"sum",3595 +482.524279,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +482.524298,4.618967,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","169",,,"sum",3599 +482.528890,9.299373,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","168",,,"divide",3604 +482.528987,6.906258,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","169",,,"divide",3609 +482.538199,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +482.538262,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +482.538308,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +482.538367,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +482.538369,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +482.538413,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +482.538427,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +482.538472,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +482.538661,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +482.538823,54.625919,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","170",,,"spmv3",3627 +482.538915,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +482.593449,53.534288,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","171",,,"spmv3",3637 +482.593539,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +482.646982,4.619255,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","170",,,"sum",3641 +482.647070,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +482.647090,4.618519,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","171",,,"sum",3645 +482.651715,9.252333,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","170",,,"divide",3650 +482.651805,6.911954,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","171",,,"divide",3655 +482.660942,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +482.661003,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +482.661029,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +482.661086,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +482.661090,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +482.661135,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +482.661146,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +482.661195,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +482.661329,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +482.661515,54.577823,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","172",,,"spmv3",3673 +482.661597,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +482.716092,53.571536,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","173",,,"spmv3",3683 +482.716206,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +482.769663,4.620407,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","172",,,"sum",3687 +482.769779,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +482.769799,4.619510,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","173",,,"sum",3691 +482.774395,9.300556,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","172",,,"divide",3696 +482.774491,6.898227,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","173",,,"divide",3701 +482.783704,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +482.783767,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +482.783836,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +482.783893,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +482.783897,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +482.783944,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +482.783953,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +482.784004,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +482.784014,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +482.784077,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +482.784078,0.005344,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +482.784080,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +482.784143,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +482.784145,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +490.001552,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +490.001682,0.061823,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +490.001971,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +490.002257,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +490.002545,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +490.002840,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +490.003130,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +490.003417,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +490.003712,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +490.004000,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +490.004288,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +490.004575,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +490.004870,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +490.005158,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +490.005446,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +490.005738,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +490.006026,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +490.006314,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +490.006605,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +490.006889,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +490.007172,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +490.007455,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +490.007744,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +490.008029,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +490.008313,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +490.008603,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +490.008887,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +490.009174,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +490.009457,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +490.009750,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +490.009915,0.039519,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +490.010081,0.142718,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +490.010379,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +490.010659,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +490.010876,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +490.011092,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +490.011308,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +490.011525,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +490.011745,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +490.011961,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +490.012180,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +490.012398,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +490.012617,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +490.012831,0.166429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +490.013046,0.179069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +490.013264,0.187293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +490.013481,0.180093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +490.013700,0.180381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +490.013919,0.191549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +490.014136,0.182589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +490.014353,0.177630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +490.014568,0.208413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +490.014777,0.209596,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +490.014988,0.213277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +490.015203,0.205341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +490.015409,0.203644,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +490.015614,0.202269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +490.015817,0.197789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +490.016016,0.208413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +490.016226,0.173693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +490.016401,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +490.016568,0.171646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +490.016741,0.203676,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +490.016946,0.202077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +490.017149,0.202621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +490.017353,0.209149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +490.017564,0.197916,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +490.017763,0.207229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +490.017971,0.202941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +490.018175,0.208221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +490.018385,0.208892,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +490.018595,0.203453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +490.018800,0.209437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +490.019010,0.207580,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +490.019219,0.211581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +490.019432,0.187101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +490.019620,0.169821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +490.019791,0.167102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +490.019959,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +490.020125,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +490.020290,0.165438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +490.020456,0.171613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +490.020629,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +490.020793,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +490.020957,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +490.021122,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +490.021288,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +490.021453,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +490.021616,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +490.021780,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +490.021944,0.184541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +490.022131,0.199421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +490.022331,0.200125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +490.022532,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +490.022732,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +490.022925,0.198972,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +490.023125,0.193917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +490.023320,0.202205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +490.023532,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +490.023723,0.195101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +490.023919,0.198909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +490.024119,0.210492,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +490.024331,0.171038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +490.024503,0.199004,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +490.024703,0.191549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +490.024896,0.193085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +490.025090,0.197533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +490.025289,0.193981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +490.025485,0.187869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +490.025674,0.192477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +490.025868,0.200189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +490.026069,0.191869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +490.026262,0.191901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +490.026455,0.201117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +490.026658,0.193980,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +490.026853,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +490.027041,0.171358,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +490.027214,0.025855,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +490.027241,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +490.027425,0.190333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +490.027616,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +490.027807,0.183997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +490.027992,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +490.028179,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +490.028370,0.187293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +490.028558,0.187741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +490.028747,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +490.028933,0.183582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +490.029117,0.187741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +490.029306,0.187901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +490.029495,0.191709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +490.029688,0.184158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +490.029874,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +490.030064,0.188541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +490.030253,0.184029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +490.030438,0.184541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +490.030624,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +490.030810,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +490.030996,0.188285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +490.031186,0.185181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +490.031372,0.182333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +490.031556,0.182141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +490.031740,0.185277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +490.031926,0.185821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +490.032113,0.184509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +490.032299,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +490.032485,0.189021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +490.032675,0.187005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +490.032863,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +490.033046,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +490.033230,0.183006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +490.033414,0.194877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +490.033610,0.186685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +490.033798,0.187293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +490.033986,0.179326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +490.034167,0.177373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +490.034345,0.183965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +490.034530,0.170941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +490.034702,0.175101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +490.034879,0.169950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +490.035050,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +490.035230,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +490.035414,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +490.035596,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +490.035762,0.175358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +490.035939,0.173566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +490.036113,0.168669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +490.036283,0.166749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +490.036451,0.169534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +490.036622,0.168573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +490.036792,0.171069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +490.036964,0.179005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +490.037144,0.183869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +490.037329,0.173374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +490.037504,0.168573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +490.037674,0.171901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +490.037847,0.168478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +490.038016,0.166781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +490.038184,0.170397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +490.038356,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +490.038535,0.187773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +490.038724,0.177854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +490.038903,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +490.039084,0.178621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +490.039264,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +490.039443,0.170685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +490.039615,0.171614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +490.039788,0.167453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +490.039956,0.167005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +490.040125,0.168510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +490.040294,0.175165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +490.040471,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +490.040654,0.175325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +490.040831,0.179357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +490.041011,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +490.041193,0.176541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +490.041371,0.169758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +490.041542,0.171581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +490.041715,0.169309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +490.041885,0.167998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +490.042054,0.169789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +490.042225,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +490.042406,0.175453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +490.042583,0.128190,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +490.042712,0.192957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +490.042907,0.190973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +490.043099,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +490.043288,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +490.043474,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +490.043666,0.182333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +490.043849,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +490.044037,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +490.044228,0.191517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +490.044421,0.185117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +490.044607,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +490.044771,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +490.044935,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +490.045100,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +490.045264,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +490.045428,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +490.045592,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +490.045756,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +490.045920,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +490.046084,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +490.046249,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +490.046413,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +490.046577,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +490.046741,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +490.046905,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +490.047070,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +490.047234,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +490.047398,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +490.047562,0.099999,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +490.047663,0.102462,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +490.047767,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +490.047931,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +490.048095,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +490.048259,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +490.048423,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +490.048587,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +490.048751,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +490.048916,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +490.049080,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +490.049244,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +490.049408,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +490.049573,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +490.049737,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +490.049902,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +490.050066,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +490.050230,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +490.050394,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +490.050558,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +490.050723,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +490.050887,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +490.051051,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +490.051216,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +490.051380,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +490.051544,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +490.051709,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +490.051873,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +490.052037,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +490.052202,0.160733,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +490.052832,64.547684,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","174",,,"spmv3",3721 +490.053057,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +490.053160,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +490.053327,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +490.053491,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +490.053656,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +490.053821,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +490.053988,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +490.054152,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +490.054317,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +490.054482,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +490.054648,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +490.054813,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +490.054979,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +490.055144,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +490.055310,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +490.055477,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +490.055642,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +490.055807,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +490.055972,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +490.056138,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +490.056303,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +490.056468,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +490.056634,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +490.056801,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +490.056966,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +490.057132,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +490.057297,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +490.057462,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +490.057627,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +490.057793,0.100127,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +490.057895,0.122814,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +490.058020,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +490.058186,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +490.058352,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +490.058517,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +490.058682,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +490.058847,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +490.059013,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +490.059180,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +490.059345,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +490.059511,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +490.059676,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +490.059842,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +490.060008,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +490.060174,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +490.060339,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +490.060505,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +490.060671,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +490.060838,0.166813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +490.061007,0.169470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +490.061179,0.169437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +490.061351,0.168189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +490.061521,0.166206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +490.061689,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +490.061856,0.170653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +490.062028,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +490.062197,0.168253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +490.062367,0.167357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +490.062537,0.166814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +490.062707,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +490.062875,0.166589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +490.063044,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +490.063211,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +490.063378,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +490.063545,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +490.063713,0.165821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +490.063881,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +490.064047,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +490.064212,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +490.064377,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +490.064544,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +490.064710,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +490.064874,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +490.065040,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +490.065205,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +490.065371,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +490.065537,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +490.065702,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +490.065867,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +490.066032,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +490.066198,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +490.066363,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +490.066530,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +490.066695,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +490.066859,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +490.067025,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +490.067191,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +490.067357,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +490.067523,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +490.067689,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +490.067854,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +490.068020,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +490.068185,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +490.068352,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +490.068518,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +490.068684,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +490.068850,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +490.069016,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +490.069182,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +490.069347,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +490.069512,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +490.069677,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +490.069843,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +490.070009,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +490.070174,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +490.070340,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +490.070506,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +490.070671,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +490.070836,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +490.071001,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +490.071166,0.165661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +490.071333,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +490.071499,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +490.071665,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +490.071829,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +490.071995,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +490.072161,0.014944,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +490.072178,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +490.072344,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +490.072509,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +490.072676,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +490.072841,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +490.073007,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +490.073172,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +490.073337,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +490.073503,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +490.073669,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +490.073835,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +490.074001,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +490.074166,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +490.074333,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +490.074498,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +490.074663,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +490.074828,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +490.074993,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +490.075159,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +490.075325,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +490.075491,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +490.075656,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +490.075820,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +490.075987,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +490.076152,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +490.076318,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +490.076483,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +490.076648,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +490.076814,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +490.076979,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +490.077145,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +490.077311,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +490.077476,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +490.077642,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +490.077807,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +490.077972,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +490.078138,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +490.078303,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +490.078470,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +490.078636,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +490.078800,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +490.078965,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +490.079130,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +490.079296,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +490.079462,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +490.079627,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +490.079793,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +490.079958,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +490.080125,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +490.080290,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +490.080456,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +490.080621,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +490.080788,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +490.080954,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +490.081120,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +490.081286,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +490.081451,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +490.081617,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +490.081782,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +490.081949,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +490.082116,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +490.082281,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +490.082446,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +490.082613,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +490.082779,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +490.082945,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +490.083111,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +490.083277,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +490.083443,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +490.083609,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +490.083775,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +490.083940,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +490.084105,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +490.084270,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +490.084434,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +490.084600,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +490.084765,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +490.084931,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +490.085096,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +490.085262,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +490.085429,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +490.085594,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +490.085760,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +490.085926,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +490.086092,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +490.086258,0.137054,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +490.086398,0.042464,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +490.086443,0.165085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +490.086610,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +490.086776,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +490.086940,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +490.087106,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +490.087273,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +490.087438,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +490.087604,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +490.087770,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +490.087937,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +490.088103,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +490.088269,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +490.088435,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +490.088600,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +490.088765,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +490.088931,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +490.089097,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +490.089263,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +490.089429,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +490.089594,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +490.089760,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +490.089926,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +490.090091,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +490.090256,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +490.090421,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +490.090585,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +490.090752,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +490.090918,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +490.091083,0.059839,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +490.091146,0.062143,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +490.091211,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +490.091376,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +490.091541,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +490.091706,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +490.091872,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +490.092038,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +490.092205,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +490.092371,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +490.092536,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +490.092702,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +490.092867,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +490.093034,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +490.093200,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +490.093366,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +490.093532,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +490.093697,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +490.093862,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +490.094028,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +490.094193,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +490.094358,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +490.094523,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +490.094688,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +490.094852,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +490.095018,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +490.095183,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +490.095349,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +490.095514,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +490.095680,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +490.095845,0.039519,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +490.117379,53.331348,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","175",,,"spmv3",3731 +490.117487,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +490.170710,4.619927,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","174",,,"sum",3735 +490.170796,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +490.170817,4.619575,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","175",,,"sum",3739 +490.175437,9.253357,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","174",,,"divide",3744 +490.175511,6.898099,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","175",,,"divide",3749 +490.184662,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +490.184731,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +490.184763,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +490.184820,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +490.184829,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +490.184871,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +490.184884,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +490.184934,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +490.185079,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +490.185269,54.511298,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","176",,,"spmv3",3767 +490.185347,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +490.239780,53.470995,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","177",,,"spmv3",3777 +490.239849,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +490.293250,4.619447,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","176",,,"sum",3781 +490.293339,0.001439,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +490.293358,4.618999,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","177",,,"sum",3785 +490.297984,9.246382,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","176",,,"divide",3790 +490.298058,6.907283,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","177",,,"divide",3795 +490.307213,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +490.307280,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +490.307312,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +490.307360,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +490.307377,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +490.307413,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +490.307424,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +490.307476,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +490.307679,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +490.307867,54.556705,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","178",,,"spmv3",3813 +490.307953,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +490.362423,53.575025,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","179",,,"spmv3",3823 +490.362516,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +490.415997,4.619607,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","178",,,"sum",3827 +490.416713,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +490.416732,4.662263,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","179",,,"sum",3831 +490.420729,9.312781,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","178",,,"divide",3836 +490.421501,6.911731,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","179",,,"divide",3841 +490.430033,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +490.430100,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +490.430138,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +490.430193,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +490.430203,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +490.430245,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +490.430257,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +490.430309,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +490.430493,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +490.430704,54.550786,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","180",,,"spmv3",3859 +490.430789,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +490.485254,53.591825,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","181",,,"spmv3",3869 +490.485344,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +490.538845,4.619351,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","180",,,"sum",3873 +490.538973,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +490.538993,4.619095,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","181",,,"sum",3877 +490.543575,9.276397,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","180",,,"divide",3882 +490.543729,6.918515,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","181",,,"divide",3887 +490.552845,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +490.552912,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +490.552951,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +490.553006,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +490.553016,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +490.553058,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +490.553069,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +490.553121,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +490.553438,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +490.553654,54.583361,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","182",,,"spmv3",3905 +490.553743,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +490.608237,53.544114,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","183",,,"spmv3",3915 +490.608343,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +490.661780,4.620151,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","182",,,"sum",3919 +490.661869,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +490.661888,4.617719,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","183",,,"sum",3923 +490.666512,9.245998,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","182",,,"divide",3928 +490.666542,6.910003,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","183",,,"divide",3933 +490.675752,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +490.675819,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +490.675857,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +490.675916,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +490.675922,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +490.675966,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +490.675979,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +490.676029,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +490.676035,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +490.676101,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +490.676102,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +490.676103,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +490.676168,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +490.676169,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +497.860055,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +497.860099,0.061727,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +497.860202,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +497.860365,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +497.860529,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +497.860693,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +497.860857,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +497.861021,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +497.861185,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +497.861348,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +497.861512,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +497.861676,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +497.861840,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +497.862004,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +497.862168,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +497.862332,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +497.862496,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +497.862660,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +497.862824,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +497.862988,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +497.863152,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +497.863316,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +497.863480,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +497.863644,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +497.863808,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +497.863975,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +497.864139,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +497.864303,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +497.864468,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +497.864632,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +497.864796,0.039583,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +497.864837,0.142462,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +497.864981,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +497.865145,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +497.865309,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +497.865474,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +497.865638,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +497.865802,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +497.865966,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +497.866131,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +497.866295,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +497.866459,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +497.866624,0.165885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +497.866791,0.165662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +497.866958,0.170013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +497.867129,0.166301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +497.867297,0.166366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +497.867464,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +497.867629,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +497.867795,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +497.867961,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +497.868127,0.165534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +497.868294,0.165565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +497.868460,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +497.868627,0.165246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +497.868793,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +497.868958,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +497.869123,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +497.869288,0.164925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +497.869454,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +497.869620,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +497.869788,0.205469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +497.869995,0.208796,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +497.870205,0.214877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +497.870421,0.205213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +497.870627,0.211324,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +497.870840,0.216189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +497.871057,0.213405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +497.871272,0.210652,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +497.871484,0.211293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +497.871696,0.213660,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +497.871911,0.212573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +497.872125,0.217885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +497.872344,0.214716,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +497.872560,0.198717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +497.872760,0.208445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +497.872970,0.167837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +497.873139,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +497.873306,0.183901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +497.873491,0.200477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +497.873692,0.200253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +497.873894,0.206365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +497.874102,0.210204,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +497.874313,0.212285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +497.874527,0.208093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +497.874736,0.199997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +497.874937,0.213084,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +497.875151,0.208893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +497.875361,0.207997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +497.875571,0.200124,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +497.875772,0.211293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +497.875985,0.214525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +497.876200,0.172861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +497.876374,0.167037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +497.876542,0.164766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +497.876708,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +497.876872,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +497.877038,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +497.877204,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +497.877369,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +497.877532,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +497.877697,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +497.877861,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +497.878027,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +497.878191,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +497.878355,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +497.878519,0.173373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +497.878693,0.201821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +497.878896,0.193565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +497.879091,0.198941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +497.879292,0.198269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +497.879491,0.199836,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +497.879692,0.192253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +497.879886,0.202461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +497.880090,0.190749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +497.880282,0.192541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +497.880476,0.192509,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +497.880670,0.024832,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +497.880696,0.198685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +497.880896,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +497.881060,0.194493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +497.881256,0.198908,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +497.881456,0.195101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +497.881653,0.195005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +497.881849,0.198205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +497.882048,0.207709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +497.882257,0.205565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +497.882464,0.198396,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +497.882663,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +497.882857,0.195293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +497.883054,0.201725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +497.883257,0.195421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +497.883453,0.186301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +497.883641,0.181757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +497.883824,0.187037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +497.884012,0.189885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +497.884203,0.187805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +497.884392,0.185021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +497.884578,0.187101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +497.884767,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +497.884956,0.189725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +497.885147,0.189277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +497.885338,0.185469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +497.885524,0.180733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +497.885707,0.185181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +497.885893,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +497.886082,0.188349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +497.886271,0.191389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +497.886464,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +497.886653,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +497.886836,0.182366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +497.887020,0.181405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +497.887203,0.186557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +497.887391,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +497.887575,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +497.887757,0.177661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +497.887936,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +497.888122,0.183037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +497.888306,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +497.888489,0.176317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +497.888667,0.181182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +497.888849,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +497.889031,0.183709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +497.889216,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +497.889398,0.184253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +497.889583,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +497.889765,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +497.889947,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +497.890133,0.176797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +497.890311,0.170686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +497.890483,0.178077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +497.890662,0.170237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +497.890833,0.169470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +497.891004,0.170909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +497.891176,0.178589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +497.891356,0.178493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +497.891536,0.168925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +497.891706,0.171870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +497.891879,0.175389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +497.892056,0.167229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +497.892224,0.169854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +497.892395,0.169693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +497.892566,0.170173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +497.892738,0.170813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +497.892910,0.177470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +497.893088,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +497.893272,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +497.893453,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +497.893626,0.168797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +497.893796,0.171134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +497.893968,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +497.894136,0.168413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +497.894305,0.174302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +497.894481,0.177213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +497.894659,0.180061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +497.894841,0.179485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +497.895021,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +497.895204,0.182301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +497.895388,0.173661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +497.895563,0.170046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +497.895734,0.170141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +497.895906,0.168029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +497.896075,0.167422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +497.896243,0.119710,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +497.896364,0.176861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +497.896542,0.177373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +497.896721,0.177821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +497.896900,0.179293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +497.897081,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +497.897267,0.171518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +497.897440,0.169725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +497.897611,0.170429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +497.897782,0.167998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +497.897952,0.167773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +497.898121,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +497.898294,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +497.898476,0.181245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +497.898659,0.193821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +497.898854,0.183837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +497.899039,0.189725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +497.899230,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +497.899418,0.187678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +497.899607,0.185758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +497.899794,0.187837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +497.899983,0.184701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +497.900169,0.191485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +497.900362,0.186397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +497.900550,0.168477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +497.900719,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +497.900884,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +497.901048,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +497.901212,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +497.901376,0.100126,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +497.901478,0.102558,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +497.901581,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +497.901746,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +497.901910,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +497.902075,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +497.902238,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +497.902403,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +497.902567,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +497.902731,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +497.902896,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +497.903060,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +497.903224,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +497.903388,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +497.903552,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +497.903717,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +497.903881,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +497.904045,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +497.904210,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +497.904374,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +497.904538,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +497.904702,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +497.904866,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +497.905031,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +497.905195,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +497.905360,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +497.905524,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +497.905688,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +497.905852,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +497.906016,0.161342,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +497.906354,64.640963,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","184",,,"spmv3",3953 +497.906668,0.001952,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +497.906776,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +497.906941,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +497.907105,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +497.907270,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +497.907436,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +497.907601,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +497.907767,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +497.907933,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +497.908097,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +497.908262,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +497.908428,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +497.908594,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +497.908758,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +497.908923,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +497.909089,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +497.909255,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +497.909420,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +497.909586,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +497.909751,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +497.909917,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +497.910083,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +497.910248,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +497.910415,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +497.910581,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +497.910747,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +497.910913,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +497.911078,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +497.911242,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +497.911408,0.099870,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +497.911510,0.122974,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +497.911637,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +497.911803,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +497.911968,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +497.912134,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +497.912299,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +497.912464,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +497.912630,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +497.912797,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +497.912962,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +497.913129,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +497.913295,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +497.913462,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +497.913628,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +497.913794,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +497.913959,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +497.914125,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +497.914291,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +497.914457,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +497.914622,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +497.914788,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +497.914954,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +497.915118,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +497.915284,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +497.915450,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +497.915614,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +497.915780,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +497.915946,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +497.916112,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +497.916278,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +497.916443,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +497.916609,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +497.916773,0.168221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +497.916944,0.166910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +497.917113,0.167421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +497.917282,0.166109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +497.917451,0.165342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +497.917618,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +497.917785,0.166813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +497.917954,0.165886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +497.918122,0.166813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +497.918291,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +497.918461,0.166750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +497.918629,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +497.918797,0.166429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +497.918966,0.166046,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +497.919135,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +497.919304,0.165853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +497.919472,0.165342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +497.919640,0.165565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +497.919808,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +497.919975,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +497.920140,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +497.920306,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +497.920472,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +497.920638,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +497.920805,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +497.920970,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +497.921135,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +497.921301,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +497.921466,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +497.921632,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +497.921797,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +497.921963,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +497.922129,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +497.922293,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +497.922458,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +497.922624,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +497.922789,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +497.922954,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +497.923120,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +497.923287,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +497.923452,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +497.923618,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +497.923783,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +497.923948,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +497.924114,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +497.924280,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +497.924445,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +497.924611,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +497.924777,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +497.924942,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +497.925108,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +497.925275,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +497.925440,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +497.925606,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +497.925772,0.014976,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +497.925790,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +497.925955,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +497.926120,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +497.926285,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +497.926452,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +497.926616,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +497.926782,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +497.926950,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +497.927117,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +497.927282,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +497.927449,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +497.927615,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +497.927780,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +497.927945,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +497.928110,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +497.928275,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +497.928439,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +497.928604,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +497.928771,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +497.928936,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +497.929101,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +497.929266,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +497.929432,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +497.929598,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +497.929764,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +497.929929,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +497.930095,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +497.930261,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +497.930426,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +497.930592,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +497.930758,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +497.930923,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +497.931090,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +497.931256,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +497.931420,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +497.931585,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +497.931750,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +497.931916,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +497.932082,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +497.932247,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +497.932412,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +497.932579,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +497.932744,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +497.932909,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +497.933074,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +497.933239,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +497.933405,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +497.933570,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +497.933734,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +497.933900,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +497.934065,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +497.934230,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +497.934397,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +497.934563,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +497.934728,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +497.934894,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +497.935060,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +497.935226,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +497.935392,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +497.935558,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +497.935723,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +497.935889,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +497.936055,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +497.936221,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +497.936386,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +497.936552,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +497.936717,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +497.936882,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +497.937049,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +497.937214,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +497.937380,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +497.937544,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +497.937709,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +497.937874,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +497.938041,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +497.938207,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +497.938372,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +497.938538,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +497.938702,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +497.938867,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +497.939032,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +497.939197,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +497.939363,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +497.939528,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +497.939693,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +497.939859,0.136158,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +497.939998,0.041727,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +497.940042,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +497.940209,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +497.940375,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +497.940541,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +497.940706,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +497.940870,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +497.941036,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +497.941200,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +497.941365,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +497.941529,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +497.941694,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +497.941861,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +497.942027,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +497.942192,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +497.942357,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +497.942523,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +497.942690,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +497.942856,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +497.943023,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +497.943188,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +497.943353,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +497.943520,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +497.943686,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +497.943852,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +497.944018,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +497.944183,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +497.944348,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +497.944514,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +497.944679,0.059775,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +497.944741,0.062047,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +497.944804,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +497.944969,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +497.945135,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +497.945301,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +497.945467,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +497.945631,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +497.945796,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +497.945961,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +497.946126,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +497.946291,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +497.946457,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +497.946623,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +497.946788,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +497.946955,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +497.947121,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +497.947286,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +497.947452,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +497.947617,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +497.947782,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +497.947947,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +497.948112,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +497.948277,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +497.948443,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +497.948608,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +497.948775,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +497.948942,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +497.949107,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +497.949273,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +497.949439,0.039519,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +497.970995,53.528531,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","185",,,"spmv3",3963 +497.971127,0.001888,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +498.024523,4.619896,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","184",,,"sum",3967 +498.024653,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +498.024673,4.618295,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","185",,,"sum",3971 +498.029280,9.272750,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","184",,,"divide",3976 +498.029392,6.876115,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","185",,,"divide",3981 +498.038527,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +498.038599,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +498.038634,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +498.038703,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +498.038708,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +498.038771,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +498.038776,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +498.038838,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +498.039016,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +498.039231,54.544643,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","186",,,"spmv3",3999 +498.039327,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +498.093775,53.560819,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","187",,,"spmv3",4009 +498.093894,0.001888,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +498.147335,4.619959,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","186",,,"sum",4013 +498.147452,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +498.147472,4.618743,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","187",,,"sum",4017 +498.152098,9.249038,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","186",,,"divide",4022 +498.152215,6.908019,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","187",,,"divide",4027 +498.161356,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +498.161428,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +498.161463,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +498.161520,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +498.161532,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +498.161540,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +498.161588,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +498.161607,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +498.161783,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +498.161942,54.574722,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","188",,,"spmv3",4045 +498.162023,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +498.216516,53.434933,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","189",,,"spmv3",4055 +498.216644,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +498.269951,4.620567,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","188",,,"sum",4059 +498.270096,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +498.270116,4.618615,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","189",,,"sum",4063 +498.274709,9.283725,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","188",,,"divide",4068 +498.274815,6.889363,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","189",,,"divide",4073 +498.283989,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +498.284060,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +498.284094,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +498.284154,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +498.284164,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +498.284207,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +498.284222,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +498.284274,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +498.284482,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +498.284660,54.632545,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","190",,,"spmv3",4091 +498.284743,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +498.339292,53.547219,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","191",,,"spmv3",4101 +498.339380,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +498.392839,4.620055,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","190",,,"sum",4105 +498.392925,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +498.392946,4.617816,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","191",,,"sum",4109 +498.397649,9.257582,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","190",,,"divide",4114 +498.397722,6.901171,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","191",,,"divide",4119 +498.406872,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +498.406942,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +498.406971,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +498.407040,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +498.407042,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +498.407095,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +498.407123,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +498.407162,0.011456,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +498.407324,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +498.407517,54.522276,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","192",,,"spmv3",4137 +498.407598,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +498.462039,53.512979,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","193",,,"spmv3",4147 +498.462165,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +498.515551,4.620055,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","192",,,"sum",4151 +498.515661,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +498.515680,4.618903,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","193",,,"sum",4155 +498.520310,9.255406,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","192",,,"divide",4160 +498.520420,6.909363,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","193",,,"divide",4165 +498.529666,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +498.529737,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +498.529773,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +498.529829,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +498.529842,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +498.529881,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +498.529897,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +498.529948,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +498.529950,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +498.530015,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +498.530020,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +498.530022,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +498.530086,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +498.530087,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +505.754053,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +505.754105,0.061983,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +505.754223,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +505.754388,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +505.754552,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +505.754716,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +505.754881,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +505.755045,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +505.755209,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +505.755373,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +505.755537,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +505.755702,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +505.755866,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +505.756031,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +505.756195,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +505.756359,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +505.756523,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +505.756687,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +505.756851,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +505.757016,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +505.757181,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +505.757346,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +505.757511,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +505.757676,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +505.757841,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +505.758005,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +505.758169,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +505.758334,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +505.758499,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +505.758663,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +505.758828,0.039360,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +505.758868,0.142973,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +505.759013,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +505.759177,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +505.759342,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +505.759506,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +505.759670,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +505.759835,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +505.759999,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +505.760164,0.166078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +505.760332,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +505.760497,0.166749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +505.760665,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +505.760830,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +505.760994,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +505.761159,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +505.761324,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +505.761488,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +505.761653,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +505.761818,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +505.761982,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +505.762147,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +505.762312,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +505.762477,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +505.762642,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +505.762807,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +505.762971,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +505.763135,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +505.763299,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +505.763464,0.167390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +505.763632,0.214141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +505.763848,0.207101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +505.764056,0.203229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +505.764261,0.207164,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +505.764469,0.207965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +505.764678,0.210877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +505.764891,0.204412,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +505.765096,0.210621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +505.765308,0.205757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +505.765515,0.206845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +505.765723,0.210877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +505.765936,0.209821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +505.766147,0.212156,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +505.766360,0.199069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +505.766561,0.224861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +505.766787,0.170077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +505.766958,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +505.767123,0.165054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +505.767290,0.198877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +505.767490,0.201692,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +505.767693,0.194909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +505.767889,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +505.768094,0.203485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +505.768298,0.204605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +505.768504,0.197756,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +505.768703,0.205437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +505.768910,0.210205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +505.769122,0.207101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +505.769330,0.205052,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +505.769536,0.206429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +505.769744,0.210301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +505.769956,0.199613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +505.770157,0.168477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +505.770326,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +505.770492,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +505.770665,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +505.770829,0.166141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +505.770996,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +505.771160,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +505.771325,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +505.771489,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +505.771653,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +505.771818,0.164894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +505.771984,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +505.772148,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +505.772312,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +505.772476,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +505.772641,0.164574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +505.772806,0.189309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +505.772998,0.199197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +505.773198,0.192700,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +505.773392,0.194557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +505.773588,0.191773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +505.773781,0.191965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +505.773974,0.197693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +505.774173,0.195709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +505.774370,0.180829,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +505.774552,0.023200,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +505.774577,0.195069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +505.774773,0.194269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +505.774968,0.185021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +505.775155,0.170525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +505.775327,0.193981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +505.775522,0.193661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +505.775717,0.192765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +505.775911,0.190045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +505.776103,0.193117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +505.776297,0.191261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +505.776490,0.199612,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +505.776691,0.198493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +505.776890,0.188253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +505.777080,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +505.777271,0.201565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +505.777474,0.197181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +505.777673,0.178397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +505.777852,0.176189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +505.778030,0.177341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +505.778209,0.179934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +505.778390,0.178397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +505.778569,0.176381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +505.778747,0.180285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +505.778929,0.180509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +505.779110,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +505.779290,0.179422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +505.779470,0.178653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +505.779650,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +505.779832,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +505.780019,0.192125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +505.780213,0.186301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +505.780400,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +505.780583,0.177501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +505.780762,0.179197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +505.780942,0.184093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +505.781127,0.178846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +505.781307,0.178461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +505.781487,0.176509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +505.781665,0.175005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +505.781841,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +505.782021,0.177405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +505.782199,0.177566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +505.782378,0.172861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +505.782552,0.175517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +505.782729,0.172861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +505.782903,0.176222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +505.783081,0.175613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +505.783258,0.173053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +505.783432,0.172029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +505.783606,0.175933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +505.783783,0.177598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +505.783962,0.172669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +505.784136,0.174973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +505.784312,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +505.784487,0.173662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +505.784662,0.174749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +505.784838,0.176413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +505.785016,0.171933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +505.785189,0.168990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +505.785360,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +505.785541,0.169405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +505.785712,0.174813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +505.785888,0.168478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +505.786058,0.169853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +505.786229,0.174525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +505.786405,0.175069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +505.786581,0.176157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +505.786758,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +505.786923,0.171229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +505.787096,0.171741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +505.787269,0.167806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +505.787438,0.169117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +505.787608,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +505.787774,0.171838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +505.787947,0.169821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +505.788118,0.175197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +505.788295,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +505.788486,0.176797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +505.788664,0.180990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +505.788847,0.178845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +505.789027,0.173917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +505.789202,0.174205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +505.789377,0.175005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +505.789554,0.173918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +505.789729,0.170013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +505.789900,0.120446,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +505.790022,0.173053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +505.790196,0.174653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +505.790372,0.176798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +505.790550,0.173437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +505.790725,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +505.790901,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +505.791074,0.173246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +505.791249,0.178077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +505.791428,0.174205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +505.791604,0.175357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +505.791780,0.171870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +505.791953,0.171230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +505.792126,0.168957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +505.792296,0.172349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +505.792470,0.170174,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +505.792641,0.174205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +505.792817,0.173053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +505.792991,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +505.793172,0.173278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +505.793346,0.175422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +505.793523,0.182013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +505.793706,0.175677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +505.793883,0.172701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +505.794057,0.173662,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +505.794232,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +505.794404,0.175197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +505.794581,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +505.794764,0.178589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +505.794944,0.106719,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +505.795052,0.112894,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +505.795166,0.180669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +505.795348,0.178525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +505.795528,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +505.795714,0.199421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +505.795915,0.195101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +505.796111,0.192573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +505.796305,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +505.796497,0.189309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +505.796688,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +505.796874,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +505.797060,0.184477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +505.797246,0.182301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +505.797430,0.185181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +505.797616,0.191197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +505.797809,0.169053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +505.797979,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +505.798143,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +505.798307,0.167870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +505.798476,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +505.798642,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +505.798806,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +505.798970,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +505.799135,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +505.799299,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +505.799464,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +505.799628,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +505.799792,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +505.799957,0.160606,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +505.800344,65.877011,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","194",,,"spmv3",4185 +505.800562,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +505.800695,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +505.800861,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +505.801026,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +505.801192,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +505.801357,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +505.801523,0.171870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +505.801697,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +505.801864,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +505.802029,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +505.802195,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +505.802360,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +505.802526,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +505.802692,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +505.802857,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +505.803023,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +505.803188,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +505.803354,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +505.803520,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +505.803685,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +505.803851,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +505.804016,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +505.804182,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +505.804348,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +505.804513,0.172414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +505.804687,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +505.804852,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +505.805019,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +505.805185,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +505.805351,0.100510,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +505.805454,0.123390,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +505.805580,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +505.805745,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +505.805911,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +505.806077,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +505.806244,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +505.806411,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +505.806577,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +505.806743,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +505.806910,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +505.807076,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +505.807242,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +505.807407,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +505.807572,0.172093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +505.807747,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +505.807912,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +505.808078,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +505.808244,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +505.808410,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +505.808576,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +505.808743,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +505.808908,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +505.809074,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +505.809241,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +505.809406,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +505.809572,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +505.809737,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +505.809902,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +505.810068,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +505.810234,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +505.810400,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +505.810567,0.172573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +505.810742,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +505.810908,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +505.811075,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +505.811240,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +505.811406,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +505.811571,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +505.811737,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +505.811902,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +505.812068,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +505.812234,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +505.812400,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +505.812566,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +505.812731,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +505.812896,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +505.813063,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +505.813229,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +505.813395,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +505.813562,0.171742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +505.813736,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +505.813902,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +505.814068,0.169054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +505.814239,0.167453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +505.814409,0.166621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +505.814577,0.175326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +505.814755,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +505.814924,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +505.815091,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +505.815258,0.165981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +505.815426,0.168317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +505.815597,0.178973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +505.815778,0.167518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +505.815948,0.166173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +505.816117,0.165373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +505.816284,0.165118,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +505.816451,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +505.816618,0.164702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +505.816784,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +505.816951,0.165949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +505.817119,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +505.817286,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +505.817452,0.172925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +505.817627,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +505.817793,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +505.817960,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +505.818125,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +505.818291,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +505.818457,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +505.818623,0.172541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +505.818798,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +505.818964,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +505.819131,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +505.819297,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +505.819462,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +505.819628,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +505.819794,0.014912,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +505.819811,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +505.819975,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +505.820142,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +505.820307,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +505.820471,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +505.820637,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +505.820804,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +505.820969,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +505.821135,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +505.821302,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +505.821468,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +505.821633,0.172669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +505.821808,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +505.821974,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +505.822140,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +505.822305,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +505.822471,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +505.822636,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +505.822801,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +505.822967,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +505.823132,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +505.823299,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +505.823465,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +505.823630,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +505.823796,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +505.823961,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +505.824128,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +505.824294,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +505.824459,0.171870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +505.824632,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +505.824799,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +505.824965,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +505.825131,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +505.825297,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +505.825462,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +505.825627,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +505.825792,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +505.825958,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +505.826124,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +505.826289,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +505.826454,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +505.826620,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +505.826785,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +505.826951,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +505.827117,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +505.827283,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +505.827450,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +505.827615,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +505.827781,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +505.827946,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +505.828111,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +505.828276,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +505.828442,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +505.828608,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +505.828774,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +505.828939,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +505.829104,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +505.829270,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +505.829436,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +505.829601,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +505.829767,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +505.829933,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +505.830098,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +505.830263,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +505.830428,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +505.830594,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +505.830760,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +505.830925,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +505.831091,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +505.831258,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +505.831424,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +505.831590,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +505.831755,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +505.831921,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +505.832086,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +505.832252,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +505.832419,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +505.832584,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +505.832749,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +505.832914,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +505.833081,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +505.833246,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +505.833412,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +505.833578,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +505.833743,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +505.833909,0.136254,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +505.834048,0.042591,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +505.834093,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +505.834259,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +505.834425,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +505.834590,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +505.834756,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +505.834922,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +505.835088,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +505.835254,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +505.835419,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +505.835585,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +505.835750,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +505.835916,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +505.836081,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +505.836247,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +505.836413,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +505.836580,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +505.836746,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +505.836912,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +505.837078,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +505.837243,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +505.837408,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +505.837575,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +505.837741,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +505.837907,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +505.838072,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +505.838238,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +505.838403,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +505.838569,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +505.838736,0.060351,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +505.838798,0.063135,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +505.838863,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +505.839029,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +505.839196,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +505.839362,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +505.839530,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +505.839697,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +505.839863,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +505.840029,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +505.840195,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +505.840361,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +505.840528,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +505.840694,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +505.840859,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +505.841025,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +505.841192,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +505.841357,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +505.841522,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +505.841688,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +505.841854,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +505.842019,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +505.842185,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +505.842351,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +505.842516,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +505.842682,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +505.842847,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +505.843013,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +505.843178,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +505.843343,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +505.843509,0.040063,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +505.866220,55.620979,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","195",,,"spmv3",4195 +505.866350,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +505.921840,5.254669,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","194",,,"sum",4199 +505.921906,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +505.921926,5.229358,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","195",,,"sum",4203 +505.927181,10.412316,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","194",,,"divide",4208 +505.927200,7.631272,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","195",,,"divide",4213 +505.937579,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +505.937655,0.001344,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +505.937690,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +505.937720,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +505.937741,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +505.937763,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +505.937793,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +505.937813,0.001376,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +505.937956,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +505.938126,55.224122,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","196",,,"spmv3",4231 +505.938217,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +505.993350,53.665042,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","197",,,"spmv3",4241 +505.993470,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +506.047014,4.851668,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","196",,,"sum",4245 +506.047126,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +506.047147,4.851284,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","197",,,"sum",4249 +506.052004,9.656263,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","196",,,"divide",4254 +506.052097,7.155407,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","197",,,"divide",4259 +506.061619,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +506.061693,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +506.061710,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +506.061764,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +506.061783,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +506.061812,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +506.061836,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +506.061884,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +506.062150,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +506.062340,54.871199,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","198",,,"spmv3",4277 +506.062415,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +506.117211,53.586932,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","199",,,"spmv3",4287 +506.117335,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +506.170797,4.619287,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","198",,,"sum",4291 +506.170945,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +506.170966,4.618679,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","199",,,"sum",4295 +506.175557,9.288142,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","198",,,"divide",4300 +506.175647,6.907891,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","199",,,"divide",4305 +506.184839,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +506.184914,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +506.184945,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +506.185000,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +506.185017,0.001183,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +506.185047,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +506.185072,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +506.185119,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +506.185296,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +506.185494,54.545413,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","200",,,"spmv3",4323 +506.185573,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +506.240039,53.525557,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","201",,,"spmv3",4333 +506.240161,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +506.293564,4.620855,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","200",,,"sum",4337 +506.293707,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +506.293729,4.619159,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","201",,,"sum",4341 +506.298321,9.276142,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","200",,,"divide",4346 +506.298412,6.893236,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","201",,,"divide",4351 +506.307582,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +506.307657,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +506.307705,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +506.307765,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +506.307778,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +506.307816,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +506.307837,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +506.307888,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +506.308062,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +506.308259,54.505317,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","202",,,"spmv3",4369 +506.308339,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +506.362764,53.474838,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","203",,,"spmv3",4379 +506.362885,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +506.416238,4.619959,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","202",,,"sum",4383 +506.416378,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +506.416400,4.619288,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","203",,,"sum",4387 +506.421067,9.251278,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","202",,,"divide",4392 +506.421129,6.909427,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","203",,,"divide",4397 +506.430263,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +506.430336,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +506.430340,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +506.430395,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +506.430413,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +506.430444,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +506.430467,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +506.430513,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +506.430515,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +506.430581,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +506.430588,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +506.430589,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +506.430655,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +506.430656,0.005344,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +513.617978,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +513.618094,0.061599,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +513.618368,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +513.618648,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +513.618922,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +513.619194,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +513.619467,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +513.619745,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +513.620020,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +513.620293,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +513.620565,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +513.620844,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +513.621118,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +513.621391,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +513.621669,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +513.621942,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +513.622215,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +513.622487,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +513.622762,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +513.623030,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +513.623297,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +513.623566,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +513.623840,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +513.624109,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +513.624377,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +513.624653,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +513.624922,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +513.625195,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +513.625466,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +513.625743,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +513.625908,0.039135,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +513.625985,0.142237,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +513.626195,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +513.626403,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +513.626618,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +513.626830,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +513.627041,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +513.627250,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +513.627458,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +513.627671,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +513.627883,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +513.628093,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +513.628301,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +513.628509,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +513.628721,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +513.628928,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +513.629137,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +513.629345,0.173501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +513.629553,0.180061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +513.629766,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +513.629976,0.180125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +513.630184,0.184477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +513.630394,0.183133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +513.630609,0.199869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +513.630810,0.211804,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +513.631023,0.217725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +513.631242,0.213404,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +513.631457,0.213661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +513.631672,0.206237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +513.631879,0.216188,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +513.632097,0.213117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +513.632311,0.205309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +513.632517,0.200572,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +513.632719,0.166654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +513.632887,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +513.633053,0.188893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +513.633243,0.198461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +513.633443,0.205309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +513.633650,0.213308,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +513.633864,0.204893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +513.634070,0.209277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +513.634281,0.205245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +513.634488,0.204124,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +513.634693,0.207005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +513.634901,0.203965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +513.635106,0.215036,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +513.635323,0.216829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +513.635541,0.214749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +513.635757,0.193181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +513.635951,0.171645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +513.636124,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +513.636288,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +513.636452,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +513.636619,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +513.636783,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +513.636947,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +513.637112,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +513.637278,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +513.637443,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +513.637607,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +513.637771,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +513.637935,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +513.638099,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +513.638263,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +513.638430,0.195741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +513.638627,0.206013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +513.638834,0.202205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +513.639037,0.198877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +513.639237,0.194173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +513.639433,0.197949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +513.639632,0.200700,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +513.639834,0.195421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +513.640031,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +513.640224,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +513.640417,0.197757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +513.640616,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +513.640798,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +513.640962,0.187645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +513.641151,0.193149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +513.641345,0.192317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +513.641539,0.190397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +513.641730,0.193437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +513.641925,0.192189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +513.642119,0.197789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +513.642318,0.194173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +513.642513,0.187997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +513.642702,0.183869,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +513.642887,0.024512,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +513.642913,0.196765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +513.643111,0.191005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +513.643304,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +513.643487,0.187485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +513.643676,0.184701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +513.643862,0.185725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +513.644049,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +513.644237,0.188413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +513.644427,0.185981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +513.644614,0.191933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +513.644807,0.189437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +513.644998,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +513.645187,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +513.645376,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +513.645560,0.182813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +513.645744,0.184765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +513.645930,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +513.646118,0.188541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +513.646308,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +513.646500,0.188669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +513.646690,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +513.646877,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +513.647061,0.186078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +513.647249,0.187133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +513.647437,0.193469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +513.647632,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +513.647824,0.185278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +513.648010,0.183197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +513.648195,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +513.648377,0.186813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +513.648565,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +513.648754,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +513.648941,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +513.649131,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +513.649317,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +513.649503,0.182301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +513.649695,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +513.649881,0.187869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +513.650070,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +513.650255,0.188989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +513.650445,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +513.650628,0.170846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +513.650800,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +513.650985,0.171197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +513.651157,0.179869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +513.651338,0.166749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +513.651506,0.173310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +513.651681,0.177629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +513.651859,0.175389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +513.652036,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +513.652203,0.176094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +513.652380,0.172093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +513.652553,0.167773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +513.652722,0.167518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +513.652891,0.170557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +513.653063,0.170237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +513.653234,0.172158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +513.653407,0.180222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +513.653589,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +513.653773,0.173181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +513.653947,0.168957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +513.654117,0.171038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +513.654289,0.168381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +513.654459,0.166717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +513.654627,0.169374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +513.654797,0.177789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +513.654977,0.177181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +513.655155,0.180093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +513.655336,0.177021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +513.655514,0.179485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +513.655695,0.179326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +513.655875,0.169789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +513.656046,0.170461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +513.656218,0.167902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +513.656387,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +513.656554,0.168413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +513.656724,0.178141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +513.656903,0.177854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +513.657082,0.178845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +513.657262,0.178141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +513.657442,0.178525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +513.657621,0.178045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +513.657801,0.168638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +513.657970,0.169949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +513.658142,0.168829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +513.658312,0.118174,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +513.658431,0.168702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +513.658601,0.175773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +513.658778,0.178301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +513.658958,0.178077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +513.659137,0.194205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +513.659333,0.189981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +513.659524,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +513.659712,0.188125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +513.659901,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +513.660093,0.185629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +513.660279,0.183997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +513.660465,0.194269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +513.660660,0.188829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +513.660850,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +513.661032,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +513.661196,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +513.661360,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +513.661524,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +513.661688,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +513.661853,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +513.662016,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +513.662181,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +513.662345,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +513.662508,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +513.662673,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +513.662837,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +513.663001,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +513.663166,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +513.663330,0.100095,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +513.663431,0.102206,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +513.663534,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +513.663698,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +513.663862,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +513.664027,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +513.664191,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +513.664355,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +513.664520,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +513.664684,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +513.664848,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +513.665013,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +513.665177,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +513.665340,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +513.665504,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +513.665669,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +513.665833,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +513.665997,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +513.666162,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +513.666326,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +513.666490,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +513.666654,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +513.666818,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +513.666983,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +513.667147,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +513.667311,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +513.667475,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +513.667640,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +513.667804,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +513.667968,0.161182,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +513.668250,64.637223,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","204",,,"spmv3",4417 +513.668447,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +513.668552,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +513.668717,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +513.668882,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +513.669047,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +513.669212,0.165086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +513.669380,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +513.669545,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +513.669711,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +513.669876,0.164669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +513.670043,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +513.670209,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +513.670374,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +513.670540,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +513.670704,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +513.670870,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +513.671036,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +513.671201,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +513.671367,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +513.671532,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +513.671698,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +513.671864,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +513.672029,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +513.672195,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +513.672360,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +513.672525,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +513.672691,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +513.672856,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +513.673022,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +513.673188,0.100734,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +513.673291,0.122878,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +513.673416,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +513.673582,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +513.673747,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +513.673913,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +513.674080,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +513.674245,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +513.674412,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +513.674577,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +513.674744,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +513.674910,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +513.675076,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +513.675241,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +513.675407,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +513.675572,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +513.675737,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +513.675902,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +513.676068,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +513.676235,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +513.676400,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +513.676565,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +513.676731,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +513.676896,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +513.677062,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +513.677229,0.170014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +513.677401,0.167998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +513.677572,0.168349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +513.677743,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +513.677911,0.165630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +513.678078,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +513.678246,0.165054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +513.678413,0.166269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +513.678582,0.165981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +513.678750,0.166526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +513.678918,0.166845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +513.679087,0.167645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +513.679257,0.166814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +513.679425,0.167389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +513.679596,0.168189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +513.679766,0.165342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +513.679933,0.167037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +513.680102,0.168925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +513.680274,0.169598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +513.680445,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +513.680611,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +513.680777,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +513.680942,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +513.681108,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +513.681274,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +513.681439,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +513.681605,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +513.681772,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +513.681939,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +513.682105,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +513.682269,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +513.682434,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +513.682600,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +513.682766,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +513.682931,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +513.683097,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +513.683263,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +513.683429,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +513.683594,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +513.683759,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +513.683924,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +513.684089,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +513.684254,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +513.684419,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +513.684586,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +513.684752,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +513.684917,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +513.685083,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +513.685248,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +513.685414,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +513.685580,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +513.685746,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +513.685911,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +513.686076,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +513.686242,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +513.686408,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +513.686574,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +513.686739,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +513.686905,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +513.687070,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +513.687235,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +513.687402,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +513.687567,0.014304,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +513.687584,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +513.687750,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +513.687915,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +513.688082,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +513.688248,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +513.688413,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +513.688580,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +513.688745,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +513.688911,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +513.689078,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +513.689243,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +513.689409,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +513.689575,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +513.689740,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +513.689906,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +513.690071,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +513.690236,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +513.690401,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +513.690567,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +513.690734,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +513.690899,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +513.691064,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +513.691230,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +513.691395,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +513.691561,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +513.691726,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +513.691893,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +513.692058,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +513.692225,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +513.692392,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +513.692556,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +513.692722,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +513.692888,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +513.693054,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +513.693220,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +513.693386,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +513.693551,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +513.693718,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +513.693884,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +513.694050,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +513.694214,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +513.694379,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +513.694545,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +513.694709,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +513.694875,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +513.695040,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +513.695205,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +513.695370,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +513.695536,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +513.695702,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +513.695866,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +513.696033,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +513.696199,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +513.696364,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +513.696530,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +513.696695,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +513.696860,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +513.697026,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +513.697191,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +513.697355,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +513.697521,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +513.697686,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +513.697853,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +513.698019,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +513.698184,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +513.698350,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +513.698516,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +513.698681,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +513.698846,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +513.699012,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +513.699177,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +513.699343,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +513.699508,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +513.699674,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +513.699839,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +513.700005,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +513.700170,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +513.700335,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +513.700500,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +513.700666,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +513.700832,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +513.700997,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +513.701163,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +513.701328,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +513.701493,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +513.701660,0.136126,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +513.701798,0.042751,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +513.701843,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +513.702010,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +513.702176,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +513.702341,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +513.702507,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +513.702674,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +513.702841,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +513.703006,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +513.703173,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +513.703339,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +513.703504,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +513.703670,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +513.703835,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +513.704001,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +513.704166,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +513.704332,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +513.704497,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +513.704662,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +513.704828,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +513.704993,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +513.705158,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +513.705324,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +513.705489,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +513.705654,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +513.705820,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +513.705985,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +513.706150,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +513.706316,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +513.706481,0.060287,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +513.706544,0.062463,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +513.706608,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +513.706772,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +513.706938,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +513.707103,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +513.707268,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +513.707434,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +513.707599,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +513.707765,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +513.707930,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +513.708096,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +513.708260,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +513.708426,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +513.708592,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +513.708758,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +513.708923,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +513.709088,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +513.709253,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +513.709417,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +513.709583,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +513.709749,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +513.709913,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +513.710079,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +513.710244,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +513.710409,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +513.710574,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +513.710742,0.162462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +513.710907,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +513.711073,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +513.711239,0.039616,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +513.732887,53.312954,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","205",,,"spmv3",4427 +513.733023,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +513.786199,4.619575,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","204",,,"sum",4431 +513.786317,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +513.786339,4.617239,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","205",,,"sum",4435 +513.791023,9.260622,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","204",,,"divide",4440 +513.791057,6.902964,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","205",,,"divide",4445 +513.800254,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +513.800334,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +513.800363,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +513.800392,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +513.800413,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +513.800441,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +513.800468,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +513.800489,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +513.800636,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +513.800799,54.559686,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","206",,,"spmv3",4463 +513.800878,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +513.855358,53.571638,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","207",,,"spmv3",4473 +513.855470,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +513.908929,4.620887,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","206",,,"sum",4477 +513.909024,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +513.909046,4.616919,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","207",,,"sum",4481 +513.913685,9.262350,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","206",,,"divide",4486 +513.913780,6.914580,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","207",,,"divide",4491 +513.922927,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +513.923008,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +513.923010,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +513.923039,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +513.923060,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +513.923087,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +513.923115,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +513.923136,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +513.923286,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +513.923450,54.518791,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","208",,,"spmv3",4509 +513.923528,0.002272,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +513.977968,53.555862,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","209",,,"spmv3",4519 +513.978085,0.001856,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +514.031523,4.620887,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","208",,,"sum",4523 +514.031668,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +514.031689,4.618967,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","209",,,"sum",4527 +514.036287,9.295854,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","208",,,"divide",4532 +514.036379,6.892276,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","209",,,"divide",4537 +514.045566,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +514.045646,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +514.045646,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +514.045675,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +514.045696,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +514.045723,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +514.045751,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +514.045771,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +514.045919,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +514.046082,54.534054,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","210",,,"spmv3",4555 +514.046161,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +514.100615,53.548406,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","211",,,"spmv3",4565 +514.100727,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +514.154163,4.620503,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","210",,,"sum",4569 +514.154274,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +514.154295,4.619031,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","211",,,"sum",4573 +514.158920,9.248111,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","210",,,"divide",4578 +514.159028,6.905524,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","211",,,"divide",4583 +514.168120,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +514.168179,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +514.168198,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +514.168205,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +514.168226,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +514.168256,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +514.168281,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +514.168302,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +514.168405,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +514.168563,54.587461,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","212",,,"spmv3",4601 +514.168638,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +514.223149,53.576278,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","213",,,"spmv3",4611 +514.223244,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +514.276725,4.620375,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","212",,,"sum",4615 +514.276834,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +514.276856,4.619224,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","213",,,"sum",4619 +514.281460,9.278350,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","212",,,"divide",4624 +514.281593,6.897459,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","213",,,"divide",4629 +514.290723,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +514.290802,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +514.290802,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +514.290831,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +514.290852,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +514.290879,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +514.290892,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +514.290907,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +514.290927,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +514.290930,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +514.290971,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +514.290973,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +514.291008,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +514.291010,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +521.508130,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +521.508175,0.061567,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +521.508277,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +521.508441,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +521.508604,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +521.508769,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +521.508933,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +521.509097,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +521.509260,0.162333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +521.509424,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +521.509588,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +521.509753,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +521.509917,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +521.510081,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +521.510244,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +521.510408,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +521.510572,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +521.510736,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +521.510900,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +521.511063,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +521.511228,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +521.511392,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +521.511558,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +521.511722,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +521.511887,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +521.512051,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +521.512215,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +521.512380,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +521.512544,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +521.512709,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +521.512873,0.039360,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +521.512914,0.142845,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +521.513058,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +521.513222,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +521.513386,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +521.513550,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +521.513714,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +521.513878,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +521.514042,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +521.514206,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +521.514372,0.165405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +521.514538,0.168797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +521.514708,0.166654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +521.514876,0.165277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +521.515043,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +521.515208,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +521.515373,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +521.515539,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +521.515704,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +521.515871,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +521.516038,0.164830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +521.516204,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +521.516371,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +521.516537,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +521.516702,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +521.516867,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +521.517033,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +521.517197,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +521.517363,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +521.517548,0.205788,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +521.517756,0.201757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +521.517958,0.207229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +521.518167,0.210365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +521.518378,0.220028,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +521.518600,0.219549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +521.518821,0.208540,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +521.519030,0.214397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +521.519246,0.206077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +521.519453,0.207932,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +521.519663,0.211869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +521.519876,0.206013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +521.520083,0.205597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +521.520290,0.211580,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +521.520503,0.197309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +521.520701,0.166398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +521.520868,0.166494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +521.521036,0.202493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +521.521240,0.199549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +521.521441,0.203773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +521.521646,0.203741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +521.521851,0.202525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +521.522055,0.206717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +521.522263,0.195261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +521.522459,0.200189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +521.522661,0.212349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +521.522874,0.205565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +521.523081,0.207932,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +521.523291,0.202685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +521.523494,0.206333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +521.523702,0.200925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +521.523904,0.172029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +521.524077,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +521.524242,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +521.524406,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +521.524572,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +521.524736,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +521.524900,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +521.525065,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +521.525229,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +521.525395,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +521.525559,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +521.525723,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +521.525887,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +521.526051,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +521.526215,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +521.526379,0.194365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +521.526575,0.194461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +521.526771,0.196733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +521.526968,0.194845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +521.527165,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +521.527358,0.198493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +521.527558,0.204637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +521.527764,0.197949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +521.527963,0.194685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +521.528159,0.195805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +521.528356,0.197021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +521.528555,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +521.528741,0.021247,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +521.528763,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +521.528928,0.187901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +521.529117,0.198461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +521.529317,0.194813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +521.529513,0.194812,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +521.529709,0.195581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +521.529906,0.191741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +521.530099,0.195485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +521.530295,0.200125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +521.530497,0.201373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +521.530699,0.195261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +521.530896,0.192989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +521.531090,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +521.531286,0.193309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +521.531481,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +521.531662,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +521.531848,0.190557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +521.532040,0.187229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +521.532228,0.189309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +521.532419,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +521.532606,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +521.532793,0.189405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +521.532984,0.186493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +521.533172,0.187901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +521.533361,0.180157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +521.533542,0.180285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +521.533724,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +521.533907,0.180542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +521.534089,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +521.534276,0.186461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +521.534463,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +521.534649,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +521.534837,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +521.535021,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +521.535204,0.184637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +521.535391,0.181693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +521.535574,0.182173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +521.535757,0.181885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +521.535940,0.187422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +521.536129,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +521.536313,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +521.536494,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +521.536680,0.183741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +521.536865,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +521.537050,0.178557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +521.537229,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +521.537413,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +521.537598,0.183358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +521.537783,0.186110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +521.537970,0.173629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +521.538145,0.176317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +521.538322,0.171069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +521.538494,0.173694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +521.538669,0.166525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +521.538837,0.172765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +521.539011,0.179261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +521.539192,0.179070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +521.539372,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +521.539538,0.176029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +521.539715,0.173949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +521.539891,0.167518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +521.540059,0.167517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +521.540228,0.171421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +521.540401,0.168830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +521.540571,0.171645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +521.540744,0.178269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +521.540923,0.182429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +521.541107,0.176861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +521.541285,0.171230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +521.541457,0.170557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +521.541629,0.169373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +521.541800,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +521.541967,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +521.542137,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +521.542314,0.176381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +521.542492,0.178526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +521.542672,0.179645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +521.542853,0.177981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +521.543032,0.183581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +521.543217,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +521.543395,0.177245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +521.543574,0.177630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +521.543753,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +521.543933,0.173245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +521.544107,0.171421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +521.544280,0.125470,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +521.544407,0.182013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +521.544590,0.177150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +521.544768,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +521.544951,0.183901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +521.545136,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +521.545324,0.174493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +521.545500,0.172157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +521.545673,0.172094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +521.545846,0.169693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +521.546017,0.170941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +521.546189,0.173534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +521.546364,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +521.546548,0.179453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +521.546729,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +521.546916,0.190621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +521.547108,0.192221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +521.547301,0.185117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +521.547487,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +521.547677,0.187229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +521.547865,0.185597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +521.548052,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +521.548239,0.191581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +521.548432,0.189949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +521.548623,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +521.548807,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +521.548972,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +521.549136,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +521.549300,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +521.549464,0.100062,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +521.549565,0.102271,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +521.549669,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +521.549833,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +521.549996,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +521.550161,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +521.550325,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +521.550490,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +521.550654,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +521.550818,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +521.550982,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +521.551146,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +521.551311,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +521.551475,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +521.551639,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +521.551804,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +521.551968,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +521.552133,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +521.552296,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +521.552461,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +521.552626,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +521.552790,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +521.552954,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +521.553119,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +521.553283,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +521.553447,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +521.553611,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +521.553775,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +521.553940,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +521.554104,0.161085,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +521.554394,64.680680,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","214",,,"spmv3",4649 +521.554594,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +521.554696,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +521.554862,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +521.555026,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +521.555191,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +521.555356,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +521.555522,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +521.555687,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +521.555853,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +521.556018,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +521.556184,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +521.556350,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +521.556516,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +521.556680,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +521.556847,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +521.557012,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +521.557178,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +521.557343,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +521.557509,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +521.557674,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +521.557841,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +521.558007,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +521.558173,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +521.558339,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +521.558506,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +521.558673,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +521.558838,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +521.559003,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +521.559169,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +521.559335,0.100638,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +521.559438,0.123102,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +521.559564,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +521.559730,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +521.559896,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +521.560062,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +521.560228,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +521.560394,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +521.560561,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +521.560727,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +521.560892,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +521.561059,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +521.561226,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +521.561391,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +521.561556,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +521.561722,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +521.561886,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +521.562051,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +521.562218,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +521.562384,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +521.562550,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +521.562715,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +521.562880,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +521.563046,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +521.563211,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +521.563377,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +521.563542,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +521.563708,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +521.563873,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +521.564038,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +521.564205,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +521.564370,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +521.564537,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +521.564701,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +521.564867,0.165661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +521.565035,0.168541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +521.565206,0.167262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +521.565376,0.169629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +521.565547,0.168061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +521.565718,0.167262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +521.565887,0.166333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +521.566055,0.165213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +521.566223,0.166430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +521.566392,0.166045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +521.566559,0.167261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +521.566729,0.167454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +521.566899,0.168157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +521.567069,0.166269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +521.567237,0.165502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +521.567405,0.166333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +521.567574,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +521.567742,0.166494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +521.567911,0.166909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +521.568081,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +521.568248,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +521.568414,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +521.568579,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +521.568744,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +521.568911,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +521.569076,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +521.569242,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +521.569408,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +521.569574,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +521.569739,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +521.569904,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +521.570071,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +521.570237,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +521.570403,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +521.570568,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +521.570733,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +521.570898,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +521.571062,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +521.571228,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +521.571393,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +521.571559,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +521.571724,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +521.571890,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +521.572056,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +521.572221,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +521.572386,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +521.572551,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +521.572716,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +521.572881,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +521.573047,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +521.573213,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +521.573379,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +521.573545,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +521.573710,0.014432,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +521.573727,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +521.573892,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +521.574058,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +521.574223,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +521.574388,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +521.574554,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +521.574720,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +521.574887,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +521.575052,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +521.575218,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +521.575386,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +521.575551,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +521.575717,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +521.575883,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +521.576048,0.165565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +521.576216,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +521.576381,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +521.576546,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +521.576711,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +521.576876,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +521.577041,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +521.577207,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +521.577371,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +521.577537,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +521.577703,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +521.577868,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +521.578032,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +521.578198,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +521.578363,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +521.578530,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +521.578696,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +521.578861,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +521.579027,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +521.579192,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +521.579358,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +521.579524,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +521.579690,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +521.579855,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +521.580020,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +521.580186,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +521.580352,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +521.580520,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +521.580686,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +521.580851,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +521.581017,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +521.581183,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +521.581348,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +521.581514,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +521.581679,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +521.581845,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +521.582011,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +521.582175,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +521.582341,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +521.582506,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +521.582672,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +521.582838,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +521.583003,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +521.583170,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +521.583335,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +521.583501,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +521.583666,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +521.583831,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +521.583997,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +521.584162,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +521.584327,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +521.584492,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +521.584657,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +521.584824,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +521.584990,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +521.585156,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +521.585321,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +521.585487,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +521.585653,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +521.585818,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +521.585983,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +521.586149,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +521.586314,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +521.586481,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +521.586647,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +521.586812,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +521.586978,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +521.587143,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +521.587310,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +521.587475,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +521.587641,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +521.587807,0.135774,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +521.587945,0.041791,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +521.587990,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +521.588156,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +521.588322,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +521.588487,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +521.588652,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +521.588817,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +521.588982,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +521.589148,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +521.589312,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +521.589477,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +521.589644,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +521.589810,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +521.589975,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +521.590140,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +521.590306,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +521.590472,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +521.590638,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +521.590804,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +521.590969,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +521.591135,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +521.591300,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +521.591466,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +521.591630,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +521.591796,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +521.591962,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +521.592129,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +521.592294,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +521.592460,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +521.592626,0.060415,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +521.592689,0.062079,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +521.592753,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +521.592919,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +521.593084,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +521.593249,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +521.593414,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +521.593579,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +521.593747,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +521.593912,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +521.594078,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +521.594243,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +521.594408,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +521.594573,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +521.594738,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +521.594905,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +521.595072,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +521.595237,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +521.595402,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +521.595569,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +521.595734,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +521.595899,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +521.596065,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +521.596229,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +521.596394,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +521.596559,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +521.596726,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +521.596891,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +521.597057,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +521.597222,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +521.597388,0.039647,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +521.619074,53.494809,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","215",,,"spmv3",4659 +521.619182,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +521.672568,4.620759,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","214",,,"sum",4663 +521.672658,0.001376,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +521.672679,4.616919,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","215",,,"sum",4667 +521.677301,9.244815,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","214",,,"divide",4672 +521.677330,6.891604,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","215",,,"divide",4677 +521.686513,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +521.686597,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +521.686613,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +521.686642,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +521.686662,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +521.686695,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +521.686722,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +521.686742,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +521.686867,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +521.687025,54.551271,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","216",,,"spmv3",4695 +521.687097,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +521.741576,53.561815,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","217",,,"spmv3",4705 +521.741666,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +521.795137,4.619576,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","216",,,"sum",4709 +521.795220,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +521.795242,4.618615,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","217",,,"sum",4713 +521.799866,9.256911,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","216",,,"divide",4718 +521.799893,6.912435,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","217",,,"divide",4723 +521.809071,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +521.809130,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +521.809154,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +521.809156,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +521.809177,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +521.809211,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +521.809236,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +521.809257,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +521.809361,0.001439,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +521.809515,54.553479,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","218",,,"spmv3",4741 +521.809590,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +521.864068,53.514520,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","219",,,"spmv3",4751 +521.864156,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +521.917582,4.619384,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","218",,,"sum",4755 +521.917703,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +521.917724,4.617784,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","219",,,"sum",4759 +521.922311,9.278447,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","218",,,"divide",4764 +521.922451,6.907028,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","219",,,"divide",4769 +521.931570,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +521.931651,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +521.931654,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +521.931680,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +521.931701,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +521.931732,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +521.931760,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +521.931781,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +521.931933,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +521.932099,54.558535,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","220",,,"spmv3",4787 +521.932177,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +521.986657,53.454521,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","221",,,"spmv3",4797 +521.986743,0.001888,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +522.040111,4.621303,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","220",,,"sum",4801 +522.040193,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +522.040214,4.618392,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","221",,,"sum",4805 +522.044841,9.260110,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","220",,,"divide",4810 +522.044873,6.913684,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","221",,,"divide",4815 +522.054082,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +522.054163,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +522.054165,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +522.054193,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +522.054214,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +522.054244,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +522.054273,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +522.054294,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +522.054447,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +522.054613,54.593127,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","222",,,"spmv3",4833 +522.054694,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +522.109206,53.547096,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","223",,,"spmv3",4843 +522.109296,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +522.162752,4.620695,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","222",,,"sum",4847 +522.162839,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +522.162861,4.620056,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","223",,,"sum",4851 +522.167481,9.246734,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","222",,,"divide",4856 +522.167511,6.910996,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","223",,,"divide",4861 +522.176682,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +522.176745,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +522.176765,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +522.176772,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +522.176793,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +522.176826,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +522.176835,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +522.176851,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +522.176872,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +522.176873,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +522.176918,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +522.176919,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +522.176956,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +522.176957,0.005055,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +529.427356,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +529.427401,0.061599,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +529.427504,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +529.427668,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +529.427832,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +529.427996,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +529.428160,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +529.428324,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +529.428488,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +529.428652,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +529.428816,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +529.428980,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +529.429144,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +529.429308,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +529.429472,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +529.429637,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +529.429801,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +529.429964,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +529.430129,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +529.430293,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +529.430458,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +529.430623,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +529.430786,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +529.430951,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +529.431115,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +529.431280,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +529.431445,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +529.431609,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +529.431774,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +529.431938,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +529.432103,0.039359,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +529.432143,0.143422,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +529.432288,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +529.432453,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +529.432617,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +529.432781,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +529.432945,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +529.433109,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +529.433274,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +529.433438,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +529.433602,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +529.433766,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +529.433930,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +529.434094,0.166141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +529.434262,0.169213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +529.434432,0.170686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +529.434604,0.168029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +529.434773,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +529.434938,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +529.435102,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +529.435267,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +529.435431,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +529.435595,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +529.435760,0.165885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +529.435927,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +529.436094,0.165310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +529.436260,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +529.436427,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +529.436592,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +529.436757,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +529.436923,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +529.437088,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +529.437253,0.174141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +529.437429,0.211325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +529.437641,0.208189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +529.437851,0.210364,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +529.438063,0.211005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +529.438275,0.219773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +529.438496,0.213468,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +529.438711,0.210909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +529.438923,0.209885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +529.439134,0.211132,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +529.439346,0.215837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +529.439563,0.209789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +529.439774,0.211005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +529.439986,0.207997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +529.440196,0.202845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +529.440400,0.199261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +529.440600,0.167421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +529.440769,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +529.440935,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +529.441124,0.201533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +529.441327,0.209949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +529.441538,0.200285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +529.441740,0.207036,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +529.441948,0.206301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +529.442156,0.204669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +529.442361,0.206365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +529.442569,0.210876,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +529.442781,0.202013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +529.442984,0.205757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +529.443191,0.208509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +529.443401,0.213692,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +529.443616,0.209149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +529.443826,0.173661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +529.444001,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +529.444165,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +529.444330,0.165757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +529.444497,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +529.444661,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +529.444825,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +529.444989,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +529.445154,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +529.445318,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +529.445483,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +529.445647,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +529.445811,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +529.445975,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +529.446139,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +529.446303,0.193437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +529.446498,0.196605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +529.446696,0.195069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +529.446892,0.202333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +529.447096,0.197692,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +529.447295,0.194557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +529.447491,0.195709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +529.447688,0.189085,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +529.447878,0.024992,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +529.447904,0.192541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +529.448098,0.197053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +529.448297,0.194781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +529.448492,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +529.448673,0.167197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +529.448841,0.190429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +529.449033,0.191773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +529.449226,0.193085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +529.449420,0.193725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +529.449615,0.197149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +529.449814,0.195741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +529.450011,0.201277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +529.450213,0.196989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +529.450412,0.199292,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +529.450612,0.218301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +529.450832,0.199741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +529.451033,0.198301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +529.451233,0.182013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +529.451416,0.184413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +529.451602,0.186941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +529.451790,0.188221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +529.451979,0.189917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +529.452170,0.185373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +529.452357,0.189629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +529.452548,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +529.452736,0.187389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +529.452925,0.187965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +529.453114,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +529.453297,0.179709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +529.453478,0.180766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +529.453660,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +529.453845,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +529.454030,0.187197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +529.454218,0.183965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +529.454404,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +529.454588,0.187133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +529.454777,0.181437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +529.454959,0.190685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +529.455151,0.179901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +529.455332,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +529.455513,0.181534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +529.455696,0.187229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +529.455884,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +529.456069,0.181629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +529.456252,0.178429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +529.456431,0.189661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +529.456622,0.193021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +529.456816,0.175933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +529.456993,0.183069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +529.457178,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +529.457361,0.181790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +529.457544,0.185117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +529.457731,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +529.457912,0.168509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +529.458082,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +529.458263,0.168126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +529.458433,0.174173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +529.458608,0.168541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +529.458778,0.175869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +529.458955,0.180158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +529.459136,0.173693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +529.459311,0.168477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +529.459481,0.175869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +529.459658,0.169534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +529.459828,0.169117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +529.459999,0.167005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +529.460167,0.170942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +529.460339,0.168925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +529.460509,0.175293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +529.460686,0.182653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +529.460870,0.178750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +529.461050,0.173469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +529.461224,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +529.461394,0.169853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +529.461566,0.167006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +529.461734,0.170237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +529.461905,0.172637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +529.462079,0.179966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +529.462260,0.176797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +529.462438,0.177885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +529.462617,0.179933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +529.462798,0.181309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +529.462981,0.176349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +529.463158,0.170238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +529.463330,0.168381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +529.463499,0.117982,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +529.463619,0.166334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +529.463786,0.168349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +529.463956,0.179773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +529.464137,0.177469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +529.464315,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +529.464493,0.178910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +529.464673,0.178813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +529.464853,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +529.465032,0.168637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +529.465202,0.170558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +529.465373,0.168157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +529.465543,0.167581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +529.465711,0.170334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +529.465883,0.181757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +529.466066,0.176477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +529.466243,0.191357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +529.466436,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +529.466623,0.190813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +529.466816,0.193213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +529.467010,0.188957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +529.467200,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +529.467384,0.184605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +529.467570,0.186237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +529.467757,0.196861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +529.467955,0.186301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +529.468143,0.176509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +529.468321,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +529.468484,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +529.468649,0.099903,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +529.468750,0.102366,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +529.468853,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +529.469017,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +529.469181,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +529.469345,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +529.469509,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +529.469674,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +529.469838,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +529.470003,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +529.470167,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +529.470331,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +529.470495,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +529.470659,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +529.470824,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +529.470988,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +529.471152,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +529.471317,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +529.471481,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +529.471645,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +529.471809,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +529.471973,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +529.472138,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +529.472302,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +529.472467,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +529.472631,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +529.472795,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +529.472960,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +529.473124,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +529.473288,0.160990,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +529.473562,64.664139,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","224",,,"spmv3",4881 +529.473763,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +529.473868,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +529.474035,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +529.474200,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +529.474366,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +529.474532,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +529.474698,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +529.474864,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +529.475029,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +529.475194,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +529.475359,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +529.475524,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +529.475689,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +529.475854,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +529.476020,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +529.476186,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +529.476351,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +529.476517,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +529.476683,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +529.476848,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +529.477013,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +529.477180,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +529.477346,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +529.477511,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +529.477677,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +529.477841,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +529.478008,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +529.478173,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +529.478338,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +529.478504,0.100830,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +529.478607,0.123326,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +529.478733,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +529.478900,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +529.479065,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +529.479232,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +529.479398,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +529.479564,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +529.479730,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +529.479895,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +529.480062,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +529.480228,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +529.480395,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +529.480561,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +529.480726,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +529.480892,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +529.481057,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +529.481222,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +529.481389,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +529.481554,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +529.481719,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +529.481884,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +529.482049,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +529.482215,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +529.482380,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +529.482544,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +529.482710,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +529.482875,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +529.483040,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +529.483206,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +529.483371,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +529.483537,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +529.483702,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +529.483868,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +529.484033,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +529.484198,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +529.484364,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +529.484533,0.167005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +529.484703,0.168286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +529.484873,0.169149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +529.485045,0.166717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +529.485214,0.166494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +529.485383,0.166205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +529.485552,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +529.485719,0.168126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +529.485889,0.166205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +529.486057,0.166589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +529.486226,0.168702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +529.486397,0.169501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +529.486568,0.168221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +529.486739,0.166078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +529.486907,0.166493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +529.487077,0.167357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +529.487245,0.165246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +529.487413,0.168029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +529.487584,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +529.487749,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +529.487914,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +529.488080,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +529.488246,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +529.488411,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +529.488576,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +529.488742,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +529.488907,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +529.489072,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +529.489237,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +529.489402,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +529.489567,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +529.489734,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +529.489899,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +529.490065,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +529.490231,0.164638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +529.490398,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +529.490562,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +529.490728,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +529.490893,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +529.491059,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +529.491224,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +529.491390,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +529.491556,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +529.491721,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +529.491887,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +529.492054,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +529.492220,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +529.492385,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +529.492550,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +529.492716,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +529.492882,0.014528,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +529.492898,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +529.493065,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +529.493231,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +529.493397,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +529.493563,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +529.493729,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +529.493894,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +529.494060,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +529.494226,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +529.494391,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +529.494557,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +529.494722,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +529.494888,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +529.495054,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +529.495220,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +529.495385,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +529.495550,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +529.495717,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +529.495881,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +529.496046,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +529.496212,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +529.496378,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +529.496543,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +529.496709,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +529.496875,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +529.497041,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +529.497208,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +529.497375,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +529.497540,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +529.497706,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +529.497872,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +529.498038,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +529.498202,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +529.498368,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +529.498534,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +529.498699,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +529.498864,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +529.499029,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +529.499195,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +529.499361,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +529.499526,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +529.499692,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +529.499858,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +529.500024,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +529.500190,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +529.500356,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +529.500523,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +529.500690,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +529.500855,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +529.501020,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +529.501185,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +529.501351,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +529.501516,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +529.501681,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +529.501845,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +529.502010,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +529.502176,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +529.502341,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +529.502506,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +529.502671,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +529.502838,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +529.503003,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +529.503168,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +529.503335,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +529.503502,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +529.503667,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +529.503833,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +529.503998,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +529.504164,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +529.504330,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +529.504495,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +529.504661,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +529.504826,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +529.504991,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +529.505157,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +529.505323,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +529.505488,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +529.505653,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +529.505818,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +529.505984,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +529.506150,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +529.506315,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +529.506481,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +529.506647,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +529.506812,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +529.506977,0.136093,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +529.507115,0.042432,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +529.507160,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +529.507325,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +529.507490,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +529.507656,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +529.507822,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +529.507988,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +529.508154,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +529.508319,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +529.508485,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +529.508651,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +529.508817,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +529.508981,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +529.509148,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +529.509314,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +529.509480,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +529.509646,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +529.509811,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +529.509976,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +529.510141,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +529.510307,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +529.510473,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +529.510639,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +529.510804,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +529.510971,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +529.511137,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +529.511304,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +529.511470,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +529.511635,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +529.511800,0.060031,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +529.511863,0.061759,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +529.511926,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +529.512092,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +529.512257,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +529.512422,0.164766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +529.512589,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +529.512755,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +529.512921,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +529.513087,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +529.513252,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +529.513417,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +529.513582,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +529.513747,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +529.513913,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +529.514079,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +529.514245,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +529.514411,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +529.514576,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +529.514742,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +529.514907,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +529.515072,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +529.515239,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +529.515404,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +529.515570,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +529.515736,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +529.515902,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +529.516067,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +529.516232,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +529.516399,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +529.516564,0.040319,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +529.538225,53.527289,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","225",,,"spmv3",4891 +529.538338,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +529.591752,4.619864,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","224",,,"sum",4895 +529.591837,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +529.591860,4.619831,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","225",,,"sum",4899 +529.596488,9.258159,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","224",,,"divide",4904 +529.596519,6.893780,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","225",,,"divide",4909 +529.605710,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +529.605798,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +529.605819,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +529.605849,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +529.605870,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +529.605905,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +529.605933,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +529.605954,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +529.606091,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +529.606249,54.551785,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","226",,,"spmv3",4927 +529.606325,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +529.660800,53.480251,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","227",,,"spmv3",4937 +529.660872,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +529.714280,4.620151,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","226",,,"sum",4941 +529.714370,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +529.714392,4.617911,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","227",,,"sum",4945 +529.719011,9.245712,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","226",,,"divide",4950 +529.719043,6.916852,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","227",,,"divide",4955 +529.728223,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +529.728298,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +529.728311,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +529.728326,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +529.728347,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +529.728384,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +529.728410,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +529.728431,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +529.728588,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +529.728751,54.592200,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","228",,,"spmv3",4973 +529.728856,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +529.783342,53.546969,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","229",,,"spmv3",4983 +529.783430,0.002048,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +529.836889,4.618520,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","228",,,"sum",4987 +529.837012,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +529.837035,4.618392,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","229",,,"sum",4991 +529.841627,9.291119,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","228",,,"divide",4996 +529.841730,6.917555,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","229",,,"divide",5001 +529.850890,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +529.850970,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +529.850978,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +529.850999,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +529.851021,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +529.851056,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +529.851083,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +529.851104,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +529.851389,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +529.851553,54.406891,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","230",,,"spmv3",5019 +529.851639,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +529.905960,53.389116,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","231",,,"spmv3",5029 +529.906113,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +529.959348,4.620215,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","230",,,"sum",5033 +529.959458,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +529.959481,4.619447,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","231",,,"sum",5037 +529.964107,9.250735,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","230",,,"divide",5042 +529.964222,6.902612,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","231",,,"divide",5047 +529.973294,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +529.973348,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +529.973375,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +529.973380,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +529.973395,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +529.973433,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +529.973459,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +529.973479,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +529.973571,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +529.973726,54.571881,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","232",,,"spmv3",5065 +529.973789,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +530.028297,53.509498,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","233",,,"spmv3",5075 +530.028414,0.001952,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +530.081806,4.621400,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","232",,,"sum",5079 +530.081942,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +530.081964,4.621111,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","233",,,"sum",5083 +530.086568,9.284527,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","232",,,"divide",5088 +530.086693,6.910931,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","233",,,"divide",5093 +530.095821,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +530.095901,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +530.095908,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +530.095930,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +530.095951,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +530.095986,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +530.095991,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +530.096014,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +530.096029,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +530.096034,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +530.096078,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +530.096079,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +530.096116,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +530.096117,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +537.425670,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +537.425716,0.061727,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +537.425824,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +537.425987,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +537.426151,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +537.426316,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +537.426480,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +537.426644,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +537.426808,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +537.426973,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +537.427137,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +537.427301,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +537.427464,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +537.427628,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +537.427792,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +537.427956,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +537.428119,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +537.428283,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +537.428447,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +537.428611,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +537.428775,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +537.428940,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +537.429104,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +537.429269,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +537.429433,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +537.429599,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +537.429763,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +537.429928,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +537.430092,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +537.430256,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +537.430420,0.039135,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +537.430461,0.143070,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +537.430605,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +537.430769,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +537.430934,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +537.431098,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +537.431263,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +537.431428,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +537.431592,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +537.431757,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +537.431921,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +537.432085,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +537.432249,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +537.432413,0.165342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +537.432579,0.166781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +537.432748,0.169821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +537.432919,0.166494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +537.433086,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +537.433250,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +537.433414,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +537.433579,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +537.433743,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +537.433907,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +537.434071,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +537.434235,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +537.434399,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +537.434563,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +537.434727,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +537.434891,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +537.435054,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +537.435219,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +537.435383,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +537.435547,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +537.435711,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +537.435875,0.178589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +537.436055,0.210269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +537.436267,0.202045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +537.436470,0.206716,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +537.436678,0.207485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +537.436886,0.211677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +537.437099,0.208893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +537.437309,0.211932,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +537.437523,0.207229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +537.437731,0.202717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +537.437935,0.204349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +537.438141,0.215036,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +537.438357,0.208925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +537.438567,0.208701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +537.438777,0.209916,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +537.438988,0.202941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +537.439192,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +537.439359,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +537.439524,0.173789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +537.439698,0.200573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +537.439900,0.204797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +537.440106,0.205117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +537.440313,0.207548,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +537.440522,0.204317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +537.440727,0.204957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +537.440933,0.204381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +537.441139,0.206620,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +537.441347,0.207837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +537.441556,0.198653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +537.441756,0.210333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +537.441967,0.203644,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +537.442172,0.211773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +537.442385,0.186333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +537.442573,0.166877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +537.442741,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +537.442905,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +537.443070,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +537.443236,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +537.443401,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +537.443564,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +537.443729,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +537.443893,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +537.444058,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +537.444223,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +537.444386,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +537.444551,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +537.444714,0.171389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +537.444887,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +537.445051,0.177501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +537.445230,0.194269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +537.445426,0.192381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +537.445619,0.201725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +537.445822,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +537.446011,0.024352,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +537.446037,0.198109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +537.446236,0.192861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +537.446430,0.197981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +537.446630,0.191389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +537.446822,0.190781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +537.447014,0.197820,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +537.447213,0.189917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +537.447405,0.166910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +537.447573,0.177117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +537.447751,0.191869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +537.447944,0.196637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +537.448142,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +537.448333,0.201053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +537.448535,0.193245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +537.448730,0.211932,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +537.448943,0.200093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +537.449144,0.191549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +537.449337,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +537.449528,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +537.449722,0.199773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +537.449923,0.190749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +537.450115,0.182589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +537.450298,0.183965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +537.450484,0.187677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +537.450673,0.183933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +537.450858,0.188989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +537.451048,0.186749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +537.451236,0.185597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +537.451423,0.188157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +537.451612,0.185534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +537.451799,0.190077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +537.451990,0.180477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +537.452172,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +537.452353,0.180957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +537.452535,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +537.452717,0.183965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +537.452902,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +537.453089,0.184765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +537.453275,0.180190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +537.453456,0.181309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +537.453639,0.181661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +537.453821,0.182013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +537.454005,0.180477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +537.454186,0.177245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +537.454365,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +537.454548,0.181374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +537.454731,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +537.454920,0.180477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +537.455102,0.179197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +537.455282,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +537.455468,0.182269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +537.455651,0.181693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +537.455834,0.179006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +537.456015,0.182014,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +537.456198,0.182109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +537.456381,0.180061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +537.456562,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +537.456745,0.175965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +537.456922,0.174590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +537.457098,0.175261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +537.457274,0.171581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +537.457447,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +537.457617,0.169854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +537.457788,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +537.457971,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +537.458152,0.168317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +537.458321,0.171966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +537.458494,0.173821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +537.458669,0.176573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +537.458847,0.169565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +537.459018,0.169918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +537.459189,0.171357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +537.459362,0.168509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +537.459531,0.174750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +537.459707,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +537.459891,0.179805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +537.460072,0.174333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +537.460247,0.171133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +537.460420,0.174558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +537.460595,0.168317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +537.460765,0.169309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +537.460935,0.170334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +537.461107,0.177277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +537.461285,0.175645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +537.461462,0.177469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +537.461641,0.125086,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +537.461767,0.188573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +537.461957,0.183102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +537.462141,0.171357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +537.462314,0.172701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +537.462487,0.168829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +537.462658,0.166590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +537.462825,0.169213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +537.462996,0.172669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +537.463170,0.179166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +537.463350,0.175421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +537.463527,0.177469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +537.463705,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +537.463884,0.177533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +537.464063,0.170334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +537.464234,0.172605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +537.464408,0.169533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +537.464579,0.168478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +537.464749,0.169341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +537.464919,0.173661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +537.465094,0.184221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +537.465279,0.175966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +537.465456,0.195644,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +537.465653,0.186910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +537.465841,0.193213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +537.466036,0.187070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +537.466224,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +537.466411,0.183037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +537.466595,0.189181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +537.466786,0.115134,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +537.466902,0.121726,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +537.467025,0.188349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +537.467215,0.180413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +537.467396,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +537.467561,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +537.467725,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +537.467889,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +537.468053,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +537.468217,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +537.468381,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +537.468546,0.162366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +537.468709,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +537.468874,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +537.469038,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +537.469202,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +537.469367,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +537.469531,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +537.469696,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +537.469860,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +537.470024,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +537.470188,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +537.470353,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +537.470517,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +537.470682,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +537.470846,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +537.471010,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +537.471174,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +537.471338,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +537.471503,0.161405,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +537.472053,64.613677,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","234",,,"spmv3",5113 +537.472248,0.002144,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +537.472352,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +537.472517,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +537.472684,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +537.472849,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +537.473014,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +537.473181,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +537.473347,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +537.473513,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +537.473678,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +537.473843,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +537.474009,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +537.474176,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +537.474342,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +537.474507,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +537.474671,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +537.474835,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +537.474999,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +537.475164,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +537.475329,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +537.475495,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +537.475660,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +537.475826,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +537.475991,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +537.476156,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +537.476322,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +537.476488,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +537.476653,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +537.476819,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +537.476985,0.100702,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +537.477087,0.123614,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +537.477213,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +537.477380,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +537.477546,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +537.477712,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +537.477877,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +537.478042,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +537.478207,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +537.478373,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +537.478540,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +537.478706,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +537.478871,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +537.479037,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +537.479202,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +537.479367,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +537.479532,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +537.479698,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +537.479864,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +537.480030,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +537.480196,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +537.480361,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +537.480527,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +537.480693,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +537.480858,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +537.481024,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +537.481190,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +537.481355,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +537.481520,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +537.481686,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +537.481851,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +537.482018,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +537.482184,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +537.482351,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +537.482517,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +537.482683,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +537.482847,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +537.483012,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +537.483178,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +537.483343,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +537.483509,0.169661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +537.483681,0.169885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +537.483854,0.167134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +537.484023,0.169725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +537.484195,0.167741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +537.484366,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +537.484534,0.166589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +537.484703,0.166365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +537.484871,0.168190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +537.485041,0.167261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +537.485211,0.167581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +537.485381,0.166942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +537.485550,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +537.485718,0.165758,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +537.485886,0.165630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +537.486054,0.165501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +537.486222,0.165406,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +537.486389,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +537.486558,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +537.486726,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +537.486891,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +537.487055,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +537.487222,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +537.487388,0.164477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +537.487555,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +537.487720,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +537.487885,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +537.488051,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +537.488216,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +537.488381,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +537.488546,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +537.488710,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +537.488876,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +537.489043,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +537.489209,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +537.489374,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +537.489539,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +537.489705,0.164669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +537.489871,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +537.490038,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +537.490204,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +537.490369,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +537.490535,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +537.490700,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +537.490865,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +537.491030,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +537.491196,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +537.491361,0.015551,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +537.491379,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +537.491545,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +537.491710,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +537.491876,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +537.492042,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +537.492209,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +537.492374,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +537.492540,0.164510,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +537.492707,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +537.492872,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +537.493038,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +537.493204,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +537.493370,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +537.493535,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +537.493700,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +537.493865,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +537.494031,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +537.494198,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +537.494362,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +537.494528,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +537.494693,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +537.494858,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +537.495024,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +537.495189,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +537.495355,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +537.495520,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +537.495686,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +537.495851,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +537.496017,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +537.496182,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +537.496348,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +537.496515,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +537.496680,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +537.496845,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +537.497010,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +537.497175,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +537.497341,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +537.497508,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +537.497672,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +537.497838,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +537.498004,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +537.498170,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +537.498335,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +537.498501,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +537.498665,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +537.498829,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +537.498995,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +537.499161,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +537.499326,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +537.499492,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +537.499658,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +537.499824,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +537.499990,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +537.500156,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +537.500320,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +537.500487,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +537.500652,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +537.500817,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +537.500983,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +537.501148,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +537.501314,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +537.501479,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +537.501645,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +537.501811,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +537.501976,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +537.502141,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +537.502306,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +537.502470,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +537.502636,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +537.502801,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +537.502967,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +537.503132,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +537.503298,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +537.503462,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +537.503628,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +537.503794,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +537.503958,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +537.504125,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +537.504290,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +537.504456,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +537.504622,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +537.504788,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +537.504952,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +537.505119,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +537.505285,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +537.505449,0.135774,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +537.505588,0.041599,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +537.505632,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +537.505797,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +537.505963,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +537.506129,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +537.506295,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +537.506460,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +537.506626,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +537.506792,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +537.506957,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +537.507122,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +537.507287,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +537.507453,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +537.507620,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +537.507784,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +537.507950,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +537.508117,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +537.508283,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +537.508449,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +537.508614,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +537.508780,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +537.508946,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +537.509112,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +537.509277,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +537.509442,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +537.509607,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +537.509773,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +537.509938,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +537.510104,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +537.510270,0.060031,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +537.510331,0.062527,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +537.510396,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +537.510562,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +537.510728,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +537.510894,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +537.511059,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +537.511225,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +537.511390,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +537.511555,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +537.511722,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +537.511887,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +537.512054,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +537.512220,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +537.512385,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +537.512551,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +537.512716,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +537.512881,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +537.513047,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +537.513212,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +537.513376,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +537.513542,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +537.513707,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +537.513873,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +537.514039,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +537.514205,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +537.514371,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +537.514536,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +537.514702,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +537.514868,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +537.515033,0.039775,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +537.536666,53.369982,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","235",,,"spmv3",5123 +537.536774,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +537.590036,4.620056,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","234",,,"sum",5127 +537.590124,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +537.590146,4.618680,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","235",,,"sum",5131 +537.594772,9.255855,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","234",,,"divide",5136 +537.594863,6.894708,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","235",,,"divide",5141 +537.603976,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +537.604068,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +537.604072,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +537.604162,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +537.604211,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +537.604263,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +537.604300,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +537.604351,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +537.604494,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +537.604688,54.498347,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","236",,,"spmv3",5159 +537.604755,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +537.659186,53.473372,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","237",,,"spmv3",5169 +537.659273,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +537.712658,4.620408,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","236",,,"sum",5173 +537.712745,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +537.712767,4.618904,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","237",,,"sum",5177 +537.717392,9.249391,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","236",,,"divide",5182 +537.717481,6.915924,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","237",,,"divide",5187 +537.726577,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +537.726661,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +537.726668,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +537.726714,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +537.726750,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +537.726764,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +537.726802,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +537.726852,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +537.726983,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +537.727136,54.513387,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","238",,,"spmv3",5205 +537.727199,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +537.781649,53.594682,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","239",,,"spmv3",5215 +537.781750,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +537.835243,4.619160,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","238",,,"sum",5219 +537.835355,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +537.835378,4.617880,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","239",,,"sum",5223 +537.839978,9.300655,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","238",,,"divide",5228 +537.840072,6.914899,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","239",,,"divide",5233 +537.849235,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +537.849326,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +537.849365,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +537.849429,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +537.849450,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +537.849454,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +537.849517,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +537.849538,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +537.849683,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +537.849845,54.574954,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","240",,,"spmv3",5251 +537.849916,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +537.904419,53.338590,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","241",,,"spmv3",5261 +537.904499,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +537.957757,4.619576,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","240",,,"sum",5265 +537.957841,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +537.957863,4.618520,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","241",,,"sum",5269 +537.962488,9.269743,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","240",,,"divide",5274 +537.962576,6.916116,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","241",,,"divide",5279 +537.971691,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +537.971773,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +537.971781,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +537.971823,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +537.971862,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +537.971872,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +537.971911,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +537.971959,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +537.972085,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +537.972272,54.538251,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","242",,,"spmv3",5297 +537.972335,0.001920,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +538.026810,53.587322,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","243",,,"spmv3",5307 +538.026941,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +538.080396,4.620984,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","242",,,"sum",5311 +538.080509,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +538.080530,4.617880,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","243",,,"sum",5315 +538.085154,9.261039,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","242",,,"divide",5320 +538.085262,6.916852,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","243",,,"divide",5325 +538.094373,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +538.094464,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +538.094485,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +538.094517,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +538.094538,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +538.094576,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +538.094605,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +538.094612,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +538.094641,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +538.094651,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +538.094703,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +538.094704,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +538.094742,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +538.094744,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +545.295208,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +545.295261,0.061471,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +545.295382,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +545.295546,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +545.295710,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +545.295874,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +545.296038,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +545.296201,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +545.296366,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +545.296530,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +545.296694,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +545.296858,0.162397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +545.297021,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +545.297185,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +545.297349,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +545.297513,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +545.297677,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +545.297841,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +545.298004,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +545.298169,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +545.298333,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +545.298498,0.168318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +545.298667,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +545.298831,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +545.298996,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +545.299160,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +545.299324,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +545.299488,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +545.299652,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +545.299816,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +545.299981,0.039391,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +545.300021,0.142942,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +545.300165,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +545.300330,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +545.300495,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +545.300659,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +545.300823,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +545.300987,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +545.301151,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +545.301316,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +545.301480,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +545.301646,0.165149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +545.301813,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +545.301979,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +545.302145,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +545.302309,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +545.302473,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +545.302638,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +545.302802,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +545.302966,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +545.303130,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +545.303293,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +545.303457,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +545.303622,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +545.303787,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +545.303951,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +545.304115,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +545.304279,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +545.304443,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +545.304607,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +545.304771,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +545.304936,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +545.305101,0.204765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +545.305307,0.208828,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +545.305517,0.200509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +545.305719,0.204893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +545.305925,0.210621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +545.306137,0.210812,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +545.306349,0.204925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +545.306555,0.203869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +545.306760,0.212445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +545.306974,0.200893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +545.307176,0.213085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +545.307391,0.208669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +545.307601,0.208701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +545.307811,0.198524,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +545.308010,0.206141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +545.308218,0.172062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +545.308391,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +545.308557,0.168573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +545.308727,0.197565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +545.308926,0.209437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +545.309136,0.198461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +545.309336,0.204733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +545.309542,0.198845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +545.309742,0.212637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +545.309956,0.197085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +545.310154,0.198589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +545.310354,0.210237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +545.310566,0.200189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +545.310767,0.206749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +545.310975,0.204349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +545.311181,0.212317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +545.311394,0.196508,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +545.311592,0.168702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +545.311762,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +545.311926,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +545.312091,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +545.312257,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +545.312420,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +545.312585,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +545.312749,0.173150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +545.312924,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +545.313089,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +545.313253,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +545.313417,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +545.313581,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +545.313745,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +545.313909,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +545.314073,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +545.314237,0.174749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +545.314413,0.193757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +545.314608,0.194205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +545.314803,0.198845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +545.315003,0.192157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +545.315197,0.195037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +545.315393,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +545.315576,0.026560,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +545.315604,0.198653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +545.315804,0.189917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +545.315995,0.191805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +545.316188,0.197372,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +545.316387,0.193405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +545.316581,0.169246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +545.316752,0.178493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +545.316931,0.189405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +545.317122,0.189757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +545.317313,0.192285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +545.317506,0.191773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +545.317699,0.193629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +545.317894,0.196605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +545.318092,0.193405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +545.318287,0.196381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +545.318484,0.188189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +545.318674,0.200349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +545.318875,0.193885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +545.319070,0.194109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +545.319266,0.180702,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +545.319448,0.178429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +545.319627,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +545.319812,0.187005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +545.320000,0.182973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +545.320184,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +545.320367,0.186333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +545.320554,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +545.320741,0.196541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +545.320939,0.185469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +545.321126,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +545.321311,0.182782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +545.321495,0.184541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +545.321681,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +545.321868,0.185469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +545.322054,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +545.322243,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +545.322432,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +545.322617,0.181949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +545.322800,0.180221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +545.322981,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +545.323165,0.183998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +545.323350,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +545.323537,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +545.323719,0.189789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +545.323910,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +545.324096,0.182941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +545.324280,0.180637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +545.324462,0.180349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +545.324643,0.177694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +545.324822,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +545.325009,0.184797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +545.325195,0.176221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +545.325373,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +545.325555,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +545.325739,0.178717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +545.325919,0.181342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +545.326102,0.176285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +545.326279,0.169693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +545.326450,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +545.326631,0.165630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +545.326798,0.173629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +545.326972,0.166813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +545.327140,0.174462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +545.327316,0.179197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +545.327496,0.174685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +545.327672,0.165885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +545.327839,0.173822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +545.328014,0.171293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +545.328187,0.169821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +545.328358,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +545.328523,0.169501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +545.328694,0.170525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +545.328866,0.171838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +545.329039,0.183773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +545.329224,0.179965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +545.329405,0.175421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +545.329582,0.169693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +545.329753,0.177566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +545.329931,0.170237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +545.330103,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +545.330270,0.169086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +545.330440,0.174109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +545.330616,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +545.330793,0.176893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +545.330971,0.179390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +545.331151,0.123678,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +545.331276,0.181501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +545.331459,0.176733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +545.331637,0.171293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +545.331809,0.168094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +545.331979,0.167421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +545.332147,0.167101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +545.332316,0.170462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +545.332487,0.176093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +545.332665,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +545.332851,0.176861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +545.333029,0.177917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +545.333208,0.179838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +545.333389,0.175325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +545.333566,0.170013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +545.333737,0.168605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +545.333907,0.169022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +545.334077,0.167997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +545.334246,0.174941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +545.334423,0.178398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +545.334602,0.176637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +545.334780,0.185277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +545.334967,0.191389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +545.335159,0.193149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +545.335354,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +545.335538,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +545.335725,0.186461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +545.335913,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +545.336099,0.185757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +545.336286,0.118302,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +545.336406,0.123966,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +545.336531,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +545.336720,0.170686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +545.336891,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +545.337055,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +545.337219,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +545.337383,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +545.337547,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +545.337711,0.171869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +545.337884,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +545.338049,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +545.338213,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +545.338377,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +545.338541,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +545.338705,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +545.338869,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +545.339034,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +545.339198,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +545.339362,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +545.339526,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +545.339691,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +545.339855,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +545.340019,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +545.340184,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +545.340348,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +545.340512,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +545.340676,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +545.340841,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +545.341005,0.161566,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +545.341284,64.576784,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","244",,,"spmv3",5345 +545.341488,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +545.341596,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +545.341762,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +545.341928,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +545.342092,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +545.342257,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +545.342422,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +545.342588,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +545.342753,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +545.342918,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +545.343084,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +545.343249,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +545.343414,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +545.343580,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +545.343745,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +545.343910,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +545.344077,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +545.344243,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +545.344408,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +545.344574,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +545.344738,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +545.344904,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +545.345070,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +545.345236,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +545.345402,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +545.345567,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +545.345732,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +545.345898,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +545.346065,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +545.346231,0.100286,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +545.346333,0.123390,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +545.346460,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +545.346626,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +545.346792,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +545.346958,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +545.347123,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +545.347289,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +545.347454,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +545.347620,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +545.347786,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +545.347952,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +545.348118,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +545.348284,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +545.348450,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +545.348615,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +545.348781,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +545.348946,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +545.349112,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +545.349277,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +545.349443,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +545.349608,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +545.349776,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +545.349942,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +545.350108,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +545.350273,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +545.350439,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +545.350605,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +545.350770,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +545.350936,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +545.351103,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +545.351268,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +545.351433,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +545.351598,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +545.351763,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +545.351928,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +545.352094,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +545.352260,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +545.352425,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +545.352590,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +545.352756,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +545.352922,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +545.353092,0.167966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +545.353263,0.169565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +545.353435,0.169501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +545.353607,0.168062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +545.353778,0.166461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +545.353946,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +545.354113,0.166942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +545.354282,0.167741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +545.354452,0.167966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +545.354622,0.167453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +545.354792,0.168029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +545.354962,0.166654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +545.355131,0.168253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +545.355302,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +545.355470,0.165950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +545.355638,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +545.355807,0.166365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +545.355975,0.167262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +545.356144,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +545.356310,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +545.356475,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +545.356640,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +545.356805,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +545.356970,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +545.357136,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +545.357301,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +545.357467,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +545.357633,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +545.357798,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +545.357963,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +545.358129,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +545.358295,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +545.358460,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +545.358626,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +545.358791,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +545.358956,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +545.359121,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +545.359286,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +545.359451,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +545.359617,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +545.359783,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +545.359948,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +545.360113,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +545.360278,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +545.360444,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +545.360610,0.014816,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +545.360627,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +545.360793,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +545.360958,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +545.361124,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +545.361290,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +545.361456,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +545.361623,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +545.361788,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +545.361954,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +545.362121,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +545.362286,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +545.362452,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +545.362617,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +545.362783,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +545.362947,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +545.363113,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +545.363278,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +545.363444,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +545.363608,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +545.363774,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +545.363940,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +545.364106,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +545.364271,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +545.364436,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +545.364601,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +545.364766,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +545.364931,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +545.365096,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +545.365262,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +545.365428,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +545.365594,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +545.365760,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +545.365926,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +545.366091,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +545.366256,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +545.366420,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +545.366587,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +545.366753,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +545.366918,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +545.367085,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +545.367250,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +545.367415,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +545.367580,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +545.367747,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +545.367913,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +545.368078,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +545.368242,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +545.368410,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +545.368575,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +545.368741,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +545.368906,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +545.369072,0.166493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +545.369240,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +545.369405,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +545.369570,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +545.369737,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +545.369902,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +545.370069,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +545.370235,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +545.370400,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +545.370565,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +545.370732,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +545.370898,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +545.371064,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +545.371229,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +545.371395,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +545.371561,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +545.371726,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +545.371892,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +545.372058,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +545.372224,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +545.372389,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +545.372554,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +545.372719,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +545.372884,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +545.373050,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +545.373215,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +545.373380,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +545.373545,0.164861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +545.373712,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +545.373877,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +545.374043,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +545.374208,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +545.374373,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +545.374539,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +545.374704,0.135742,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +545.374842,0.042048,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +545.374886,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +545.375051,0.165437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +545.375219,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +545.375385,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +545.375551,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +545.375717,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +545.375883,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +545.376048,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +545.376213,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +545.376380,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +545.376544,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +545.376710,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +545.376877,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +545.377042,0.164701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +545.377209,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +545.377375,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +545.377544,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +545.377710,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +545.377876,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +545.378057,0.165021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +545.378224,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +545.378391,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +545.378557,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +545.378722,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +545.378887,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +545.379052,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +545.379218,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +545.379384,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +545.379550,0.061055,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +545.379613,0.062687,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +545.379678,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +545.379844,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +545.380010,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +545.380175,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +545.380340,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +545.380504,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +545.380671,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +545.380837,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +545.381003,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +545.381169,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +545.381334,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +545.381501,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +545.381666,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +545.381832,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +545.381998,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +545.382164,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +545.382329,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +545.382494,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +545.382659,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +545.382824,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +545.382990,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +545.383155,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +545.383320,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +545.383485,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +545.383651,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +545.383818,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +545.383983,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +545.384149,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +545.384315,0.039520,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +545.405860,53.508477,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","245",,,"spmv3",5355 +545.405961,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +545.459368,4.619992,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","244",,,"sum",5359 +545.459441,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +545.459464,4.617656,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","245",,,"sum",5363 +545.464102,9.255919,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","244",,,"divide",5368 +545.464177,6.902900,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","245",,,"divide",5373 +545.473310,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +545.473407,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +545.473409,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +545.473439,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +545.473460,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +545.473504,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +545.473532,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +545.473552,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +545.473798,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +545.473959,54.556781,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","246",,,"spmv3",5391 +545.474034,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +545.528515,53.539484,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","247",,,"spmv3",5401 +545.528580,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +545.582054,4.620600,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","246",,,"sum",5405 +545.582111,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +545.582132,4.618776,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","247",,,"sum",5409 +545.586789,9.254479,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","246",,,"divide",5414 +545.586852,6.910132,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","247",,,"divide",5419 +545.595979,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +545.596039,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +545.596066,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +545.596074,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +545.596087,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +545.596133,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +545.596159,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +545.596180,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +545.596287,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +545.596447,54.584972,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","248",,,"spmv3",5437 +545.596516,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +545.651031,53.488957,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","249",,,"spmv3",5447 +545.651119,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +545.704520,4.619352,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","248",,,"sum",5451 +545.704647,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +545.704670,4.618264,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","249",,,"sum",5455 +545.709250,9.275472,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","248",,,"divide",5460 +545.709369,6.895220,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","249",,,"divide",5465 +545.718501,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +545.718588,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +545.718597,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +545.718617,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +545.718638,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +545.718682,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +545.718709,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +545.718730,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +545.718880,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +545.719044,54.561260,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","250",,,"spmv3",5483 +545.719120,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +545.773604,53.544636,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","251",,,"spmv3",5493 +545.773693,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +545.827149,4.620600,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","250",,,"sum",5497 +545.827235,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +545.827257,4.620760,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","251",,,"sum",5501 +545.831878,9.247760,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","250",,,"divide",5506 +545.831971,6.913492,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","251",,,"divide",5511 +545.841061,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +545.841117,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +545.841143,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +545.841155,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +545.841164,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +545.841211,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +545.841236,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +545.841256,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +545.841364,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +545.841524,54.575788,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","252",,,"spmv3",5529 +545.841597,0.001984,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +545.896099,53.607963,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","253",,,"spmv3",5539 +545.896197,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +545.949707,4.621528,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","252",,,"sum",5543 +545.949810,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +545.949832,4.620376,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","253",,,"sum",5547 +545.954440,9.289583,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","252",,,"divide",5552 +545.954533,6.889300,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","253",,,"divide",5557 +545.963690,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +545.963768,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +545.963786,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +545.963797,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +545.963818,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +545.963859,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +545.963862,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +545.963889,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +545.963897,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +545.963909,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +545.963954,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +545.963956,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +545.963992,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +545.963993,0.005280,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +553.197056,0.001503,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +553.197106,0.062015,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +553.197222,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +553.197387,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +553.197551,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +553.197715,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +553.197880,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +553.198044,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +553.198208,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +553.198372,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +553.198536,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +553.198701,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +553.198865,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +553.199029,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +553.199193,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +553.199358,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +553.199522,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +553.199686,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +553.199850,0.171165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +553.200023,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +553.200187,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +553.200352,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +553.200517,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +553.200682,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +553.200848,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +553.201012,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +553.201176,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +553.201340,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +553.201505,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +553.201669,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +553.201833,0.039423,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +553.201874,0.142942,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +553.202018,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +553.202183,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +553.202347,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +553.202512,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +553.202676,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +553.202840,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +553.203004,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +553.203169,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +553.203333,0.164573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +553.203499,0.169469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +553.203669,0.173470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +553.203844,0.171357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +553.204017,0.167901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +553.204186,0.165534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +553.204353,0.165341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +553.204520,0.165341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +553.204686,0.164958,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +553.204852,0.169021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +553.205023,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +553.205188,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +553.205353,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +553.205518,0.167582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +553.205687,0.175069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +553.205863,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +553.206028,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +553.206193,0.168413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +553.206363,0.165950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +553.206530,0.166333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +553.206697,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +553.206871,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +553.207036,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +553.207201,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +553.207366,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +553.207531,0.183837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +553.207716,0.217149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +553.207934,0.206077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +553.208142,0.205693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +553.208349,0.210621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +553.208561,0.213949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +553.208776,0.209660,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +553.208987,0.207677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +553.209196,0.217501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +553.209415,0.205308,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +553.209622,0.213629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +553.209837,0.227068,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +553.210065,0.219837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +553.210286,0.210589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +553.210498,0.198301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +553.210697,0.224284,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +553.210923,0.184509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +553.211109,0.166878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +553.211277,0.169885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +553.211448,0.203485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +553.211653,0.209084,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +553.211863,0.209533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +553.212074,0.206877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +553.212282,0.209149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +553.212493,0.206844,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +553.212701,0.210429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +553.212913,0.206269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +553.213120,0.200637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +553.213322,0.222972,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +553.213547,0.207709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +553.213756,0.222396,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +553.213979,0.213053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +553.214194,0.208989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +553.214405,0.210428,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +553.214616,0.196957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +553.214814,0.174750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +553.214990,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +553.215156,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +553.215322,0.166398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +553.215489,0.167069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +553.215658,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +553.215822,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +553.215986,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +553.216152,0.165566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +553.216319,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +553.216485,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +553.216650,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +553.216815,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +553.216979,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +553.217144,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +553.217308,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +553.217474,0.178845,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +553.217654,0.025952,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +553.217682,0.200156,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +553.217883,0.195485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +553.218080,0.196893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +553.218279,0.199229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +553.218479,0.202493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +553.218683,0.207677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +553.218892,0.202237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +553.219095,0.201116,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +553.219298,0.194013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +553.219493,0.201373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +553.219696,0.208061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +553.219905,0.198045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +553.220105,0.193693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +553.220300,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +553.220464,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +553.220637,0.188318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +553.220826,0.191837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +553.221020,0.192573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +553.221214,0.197853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +553.221413,0.195933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +553.221610,0.187869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +553.221799,0.196381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +553.221997,0.196765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +553.222195,0.184893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +553.222382,0.192509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +553.222575,0.188477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +553.222765,0.194045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +553.222961,0.182685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +553.223145,0.173054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +553.223319,0.178589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +553.223499,0.177789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +553.223678,0.174429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +553.223854,0.181213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +553.224036,0.177502,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +553.224215,0.180829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +553.224397,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +553.224579,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +553.224761,0.177405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +553.224940,0.181085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +553.225122,0.185246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +553.225309,0.174461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +553.225485,0.172829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +553.225659,0.177213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +553.225837,0.176990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +553.226016,0.177726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +553.226195,0.178845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +553.226375,0.176669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +553.226553,0.174109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +553.226728,0.174846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +553.226904,0.175293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +553.227081,0.178813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +553.227261,0.173629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +553.227436,0.173150,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +553.227610,0.172925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +553.227784,0.174973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +553.227960,0.174525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +553.228136,0.173854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +553.228311,0.172029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +553.228485,0.171165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +553.228657,0.171582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +553.228830,0.174493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +553.229006,0.173821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +553.229181,0.176413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +553.229358,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +553.229542,0.179070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +553.229722,0.182077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +553.229905,0.181021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +553.230088,0.177501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +553.230266,0.167262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +553.230435,0.176989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +553.230614,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +553.230779,0.178557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +553.230959,0.165438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +553.231125,0.172221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +553.231299,0.179549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +553.231480,0.171806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +553.231653,0.164798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +553.231819,0.172861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +553.231993,0.170782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +553.232165,0.169534,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +553.232336,0.166077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +553.232503,0.168670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +553.232673,0.168637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +553.232844,0.170237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +553.233015,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +553.233194,0.125854,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +553.233322,0.176318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +553.233499,0.168093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +553.233669,0.169661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +553.233840,0.169918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +553.234011,0.166557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +553.234179,0.168445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +553.234348,0.171934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +553.234521,0.176285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +553.234699,0.177565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +553.234878,0.175421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +553.235054,0.179742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +553.235235,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +553.235416,0.173725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +553.235591,0.169533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +553.235762,0.175038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +553.235938,0.168477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +553.236108,0.166237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +553.236276,0.170270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +553.236447,0.176125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +553.236624,0.179997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +553.236806,0.176477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +553.236983,0.177182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +553.237162,0.177950,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +553.237341,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +553.237522,0.168157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +553.237691,0.168446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +553.237861,0.176989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +553.238039,0.167805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +553.238208,0.104703,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +553.238314,0.107646,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +553.238423,0.173693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +553.238598,0.176701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +553.238776,0.175838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +553.238953,0.194301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +553.239149,0.186078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +553.239336,0.188509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +553.239526,0.184637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +553.239712,0.188061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +553.239902,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +553.240084,0.186397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +553.240271,0.187709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +553.240460,0.190205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +553.240652,0.186333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +553.240840,0.169309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +553.241010,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +553.241175,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +553.241339,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +553.241504,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +553.241669,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +553.241833,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +553.241998,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +553.242163,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +553.242327,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +553.242492,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +553.242656,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +553.242821,0.172125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +553.242994,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +553.243158,0.160701,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +553.243752,65.964413,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","254",,,"spmv3",5577 +553.243949,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +553.244057,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +553.244222,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +553.244387,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +553.244553,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +553.244719,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +553.244884,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +553.245051,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +553.245218,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +553.245384,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +553.245549,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +553.245715,0.165309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +553.245882,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +553.246047,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +553.246214,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +553.246379,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +553.246545,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +553.246711,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +553.246877,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +553.247043,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +553.247209,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +553.247375,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +553.247541,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +553.247708,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +553.247874,0.172574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +553.248048,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +553.248214,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +553.248380,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +553.248545,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +553.248711,0.100383,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +553.248814,0.123166,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +553.248939,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +553.249104,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +553.249271,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +553.249437,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +553.249602,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +553.249767,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +553.249933,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +553.250100,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +553.250266,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +553.250432,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +553.250598,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +553.250764,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +553.250929,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +553.251094,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +553.251259,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +553.251425,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +553.251590,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +553.251756,0.171997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +553.251930,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +553.252095,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +553.252261,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +553.252427,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +553.252594,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +553.252759,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +553.252925,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +553.253090,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +553.253257,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +553.253423,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +553.253590,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +553.253756,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +553.253921,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +553.254087,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +553.254253,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +553.254419,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +553.254585,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +553.254751,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +553.254917,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +553.255083,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +553.255248,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +553.255414,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +553.255581,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +553.255746,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +553.255912,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +553.256078,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +553.256243,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +553.256409,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +553.256575,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +553.256740,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +553.256905,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +553.257073,0.168509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +553.257245,0.169693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +553.257416,0.169470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +553.257588,0.168413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +553.257759,0.168157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +553.257930,0.166494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +553.258098,0.164765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +553.258264,0.166814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +553.258433,0.169438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +553.258606,0.167581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +553.258776,0.167358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +553.258945,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +553.259113,0.166301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +553.259282,0.166462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +553.259450,0.167965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +553.259621,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +553.259790,0.176638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +553.259969,0.166302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +553.260138,0.165469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +553.260305,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +553.260472,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +553.260638,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +553.260805,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +553.260971,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +553.261137,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +553.261303,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +553.261469,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +553.261634,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +553.261799,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +553.261965,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +553.262130,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +553.262297,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +553.262464,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +553.262629,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +553.262796,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +553.262962,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +553.263128,0.014688,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +553.263146,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +553.263312,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +553.263479,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +553.263644,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +553.263810,0.172189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +553.263984,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +553.264152,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +553.264317,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +553.264484,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +553.264649,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +553.264814,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +553.264980,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +553.265147,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +553.265313,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +553.265478,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +553.265644,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +553.265809,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +553.265976,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +553.266142,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +553.266306,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +553.266472,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +553.266637,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +553.266803,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +553.266967,0.164414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +553.267134,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +553.267300,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +553.267465,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +553.267631,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +553.267797,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +553.267962,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +553.268127,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +553.268294,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +553.268461,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +553.268627,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +553.268793,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +553.268958,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +553.269124,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +553.269289,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +553.269455,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +553.269621,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +553.269787,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +553.269953,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +553.270119,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +553.270284,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +553.270449,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +553.270615,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +553.270780,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +553.270946,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +553.271111,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +553.271277,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +553.271443,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +553.271609,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +553.271774,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +553.271939,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +553.272105,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +553.272271,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +553.272437,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +553.272602,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +553.272769,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +553.272934,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +553.273100,0.164957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +553.273267,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +553.273433,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +553.273598,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +553.273762,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +553.273927,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +553.274093,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +553.274259,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +553.274426,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +553.274593,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +553.274759,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +553.274924,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +553.275089,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +553.275256,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +553.275422,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +553.275588,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +553.275752,0.165278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +553.275920,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +553.276086,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +553.276252,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +553.276417,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +553.276583,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +553.276748,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +553.276913,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +553.277079,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +553.277244,0.136510,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +553.277383,0.042783,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +553.277427,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +553.277592,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +553.277758,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +553.277924,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +553.278090,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +553.278257,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +553.278422,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +553.278588,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +553.278754,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +553.278920,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +553.279086,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +553.279253,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +553.279418,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +553.279585,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +553.279751,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +553.279918,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +553.280083,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +553.280249,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +553.280414,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +553.280581,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +553.280747,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +553.280914,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +553.281080,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +553.281245,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +553.281411,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +553.281577,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +553.281745,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +553.281911,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +553.282076,0.060223,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +553.282139,0.062655,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +553.282204,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +553.282369,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +553.282536,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +553.282702,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +553.282867,0.164190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +553.283033,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +553.283199,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +553.283365,0.164446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +553.283531,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +553.283697,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +553.283864,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +553.284030,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +553.284198,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +553.284363,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +553.284529,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +553.284695,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +553.284861,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +553.285027,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +553.285193,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +553.285358,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +553.285525,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +553.285691,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +553.285856,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +553.286022,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +553.286189,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +553.286355,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +553.286521,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +553.286687,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +553.286853,0.039807,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +553.309716,55.590654,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","255",,,"spmv3",5587 +553.309823,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +553.365306,5.267054,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","254",,,"sum",5591 +553.365364,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +553.365387,5.242447,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","255",,,"sum",5595 +553.370681,10.309055,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","254",,,"divide",5600 +553.370702,7.725543,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","255",,,"divide",5605 +553.380931,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +553.381028,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +553.381032,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +553.381086,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +553.381127,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +553.381138,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +553.381183,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +553.381234,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +553.381375,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +553.381532,54.776586,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","256",,,"spmv3",5623 +553.381604,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +553.436308,53.765755,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","257",,,"spmv3",5633 +553.436411,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +553.490073,4.846388,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","256",,,"sum",5637 +553.490172,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +553.490195,4.845908,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","257",,,"sum",5641 +553.495035,9.671753,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","256",,,"divide",5646 +553.495171,7.168113,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","257",,,"divide",5651 +553.504665,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +553.504766,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +553.504770,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +553.504826,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +553.504868,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +553.504878,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +553.504923,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +553.504974,0.001280,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +553.505147,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +553.505337,54.735627,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","258",,,"spmv3",5669 +553.505406,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +553.560072,53.542206,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","259",,,"spmv3",5679 +553.560186,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +553.613613,4.619256,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","258",,,"sum",5683 +553.613751,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +553.613774,4.618456,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","259",,,"sum",5687 +553.618374,9.285807,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","258",,,"divide",5692 +553.618467,6.890229,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","259",,,"divide",5697 +553.627608,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +553.627706,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +553.627707,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +553.627760,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +553.627803,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +553.627809,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +553.627857,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +553.627905,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +553.628073,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +553.628269,54.555758,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","260",,,"spmv3",5715 +553.628341,0.002016,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +553.682824,53.550109,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","261",,,"spmv3",5725 +553.682939,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +553.736373,4.619321,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","260",,,"sum",5729 +553.736509,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +553.736531,4.619448,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","261",,,"sum",5733 +553.741133,9.268304,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","260",,,"divide",5738 +553.741250,6.914580,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","261",,,"divide",5743 +553.750367,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +553.750467,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +553.750470,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +553.750526,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +553.750567,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +553.750580,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +553.750623,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +553.750676,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +553.751154,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +553.751351,54.581102,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","262",,,"spmv3",5761 +553.751424,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +553.805931,53.557117,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","263",,,"spmv3",5771 +553.806054,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +553.859488,4.625880,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","262",,,"sum",5775 +553.859601,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +553.859623,4.617976,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","263",,,"sum",5779 +553.864262,9.247664,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","262",,,"divide",5784 +553.864355,6.909492,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","263",,,"divide",5789 +553.873439,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +553.873532,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +553.873538,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +553.873592,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +553.873630,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +553.873643,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +553.873689,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +553.873714,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +553.873739,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +553.873785,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +553.873815,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +553.873816,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +553.873886,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +553.873887,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +561.077196,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +561.077246,0.061471,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +561.077362,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +561.077525,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +561.077690,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +561.077854,0.172189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +561.078027,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +561.078191,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +561.078355,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +561.078519,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +561.078684,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +561.078847,0.171358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +561.079020,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +561.079184,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +561.079348,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +561.079512,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +561.079676,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +561.079840,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +561.080004,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +561.080168,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +561.080332,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +561.080497,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +561.080661,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +561.080825,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +561.080989,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +561.081155,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +561.081319,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +561.081483,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +561.081648,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +561.081812,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +561.081977,0.039424,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +561.082017,0.142590,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +561.082161,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +561.082326,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +561.082489,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +561.082654,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +561.082818,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +561.082983,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +561.083147,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +561.083311,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +561.083476,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +561.083639,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +561.083804,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +561.083969,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +561.084136,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +561.084305,0.166110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +561.084472,0.168061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +561.084641,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +561.084807,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +561.084972,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +561.085137,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +561.085301,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +561.085467,0.165246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +561.085633,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +561.085800,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +561.085966,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +561.086132,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +561.086297,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +561.086462,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +561.086627,0.164765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +561.086793,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +561.086958,0.168765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +561.087128,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +561.087328,0.200797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +561.087530,0.207933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +561.087739,0.207580,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +561.087948,0.209885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +561.088159,0.216349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +561.088377,0.204125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +561.088582,0.205308,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +561.088788,0.214493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +561.089004,0.207933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +561.089213,0.203485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +561.089418,0.210940,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +561.089630,0.214045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +561.089845,0.206557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +561.090053,0.210812,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +561.090265,0.167358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +561.090434,0.164413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +561.090599,0.178973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +561.090779,0.207709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +561.090988,0.200989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +561.091191,0.203517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +561.091396,0.205885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +561.091603,0.225117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +561.091829,0.214493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +561.092045,0.214076,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +561.092260,0.219421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +561.092481,0.211773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +561.092694,0.216061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +561.092911,0.213053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +561.093126,0.205181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +561.093332,0.222844,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +561.093556,0.204093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +561.093762,0.177565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +561.093940,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +561.094104,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +561.094269,0.165533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +561.094435,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +561.094600,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +561.094764,0.171550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +561.094936,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +561.095101,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +561.095265,0.166974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +561.095433,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +561.095597,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +561.095761,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +561.095934,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +561.096098,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +561.096262,0.173277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +561.096437,0.198621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +561.096637,0.195293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +561.096833,0.208765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +561.097044,0.200989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +561.097246,0.199964,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +561.097447,0.193213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +561.097641,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +561.097833,0.024768,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +561.097859,0.188829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +561.098049,0.193501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +561.098244,0.197597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +561.098443,0.191389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +561.098636,0.165885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +561.098803,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +561.098990,0.192669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +561.099184,0.194621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +561.099380,0.194269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +561.099576,0.200317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +561.099777,0.191773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +561.099970,0.194237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +561.100166,0.206909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +561.100374,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +561.100564,0.191325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +561.100757,0.212349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +561.100970,0.199452,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +561.101171,0.189981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +561.101363,0.180030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +561.101544,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +561.101729,0.187261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +561.101918,0.180989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +561.102100,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +561.102288,0.190077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +561.102479,0.191805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +561.102672,0.188893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +561.102862,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +561.103049,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +561.103234,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +561.103418,0.179230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +561.103599,0.185789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +561.103786,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +561.103971,0.186781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +561.104159,0.190813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +561.104351,0.190813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +561.104543,0.184381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +561.104729,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +561.104913,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +561.105096,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +561.105282,0.186205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +561.105469,0.180126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +561.105651,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +561.105834,0.194717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +561.106030,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +561.106212,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +561.106394,0.179133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +561.106575,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +561.106755,0.181310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +561.106938,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +561.107126,0.175773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +561.107303,0.183997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +561.107488,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +561.107668,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +561.107851,0.183677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +561.108036,0.178398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +561.108215,0.168349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +561.108385,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +561.108565,0.168478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +561.108735,0.171357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +561.108908,0.169149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +561.109078,0.176189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +561.109255,0.177822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +561.109435,0.170973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +561.109607,0.168893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +561.109777,0.181918,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +561.109960,0.168606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +561.110130,0.170941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +561.110302,0.166846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +561.110470,0.169629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +561.110641,0.169117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +561.110811,0.175677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +561.110988,0.183326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +561.111172,0.177277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +561.111351,0.170877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +561.111523,0.168446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +561.111693,0.170142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +561.111864,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +561.112032,0.168030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +561.112202,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +561.112375,0.177085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +561.112554,0.174685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +561.112730,0.179486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +561.112910,0.190589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +561.113102,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +561.113284,0.173757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +561.113459,0.121246,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +561.113582,0.169949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +561.113753,0.167230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +561.113922,0.166461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +561.114089,0.170845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +561.114261,0.175070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +561.114438,0.176029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +561.114615,0.176541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +561.114792,0.180509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +561.114974,0.179998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +561.115156,0.175229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +561.115332,0.168957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +561.115502,0.170013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +561.115673,0.167774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +561.115842,0.168541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +561.116012,0.170366,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +561.116183,0.177565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +561.116362,0.177437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +561.116541,0.189437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +561.116732,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +561.116917,0.186205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +561.117104,0.190653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +561.117296,0.187197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +561.117485,0.185757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +561.117672,0.187997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +561.117861,0.188701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +561.118051,0.196893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +561.118250,0.185533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +561.118436,0.171070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +561.118609,0.099934,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +561.118710,0.102143,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +561.118813,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +561.118977,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +561.119141,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +561.119306,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +561.119470,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +561.119634,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +561.119798,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +561.119962,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +561.120127,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +561.120291,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +561.120455,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +561.120619,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +561.120783,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +561.120948,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +561.121111,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +561.121275,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +561.121439,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +561.121604,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +561.121768,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +561.121931,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +561.122095,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +561.122260,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +561.122424,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +561.122589,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +561.122753,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +561.122917,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +561.123081,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +561.123246,0.160765,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +561.123868,64.695122,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","264",,,"spmv3",5809 +561.124062,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +561.124166,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +561.124331,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +561.124496,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +561.124663,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +561.124828,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +561.124993,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +561.125159,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +561.125324,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +561.125489,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +561.125655,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +561.125820,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +561.125985,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +561.126151,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +561.126316,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +561.126481,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +561.126647,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +561.126812,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +561.126977,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +561.127142,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +561.127308,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +561.127475,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +561.127641,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +561.127807,0.164606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +561.127974,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +561.128140,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +561.128305,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +561.128472,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +561.128637,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +561.128803,0.099966,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +561.128906,0.123742,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +561.129032,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +561.129198,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +561.129364,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +561.129529,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +561.129695,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +561.129861,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +561.130027,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +561.130193,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +561.130358,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +561.130524,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +561.130690,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +561.130856,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +561.131022,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +561.131187,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +561.131354,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +561.131520,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +561.131685,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +561.131850,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +561.132016,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +561.132182,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +561.132348,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +561.132514,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +561.132679,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +561.132846,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +561.133011,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +561.133175,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +561.133340,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +561.133506,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +561.133672,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +561.133838,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +561.134004,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +561.134170,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +561.134337,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +561.134503,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +561.134668,0.168093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +561.134839,0.169085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +561.135010,0.167198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +561.135179,0.168669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +561.135349,0.168637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +561.135521,0.166270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +561.135690,0.166333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +561.135860,0.166205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +561.136028,0.166654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +561.136197,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +561.136366,0.167773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +561.136536,0.167134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +561.136705,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +561.136873,0.165790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +561.137041,0.166269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +561.137210,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +561.137378,0.165182,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +561.137545,0.165789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +561.137713,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +561.137879,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +561.138044,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +561.138211,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +561.138376,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +561.138541,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +561.138707,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +561.138872,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +561.139037,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +561.139202,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +561.139368,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +561.139534,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +561.139700,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +561.139865,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +561.140030,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +561.140196,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +561.140361,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +561.140526,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +561.140691,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +561.140857,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +561.141022,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +561.141187,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +561.141352,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +561.141517,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +561.141684,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +561.141848,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +561.142013,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +561.142178,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +561.142345,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +561.142510,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +561.142676,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +561.142841,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +561.143007,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +561.143171,0.014912,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +561.143189,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +561.143355,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +561.143522,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +561.143687,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +561.143852,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +561.144017,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +561.144184,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +561.144350,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +561.144515,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +561.144680,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +561.144846,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +561.145011,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +561.145176,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +561.145340,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +561.145506,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +561.145671,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +561.145838,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +561.146003,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +561.146170,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +561.146335,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +561.146500,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +561.146668,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +561.146834,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +561.146999,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +561.147165,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +561.147331,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +561.147496,0.164605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +561.147663,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +561.147829,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +561.147994,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +561.148159,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +561.148325,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +561.148491,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +561.148656,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +561.148821,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +561.148985,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +561.149150,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +561.149317,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +561.149482,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +561.149647,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +561.149814,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +561.149979,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +561.150144,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +561.150310,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +561.150475,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +561.150640,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +561.150806,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +561.150971,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +561.151136,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +561.151302,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +561.151468,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +561.151634,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +561.151799,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +561.151965,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +561.152129,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +561.152294,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +561.152459,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +561.152625,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +561.152790,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +561.152957,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +561.153122,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +561.153288,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +561.153453,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +561.153618,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +561.153785,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +561.153950,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +561.154116,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +561.154281,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +561.154447,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +561.154613,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +561.154779,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +561.154945,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +561.155111,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +561.155275,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +561.155442,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +561.155608,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +561.155773,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +561.155938,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +561.156103,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +561.156267,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +561.156433,0.162334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +561.156597,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +561.156764,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +561.156930,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +561.157095,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +561.157260,0.136125,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +561.157399,0.042080,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +561.157443,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +561.157609,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +561.157775,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +561.157941,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +561.158107,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +561.158273,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +561.158439,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +561.158605,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +561.158770,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +561.158935,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +561.159100,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +561.159265,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +561.159431,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +561.159598,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +561.159764,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +561.159931,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +561.160097,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +561.160262,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +561.160428,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +561.160593,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +561.160759,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +561.160924,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +561.161090,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +561.161255,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +561.161421,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +561.161587,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +561.161753,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +561.161918,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +561.162084,0.060127,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +561.162146,0.062079,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +561.162210,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +561.162376,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +561.162541,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +561.162706,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +561.162872,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +561.163038,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +561.163204,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +561.163369,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +561.163535,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +561.163701,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +561.163866,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +561.164032,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +561.164197,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +561.164362,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +561.164527,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +561.164693,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +561.164859,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +561.165023,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +561.165188,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +561.165353,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +561.165519,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +561.165684,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +561.165850,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +561.166015,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +561.166180,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +561.166346,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +561.166512,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +561.166677,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +561.166841,0.039776,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +561.188562,53.512192,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","265",,,"spmv3",5819 +561.188698,0.001952,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +561.242074,4.620792,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","264",,,"sum",5823 +561.242213,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +561.242237,4.618040,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","265",,,"sum",5827 +561.246834,9.284303,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","264",,,"divide",5832 +561.246929,6.905013,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","265",,,"divide",5837 +561.256074,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +561.256180,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +561.256196,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +561.256300,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +561.256410,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +561.256514,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +561.256621,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +561.256725,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +561.257082,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +561.257458,54.511121,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","266",,,"spmv3",5855 +561.257558,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +561.311969,53.567679,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","267",,,"spmv3",5865 +561.312115,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +561.365536,4.620920,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","266",,,"sum",5869 +561.365647,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +561.365670,4.618200,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","267",,,"sum",5873 +561.370295,9.256688,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","266",,,"divide",5878 +561.370412,6.913140,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","267",,,"divide",5883 +561.379480,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +561.379581,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +561.379584,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +561.379635,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +561.379683,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +561.379684,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +561.379736,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +561.379784,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +561.379930,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +561.380093,54.590735,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","268",,,"spmv3",5901 +561.380391,0.002112,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +561.434683,53.580639,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","269",,,"spmv3",5911 +561.434816,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +561.488263,4.620536,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","268",,,"sum",5915 +561.488419,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +561.488441,4.620664,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","269",,,"sum",5919 +561.493020,9.297200,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","268",,,"divide",5924 +561.493197,6.907317,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","269",,,"divide",5929 +561.502272,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +561.502377,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +561.502395,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +561.502452,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +561.502483,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +561.502497,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +561.502553,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +561.502584,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +561.502790,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +561.502960,54.591791,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","270",,,"spmv3",5947 +561.503038,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +561.557552,53.512063,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","271",,,"spmv3",5957 +561.557667,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +561.611063,4.619417,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","270",,,"sum",5961 +561.611184,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +561.611206,4.620184,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","271",,,"sum",5965 +561.615767,9.291344,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","270",,,"divide",5970 +561.615914,6.909397,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","271",,,"divide",5975 +561.625001,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +561.625072,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +561.625102,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +561.625105,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +561.625152,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +561.625174,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +561.625203,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +561.625252,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +561.625389,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +561.625553,54.564624,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","272",,,"spmv3",5993 +561.625658,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +561.680117,53.506496,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","273",,,"spmv3",6003 +561.680202,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +561.733623,4.620248,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","272",,,"sum",6007 +561.733735,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +561.733757,4.619449,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","273",,,"sum",6011 +561.738352,9.292559,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","272",,,"divide",6016 +561.738484,6.905845,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","273",,,"divide",6021 +561.747600,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +561.747703,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +561.747703,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +561.747754,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +561.747804,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +561.747805,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +561.747854,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +561.747875,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +561.747904,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +561.747940,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +561.747979,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +561.747980,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +561.748044,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +561.748046,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +568.996837,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +568.996950,0.061791,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +568.997216,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +568.997482,0.162141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +568.997755,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +568.998020,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +568.998286,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +568.998553,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +568.998824,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +568.999092,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +568.999358,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +568.999630,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +568.999895,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +569.000161,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +569.000426,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +569.000699,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +569.000964,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +569.001231,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +569.001496,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +569.001762,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +569.002024,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +569.002286,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +569.002549,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +569.002819,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +569.003083,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +569.003348,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +569.003617,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +569.003881,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +569.004147,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +569.004410,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +569.004575,0.039584,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +569.004743,0.142846,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +569.005007,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +569.005270,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +569.005535,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +569.005808,0.171838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +569.006058,0.178430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +569.006263,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +569.006468,0.182365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +569.006681,0.186109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +569.006892,0.207293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +569.007100,0.210621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +569.007312,0.205053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +569.007518,0.204605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +569.007724,0.214268,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +569.007940,0.215997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +569.008157,0.212732,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +569.008371,0.214397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +569.008587,0.203005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +569.008791,0.209693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +569.009002,0.212700,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +569.009216,0.180414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +569.009397,0.165501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +569.009564,0.173309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +569.009739,0.202717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +569.009943,0.206173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +569.010150,0.204605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +569.010356,0.208380,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +569.010566,0.205821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +569.010773,0.208957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +569.010983,0.197117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +569.011181,0.204765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +569.011387,0.212028,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +569.011600,0.213053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +569.011815,0.213181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +569.012029,0.218044,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +569.012248,0.208829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +569.012459,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +569.012638,0.164926,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +569.012804,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +569.012969,0.167005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +569.013137,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +569.013301,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +569.013465,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +569.013631,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +569.013795,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +569.013959,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +569.014124,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +569.014289,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +569.014453,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +569.014618,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +569.014783,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +569.014947,0.184125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +569.015132,0.209341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +569.015343,0.200637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +569.015545,0.212669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +569.015759,0.210556,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +569.015970,0.199933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +569.016172,0.197917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +569.016371,0.199261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +569.016571,0.196957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +569.016769,0.199037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +569.016970,0.193853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +569.017165,0.194813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +569.017361,0.188349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +569.017550,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +569.017715,0.187357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +569.017904,0.201853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +569.018107,0.197405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +569.018306,0.204349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +569.018511,0.199325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +569.018712,0.207644,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +569.018921,0.203261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +569.019125,0.203933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +569.019331,0.198045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +569.019530,0.203005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +569.019734,0.204189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +569.019939,0.205052,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +569.020146,0.188669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +569.020335,0.185598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +569.020522,0.184093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +569.020708,0.187933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +569.020897,0.195133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +569.021093,0.188157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +569.021282,0.186973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +569.021471,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +569.021658,0.180893,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +569.021840,0.023584,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +569.021865,0.193917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +569.022060,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +569.022246,0.182493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +569.022430,0.184637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +569.022616,0.185213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +569.022803,0.189341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +569.022993,0.190173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +569.023185,0.192637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +569.023378,0.192189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +569.023572,0.186653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +569.023760,0.183901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +569.023945,0.183581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +569.024130,0.188381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +569.024320,0.182814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +569.024504,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +569.024685,0.183421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +569.024870,0.183485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +569.025055,0.187677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +569.025244,0.183549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +569.025429,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +569.025613,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +569.025801,0.196669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +569.025999,0.189565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +569.026190,0.177630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +569.026368,0.184349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +569.026554,0.185949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +569.026741,0.185917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +569.026928,0.188317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +569.027118,0.181981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +569.027301,0.172829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +569.027475,0.185054,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +569.027661,0.171966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +569.027835,0.180701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +569.028017,0.168445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +569.028186,0.176574,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +569.028364,0.183837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +569.028549,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +569.028733,0.169533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +569.028904,0.175997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +569.029081,0.179550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +569.029262,0.171837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +569.029435,0.169853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +569.029606,0.168734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +569.029776,0.174589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +569.029952,0.168893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +569.030122,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +569.030299,0.182430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +569.030483,0.179261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +569.030663,0.171069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +569.030836,0.170173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +569.031007,0.172446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +569.031181,0.166525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +569.031348,0.167934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +569.031518,0.172637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +569.031691,0.179101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +569.031872,0.177341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +569.032050,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +569.032231,0.179198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +569.032411,0.181981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +569.032594,0.172573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +569.032768,0.170941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +569.032940,0.169630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +569.033111,0.167133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +569.033280,0.168573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +569.033449,0.170846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +569.033621,0.177053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +569.033800,0.174877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +569.033976,0.178078,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +569.034155,0.179453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +569.034336,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +569.034519,0.170237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +569.034690,0.172701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +569.034864,0.174462,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +569.035040,0.167357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +569.035208,0.169117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +569.035379,0.170430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +569.035550,0.179581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +569.035731,0.178205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +569.035910,0.197853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +569.036109,0.186013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +569.036297,0.189277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +569.036487,0.187165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +569.036676,0.185405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +569.036862,0.184542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +569.037048,0.187613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +569.037237,0.130270,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +569.037368,0.199292,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +569.037569,0.185374,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +569.037755,0.176349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +569.037933,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +569.038097,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +569.038261,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +569.038426,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +569.038590,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +569.038754,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +569.038918,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +569.039082,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +569.039246,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +569.039410,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +569.039574,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +569.039738,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +569.039903,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +569.040067,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +569.040231,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +569.040395,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +569.040559,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +569.040724,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +569.040888,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +569.041052,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +569.041216,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +569.041380,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +569.041545,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +569.041709,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +569.041873,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +569.042037,0.100286,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +569.042139,0.102591,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +569.042242,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +569.042407,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +569.042571,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +569.042735,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +569.042899,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +569.043063,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +569.043227,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +569.043391,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +569.043555,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +569.043719,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +569.043884,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +569.044048,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +569.044213,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +569.044377,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +569.044542,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +569.044707,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +569.044870,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +569.045035,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +569.045199,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +569.045363,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +569.045527,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +569.045692,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +569.045856,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +569.046020,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +569.046184,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +569.046349,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +569.046512,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +569.046677,0.160573,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +569.046959,64.630964,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","274",,,"spmv3",6041 +569.047140,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +569.047240,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +569.047406,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +569.047572,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +569.047737,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +569.047904,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +569.048069,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +569.048235,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +569.048400,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +569.048565,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +569.048730,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +569.048894,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +569.049059,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +569.049224,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +569.049389,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +569.049554,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +569.049720,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +569.049887,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +569.050053,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +569.050218,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +569.050384,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +569.050551,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +569.050717,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +569.050882,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +569.051048,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +569.051213,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +569.051379,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +569.051544,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +569.051710,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +569.051875,0.100606,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +569.051979,0.122782,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +569.052104,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +569.052269,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +569.052435,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +569.052601,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +569.052768,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +569.052934,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +569.053100,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +569.053265,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +569.053431,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +569.053596,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +569.053762,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +569.053928,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +569.054095,0.167774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +569.054265,0.171229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +569.054439,0.169533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +569.054611,0.167870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +569.054782,0.168189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +569.054952,0.167677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +569.055123,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +569.055290,0.168893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +569.055462,0.167710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +569.055632,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +569.055801,0.168317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +569.055971,0.169438,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +569.056143,0.165693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +569.056311,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +569.056479,0.166814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +569.056647,0.167837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +569.056818,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +569.056985,0.166110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +569.057154,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +569.057319,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +569.057485,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +569.057651,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +569.057815,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +569.057980,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +569.058146,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +569.058311,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +569.058477,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +569.058642,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +569.058807,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +569.058972,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +569.059137,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +569.059302,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +569.059467,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +569.059633,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +569.059798,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +569.059963,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +569.060130,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +569.060296,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +569.060462,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +569.060627,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +569.060793,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +569.060957,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +569.061122,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +569.061287,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +569.061453,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +569.061618,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +569.061784,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +569.061949,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +569.062115,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +569.062281,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +569.062446,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +569.062611,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +569.062776,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +569.062942,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +569.063106,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +569.063272,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +569.063439,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +569.063604,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +569.063770,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +569.063934,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +569.064100,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +569.064266,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +569.064431,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +569.064596,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +569.064762,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +569.064927,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +569.065091,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +569.065257,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +569.065421,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +569.065586,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +569.065751,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +569.065916,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +569.066082,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +569.066247,0.014656,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +569.066264,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +569.066429,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +569.066595,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +569.066760,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +569.066925,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +569.067090,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +569.067258,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +569.067424,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +569.067589,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +569.067754,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +569.067919,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +569.068084,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +569.068250,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +569.068417,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +569.068582,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +569.068749,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +569.068914,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +569.069080,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +569.069246,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +569.069410,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +569.069576,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +569.069742,0.164862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +569.069910,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +569.070076,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +569.070241,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +569.070406,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +569.070572,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +569.070738,0.164509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +569.070904,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +569.071069,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +569.071234,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +569.071401,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +569.071566,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +569.071732,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +569.071898,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +569.072063,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +569.072228,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +569.072394,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +569.072559,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +569.072724,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +569.072889,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +569.073055,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +569.073220,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +569.073385,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +569.073551,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +569.073717,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +569.073882,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +569.074047,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +569.074212,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +569.074377,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +569.074544,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +569.074711,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +569.074875,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +569.075041,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +569.075206,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +569.075371,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +569.075538,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +569.075703,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +569.075869,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +569.076035,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +569.076202,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +569.076367,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +569.076533,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +569.076697,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +569.076862,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +569.077028,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +569.077194,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +569.077360,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +569.077525,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +569.077689,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +569.077855,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +569.078020,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +569.078186,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +569.078352,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +569.078517,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +569.078683,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +569.078849,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +569.079014,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +569.079180,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +569.079346,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +569.079513,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +569.079678,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +569.079844,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +569.080010,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +569.080176,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +569.080341,0.136350,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +569.080479,0.041823,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +569.080524,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +569.080689,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +569.080854,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +569.081019,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +569.081184,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +569.081350,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +569.081515,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +569.081681,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +569.081846,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +569.082011,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +569.082178,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +569.082342,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +569.082508,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +569.082673,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +569.082838,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +569.083003,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +569.083169,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +569.083334,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +569.083499,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +569.083664,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +569.083828,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +569.083993,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +569.084159,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +569.084324,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +569.084490,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +569.084656,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +569.084822,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +569.084987,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +569.085152,0.059552,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +569.085214,0.062336,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +569.085279,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +569.085444,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +569.085609,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +569.085775,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +569.085941,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +569.086106,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +569.086271,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +569.086437,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +569.086602,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +569.086767,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +569.086933,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +569.087098,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +569.087263,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +569.087429,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +569.087595,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +569.087760,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +569.087926,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +569.088091,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +569.088257,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +569.088423,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +569.088589,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +569.088754,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +569.088920,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +569.089086,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +569.089251,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +569.089416,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +569.089583,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +569.089749,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +569.089914,0.039616,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +569.111590,53.406243,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","275",,,"spmv3",6051 +569.111702,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +569.164995,4.619321,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","274",,,"sum",6055 +569.165084,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +569.165108,4.619000,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","275",,,"sum",6059 +569.169726,9.268560,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","274",,,"divide",6064 +569.169820,6.906324,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","275",,,"divide",6069 +569.178928,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +569.179027,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +569.179037,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +569.179052,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +569.179073,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +569.179134,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +569.179158,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +569.179178,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +569.179291,0.001407,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +569.179452,54.540945,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","276",,,"spmv3",6087 +569.179520,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +569.233992,53.563777,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","277",,,"spmv3",6097 +569.234055,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +569.287555,4.619256,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","276",,,"sum",6101 +569.287640,0.001632,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +569.287663,4.618713,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","277",,,"sum",6105 +569.292287,9.252912,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","276",,,"divide",6110 +569.292376,6.909973,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","277",,,"divide",6115 +569.301468,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +569.301534,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +569.301559,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +569.301579,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +569.301580,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +569.301640,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +569.301665,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +569.301685,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +569.301927,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +569.302091,54.550322,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","278",,,"spmv3",6133 +569.302161,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +569.356640,53.552704,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","279",,,"spmv3",6143 +569.356741,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +569.410193,4.620153,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","278",,,"sum",6147 +569.410308,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +569.410331,4.618457,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","279",,,"sum",6151 +569.414924,9.279888,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","278",,,"divide",6156 +569.415016,6.895381,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","279",,,"divide",6161 +569.424175,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +569.424253,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +569.424279,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +569.424284,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +569.424300,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +569.424360,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +569.424384,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +569.424405,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +569.424560,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +569.424729,54.566961,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","280",,,"spmv3",6179 +569.424810,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +569.479296,53.535329,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","281",,,"spmv3",6189 +569.479355,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +569.532831,4.621592,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","280",,,"sum",6193 +569.532951,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +569.532973,4.619096,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","281",,,"sum",6197 +569.537561,9.274704,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","280",,,"divide",6202 +569.537652,6.891381,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","281",,,"divide",6207 +569.546799,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +569.546908,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +569.546910,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +569.546960,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +569.547008,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +569.547016,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +569.547065,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +569.547113,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +569.547286,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +569.547484,54.599345,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","282",,,"spmv3",6225 +569.547555,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +569.602083,53.574464,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","283",,,"spmv3",6235 +569.602142,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +569.655656,4.618617,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","282",,,"sum",6239 +569.655740,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +569.655762,4.618040,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","283",,,"sum",6243 +569.660386,9.258128,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","282",,,"divide",6248 +569.660474,6.913396,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","283",,,"divide",6253 +569.669562,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +569.669642,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +569.669669,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +569.669695,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +569.669742,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +569.669748,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +569.669780,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +569.669799,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +569.669818,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +569.669846,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +569.669889,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +569.669890,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +569.669926,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +569.669927,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +576.870018,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +576.870065,0.061791,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +576.870171,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +576.870334,0.165342,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +576.870501,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +576.870665,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +576.870828,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +576.870993,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +576.871157,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +576.871321,0.164797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +576.871487,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +576.871652,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +576.871816,0.162398,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +576.871980,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +576.872146,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +576.872311,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +576.872477,0.188637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +576.872667,0.200189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +576.872868,0.192605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +576.873062,0.194621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +576.873258,0.193341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +576.873453,0.192029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +576.873646,0.197341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +576.873844,0.195293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +576.874041,0.189981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +576.874232,0.200285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +576.874434,0.193565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +576.874629,0.187774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +576.874818,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +576.874982,0.180733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +576.875164,0.045951,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +576.875211,0.175134,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +576.875388,0.196605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +576.875586,0.200732,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +576.875788,0.200829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +576.875990,0.198493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +576.876190,0.191421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +576.876382,0.196797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +576.876581,0.199357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +576.876781,0.199997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +576.876982,0.197789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +576.877182,0.198045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +576.877381,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +576.877565,0.181533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +576.877748,0.177789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +576.877927,0.183837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +576.878112,0.184478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +576.878298,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +576.878478,0.179741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +576.878659,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +576.878842,0.183837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +576.879027,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +576.879213,0.181277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +576.879396,0.177278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +576.879574,0.178109,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +576.879753,0.182525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +576.879937,0.181341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +576.880120,0.183261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +576.880304,0.180062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +576.880485,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +576.880668,0.180509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +576.880850,0.174653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +576.881026,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +576.881210,0.176766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +576.881388,0.185021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +576.881574,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +576.881756,0.177981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +576.881935,0.179389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +576.882116,0.177214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +576.882294,0.179070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +576.882474,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +576.882662,0.182941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +576.882847,0.179261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +576.883027,0.180765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +576.883209,0.179421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +576.883390,0.184638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +576.883575,0.174429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +576.883751,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +576.883933,0.181149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +576.884116,0.180861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +576.884298,0.181726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +576.884481,0.182717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +576.884664,0.176701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +576.884842,0.170237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +576.885014,0.177278,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +576.885192,0.167837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +576.885361,0.178397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +576.885541,0.166878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +576.885709,0.172190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +576.885882,0.177597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +576.886061,0.173917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +576.886236,0.168094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +576.886405,0.172477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +576.886579,0.175197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +576.886755,0.168542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +576.886925,0.181181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +576.887108,0.166013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +576.887275,0.170494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +576.887447,0.169181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +576.887617,0.170493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +576.887789,0.173566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +576.887963,0.181790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +576.888146,0.178205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +576.888326,0.176893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +576.888504,0.174525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +576.888680,0.177470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +576.888858,0.173917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +576.889034,0.169821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +576.889205,0.173886,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +576.889380,0.177597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +576.889559,0.180285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +576.889740,0.179325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +576.889921,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +576.890111,0.185085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +576.890297,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +576.890482,0.186110,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +576.890669,0.170846,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +576.890841,0.023903,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +576.890867,0.178494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +576.891046,0.174013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +576.891221,0.175229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +576.891398,0.179709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +576.891579,0.184414,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +576.891764,0.190334,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +576.891956,0.188893,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +576.892146,0.183101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +576.892330,0.184061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +576.892515,0.182461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +576.892699,0.183581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +576.892884,0.185981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +576.893071,0.177981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +576.893250,0.178622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +576.893430,0.176157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +576.893608,0.175869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +576.893785,0.186077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +576.893972,0.176093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +576.894149,0.185022,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +576.894336,0.184509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +576.894522,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +576.894706,0.205981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +576.894913,0.199901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +576.895115,0.195325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +576.895311,0.193437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +576.895506,0.188413,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +576.895696,0.187614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +576.895884,0.190365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +576.896076,0.188605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +576.896266,0.199517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +576.896466,0.192765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +576.896660,0.187326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +576.896849,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +576.897013,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +576.897178,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +576.897342,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +576.897505,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +576.897670,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +576.897834,0.162302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +576.897997,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +576.898162,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +576.898326,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +576.898490,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +576.898654,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +576.898819,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +576.898983,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +576.899148,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +576.899311,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +576.899476,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +576.899640,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +576.899805,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +576.899969,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +576.900133,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +576.900297,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +576.900461,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +576.900626,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +576.900790,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +576.900954,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +576.901118,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +576.901282,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +576.901446,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +576.901610,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +576.901775,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +576.901939,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +576.902104,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +576.902268,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +576.902432,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +576.902596,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +576.902760,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +576.902925,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +576.903089,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +576.903254,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +576.903418,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +576.903582,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +576.903746,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +576.903910,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +576.904075,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +576.904239,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +576.904403,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +576.904568,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +576.904731,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +576.904895,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +576.905059,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +576.905224,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +576.905388,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +576.905552,0.115711,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +576.905669,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +576.905833,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +576.905997,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +576.906161,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +576.906325,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +576.906490,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +576.906654,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +576.906819,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +576.906984,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +576.907148,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +576.907312,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +576.907476,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +576.907640,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +576.907805,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +576.907969,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +576.908133,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +576.908297,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +576.908461,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +576.908626,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +576.908790,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +576.908954,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +576.909118,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +576.909282,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +576.909446,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +576.909611,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +576.909775,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +576.909939,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +576.910103,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +576.910267,0.099935,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +576.910368,0.102206,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +576.910472,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +576.910636,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +576.910800,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +576.910965,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +576.911129,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +576.911293,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +576.911457,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +576.911621,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +576.911785,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +576.911950,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +576.912114,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +576.912279,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +576.912443,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +576.912607,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +576.912771,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +576.912935,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +576.913100,0.165566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +576.913267,0.165597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +576.913434,0.166270,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +576.913601,0.165181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +576.913767,0.165629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +576.913934,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +576.914099,0.164829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +576.914265,0.164894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +576.914432,0.165725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +576.914598,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +576.914765,0.165470,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +576.914931,0.161213,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +576.915445,64.583224,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","284",,,"spmv3",6273 +576.915671,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +576.915779,0.165565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +576.915946,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +576.916112,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +576.916276,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +576.916442,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +576.916609,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +576.916774,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +576.916939,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +576.917104,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +576.917270,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +576.917435,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +576.917600,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +576.917765,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +576.917929,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +576.918095,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +576.918261,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +576.918426,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +576.918592,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +576.918757,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +576.918923,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +576.919088,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +576.919254,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +576.919420,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +576.919586,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +576.919752,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +576.919916,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +576.920082,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +576.920248,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +576.920414,0.100830,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +576.920517,0.123230,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +576.920642,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +576.920808,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +576.920973,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +576.921139,0.164157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +576.921307,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +576.921472,0.164830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +576.921638,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +576.921804,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +576.921970,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +576.922137,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +576.922301,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +576.922466,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +576.922632,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +576.922797,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +576.922961,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +576.923127,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +576.923293,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +576.923458,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +576.923624,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +576.923789,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +576.923954,0.164637,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +576.924122,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +576.924288,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +576.924452,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +576.924617,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +576.924781,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +576.924948,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +576.925114,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +576.925279,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +576.925444,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +576.925610,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +576.925775,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +576.925940,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +576.926107,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +576.926272,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +576.926437,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +576.926603,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +576.926767,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +576.926932,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +576.927099,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +576.927265,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +576.927431,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +576.927596,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +576.927761,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +576.927927,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +576.928091,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +576.928256,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +576.928422,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +576.928588,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +576.928752,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +576.928917,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +576.929082,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +576.929248,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +576.929414,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +576.929580,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +576.929745,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +576.929910,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +576.930074,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +576.930240,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +576.930405,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +576.930570,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +576.930735,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +576.930900,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +576.931065,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +576.931230,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +576.931397,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +576.931562,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +576.931727,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +576.931893,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +576.932058,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +576.932223,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +576.932387,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +576.932553,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +576.932718,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +576.932885,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +576.933050,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +576.933215,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +576.933380,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +576.933545,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +576.933711,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +576.933875,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +576.934041,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +576.934207,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +576.934373,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +576.934538,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +576.934704,0.014624,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +576.934722,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +576.934887,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +576.935053,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +576.935219,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +576.935384,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +576.935550,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +576.935716,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +576.935882,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +576.936047,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +576.936212,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +576.936376,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +576.936542,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +576.936707,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +576.936872,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +576.937037,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +576.937202,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +576.937368,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +576.937534,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +576.937699,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +576.937864,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +576.938030,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +576.938195,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +576.938360,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +576.938526,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +576.938690,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +576.938855,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +576.939021,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +576.939186,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +576.939351,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +576.939517,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +576.939683,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +576.939848,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +576.940015,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +576.940180,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +576.940347,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +576.940512,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +576.940678,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +576.940844,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +576.941010,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +576.941175,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +576.941340,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +576.941506,0.166558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +576.941674,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +576.941840,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +576.942006,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +576.942170,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +576.942337,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +576.942502,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +576.942668,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +576.942833,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +576.942999,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +576.943164,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +576.943330,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +576.943495,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +576.943661,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +576.943826,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +576.943992,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +576.944157,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +576.944323,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +576.944490,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +576.944655,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +576.944820,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +576.944986,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +576.945151,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +576.945316,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +576.945481,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +576.945647,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +576.945812,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +576.945978,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +576.946144,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +576.946309,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +576.946475,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +576.946640,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +576.946805,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +576.946971,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +576.947137,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +576.947304,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +576.947469,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +576.947634,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +576.947800,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +576.947965,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +576.948131,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +576.948297,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +576.948462,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +576.948628,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +576.948792,0.136158,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +576.948931,0.041792,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +576.948975,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +576.949141,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +576.949307,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +576.949472,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +576.949637,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +576.949803,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +576.949968,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +576.950133,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +576.950299,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +576.950465,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +576.950631,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +576.950796,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +576.950961,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +576.951126,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +576.951290,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +576.951455,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +576.951620,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +576.951785,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +576.951951,0.164062,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +576.952117,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +576.952282,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +576.952448,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +576.952614,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +576.952779,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +576.952945,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +576.953111,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +576.953275,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +576.953441,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +576.953606,0.060351,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +576.953668,0.061983,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +576.953733,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +576.953899,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +576.954064,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +576.954229,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +576.954394,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +576.954560,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +576.954726,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +576.954892,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +576.955057,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +576.955223,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +576.955389,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +576.955555,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +576.955720,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +576.955885,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +576.956052,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +576.956218,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +576.956384,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +576.956550,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +576.956715,0.164286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +576.956881,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +576.957047,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +576.957213,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +576.957378,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +576.957544,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +576.957710,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +576.957876,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +576.958041,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +576.958206,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +576.958373,0.039487,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +576.980028,53.370981,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","285",,,"spmv3",6283 +576.980151,0.001856,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +577.033398,4.619544,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","284",,,"sum",6287 +577.033510,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +577.033534,4.619192,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","285",,,"sum",6291 +577.038160,9.250097,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","284",,,"divide",6296 +577.038253,6.901781,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","285",,,"divide",6301 +577.047334,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +577.047435,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +577.047448,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +577.047503,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +577.047547,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +577.047553,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +577.047612,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +577.047663,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +577.047798,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +577.047986,54.465684,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","286",,,"spmv3",6319 +577.048048,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +577.102451,53.436292,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","287",,,"spmv3",6329 +577.102566,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +577.155887,4.619513,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","286",,,"sum",6333 +577.156001,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +577.156024,4.618968,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","287",,,"sum",6337 +577.160643,9.257457,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","286",,,"divide",6342 +577.160780,6.904629,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","287",,,"divide",6347 +577.169824,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +577.169915,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +577.169937,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +577.169968,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +577.170016,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +577.170026,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +577.170078,0.001183,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +577.170126,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +577.170264,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +577.170457,54.550547,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","288",,,"spmv3",6365 +577.170522,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +577.225007,53.546115,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","289",,,"spmv3",6375 +577.225123,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +577.278552,4.620792,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","288",,,"sum",6379 +577.278663,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +577.278686,4.620504,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","289",,,"sum",6383 +577.283329,9.256624,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","288",,,"divide",6388 +577.283414,6.910037,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","289",,,"divide",6393 +577.292549,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +577.292666,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +577.292671,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +577.292726,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +577.292777,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +577.292782,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +577.292837,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +577.292887,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +577.293088,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +577.293288,54.521556,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","290",,,"spmv3",6411 +577.293382,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +577.347809,53.506435,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","291",,,"spmv3",6421 +577.347927,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +577.401315,4.621560,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","290",,,"sum",6425 +577.401427,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +577.401450,4.619033,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","291",,,"sum",6429 +577.406091,9.255344,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","290",,,"divide",6434 +577.406198,6.911509,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","291",,,"divide",6439 +577.415257,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +577.415339,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +577.415368,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +577.415390,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +577.415440,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +577.415449,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +577.415499,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +577.415549,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +577.415670,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +577.415857,54.577651,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","292",,,"spmv3",6457 +577.415916,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +577.470434,53.570402,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","293",,,"spmv3",6467 +577.470560,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +577.524004,4.618840,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","292",,,"sum",6471 +577.524143,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +577.524165,4.618553,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","293",,,"sum",6475 +577.528760,9.283344,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","292",,,"divide",6480 +577.528868,6.910101,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","293",,,"divide",6485 +577.537985,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +577.538088,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +577.538098,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +577.538139,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +577.538186,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +577.538198,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +577.538248,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +577.538257,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +577.538294,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +577.538322,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +577.538370,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +577.538371,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +577.538435,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +577.538436,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +584.757139,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +584.757187,0.061695,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +584.757298,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +584.757463,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +584.757627,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +584.757791,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +584.757955,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +584.758119,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +584.758283,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +584.758447,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +584.758611,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +584.758775,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +584.758940,0.171325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +584.759112,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +584.759276,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +584.759441,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +584.759605,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +584.759769,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +584.759933,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +584.760097,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +584.760261,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +584.760425,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +584.760589,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +584.760754,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +584.760918,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +584.761082,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +584.761246,0.162429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +584.761410,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +584.761575,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +584.761739,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +584.761904,0.039295,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +584.761944,0.142654,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +584.762088,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +584.762252,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +584.762416,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +584.762580,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +584.762744,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +584.762909,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +584.763073,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +584.763238,0.165981,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +584.763405,0.165630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +584.763572,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +584.763737,0.165694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +584.763904,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +584.764069,0.162622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +584.764233,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +584.764397,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +584.764561,0.164349,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +584.764727,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +584.764891,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +584.765056,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +584.765220,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +584.765385,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +584.765549,0.164734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +584.765715,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +584.765880,0.164222,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +584.766045,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +584.766209,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +584.766373,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +584.766537,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +584.766702,0.169598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +584.766873,0.210076,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +584.767084,0.209245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +584.767295,0.214749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +584.767511,0.205917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +584.767718,0.213820,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +584.767933,0.210589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +584.768145,0.196477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +584.768343,0.209725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +584.768554,0.208092,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +584.768763,0.210653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +584.768975,0.205277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +584.769182,0.212445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +584.769395,0.199485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +584.769596,0.203388,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +584.769801,0.209181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +584.770011,0.167614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +584.770180,0.164733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +584.770346,0.173245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +584.770520,0.199389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +584.770721,0.201821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +584.770924,0.201437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +584.771127,0.203965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +584.771332,0.204220,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +584.771537,0.194429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +584.771733,0.195165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +584.771930,0.205341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +584.772136,0.205629,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +584.772343,0.202877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +584.772547,0.207677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +584.772756,0.203644,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +584.772961,0.207357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +584.773170,0.190013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +584.773361,0.168286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +584.773531,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +584.773695,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +584.773860,0.166974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +584.774028,0.172765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +584.774202,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +584.774366,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +584.774531,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +584.774696,0.162621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +584.774859,0.164765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +584.775025,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +584.775189,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +584.775354,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +584.775518,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +584.775683,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +584.775847,0.175901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +584.776024,0.206045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +584.776231,0.195965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +584.776429,0.198429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +584.776628,0.194653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +584.776824,0.198652,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +584.777024,0.198077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +584.777223,0.199229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +584.777424,0.181757,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +584.777607,0.025952,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +584.777634,0.194941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +584.777830,0.199517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +584.778031,0.194685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +584.778227,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +584.778392,0.184861,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +584.778578,0.203325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +584.778782,0.203901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +584.778988,0.206301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +584.779195,0.201693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +584.779398,0.195101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +584.779595,0.199965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +584.779796,0.205980,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +584.780003,0.200061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +584.780204,0.198813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +584.780404,0.201245,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +584.780607,0.201309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +584.780809,0.194813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +584.781005,0.187741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +584.781194,0.185341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +584.781381,0.182749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +584.781565,0.186141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +584.781752,0.188189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +584.781942,0.196317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +584.782139,0.190429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +584.782331,0.183805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +584.782516,0.185214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +584.782702,0.181181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +584.782885,0.182877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +584.783069,0.185501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +584.783255,0.182397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +584.783439,0.186525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +584.783627,0.189053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +584.783817,0.186685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +584.784005,0.185437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +584.784191,0.181630,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +584.784374,0.180925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +584.784556,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +584.784740,0.184573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +584.784926,0.177949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +584.785105,0.178877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +584.785285,0.180478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +584.785467,0.181917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +584.785650,0.181661,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +584.785833,0.187805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +584.786022,0.178685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +584.786202,0.180669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +584.786384,0.180382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +584.786566,0.178525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +584.786745,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +584.786930,0.182845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +584.787114,0.183549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +584.787299,0.184189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +584.787484,0.175614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +584.787661,0.170525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +584.787832,0.177533,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +584.788011,0.170622,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +584.788183,0.170429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +584.788355,0.170845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +584.788527,0.177822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +584.788706,0.176734,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +584.788884,0.170077,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +584.789055,0.171197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +584.789227,0.174974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +584.789403,0.166429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +584.789571,0.168541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +584.789741,0.167198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +584.789909,0.179517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +584.790090,0.169757,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +584.790261,0.183486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +584.790446,0.181725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +584.790629,0.183869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +584.790814,0.173597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +584.790989,0.179613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +584.791170,0.172286,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +584.791343,0.167485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +584.791512,0.166621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +584.791680,0.169822,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +584.791851,0.174589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +584.792026,0.185309,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +584.792213,0.180797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +584.792395,0.180638,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +584.792577,0.182013,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +584.792760,0.178525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +584.792940,0.171005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +584.793112,0.169598,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +584.793283,0.118590,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +584.793402,0.166813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +584.793570,0.167774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +584.793739,0.175422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +584.793916,0.177181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +584.794094,0.175645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +584.794271,0.178653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +584.794451,0.179070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +584.794631,0.178205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +584.794811,0.170653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +584.794983,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +584.795162,0.168446,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +584.795331,0.167197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +584.795500,0.168798,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +584.795670,0.177277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +584.795848,0.178301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +584.796028,0.183165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +584.796212,0.200061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +584.796414,0.193565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +584.796608,0.187325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +584.796797,0.189117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +584.796987,0.187421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +584.797176,0.184989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +584.797362,0.183998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +584.797547,0.192670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +584.797741,0.191294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +584.797934,0.180797,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +584.798116,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +584.798280,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +584.798444,0.099966,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +584.798545,0.102494,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +584.798648,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +584.798812,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +584.798976,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +584.799140,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +584.799305,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +584.799469,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +584.799633,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +584.799797,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +584.799961,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +584.800125,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +584.800289,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +584.800454,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +584.800618,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +584.800782,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +584.800947,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +584.801111,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +584.801275,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +584.801439,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +584.801604,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +584.801768,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +584.801933,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +584.802097,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +584.802261,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +584.802425,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +584.802590,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +584.802755,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +584.802918,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +584.803083,0.160925,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +584.803711,64.649944,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","294",,,"spmv3",6505 +584.803899,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +584.804003,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +584.804168,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +584.804335,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +584.804501,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +584.804665,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +584.804831,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +584.804997,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +584.805163,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +584.805327,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +584.805492,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +584.805658,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +584.805823,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +584.805988,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +584.806154,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +584.806319,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +584.806485,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +584.806650,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +584.806815,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +584.806980,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +584.807145,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +584.807311,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +584.807477,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +584.807642,0.164478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +584.807809,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +584.807975,0.164669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +584.808142,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +584.808307,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +584.808474,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +584.808638,0.099710,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +584.808740,0.122590,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +584.808865,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +584.809031,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +584.809197,0.164541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +584.809363,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +584.809528,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +584.809694,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +584.809860,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +584.810026,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +584.810192,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +584.810357,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +584.810525,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +584.810690,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +584.810856,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +584.811021,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +584.811187,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +584.811353,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +584.811517,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +584.811682,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +584.811848,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +584.812014,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +584.812179,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +584.812345,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +584.812510,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +584.812675,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +584.812840,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +584.813006,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +584.813171,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +584.813336,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +584.813502,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +584.813668,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +584.813833,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +584.813998,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +584.814163,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +584.814330,0.165694,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +584.814498,0.168829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +584.814669,0.169854,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +584.814841,0.170653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +584.815014,0.168957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +584.815186,0.167006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +584.815354,0.166397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +584.815522,0.167293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +584.815692,0.167198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +584.815862,0.167101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +584.816030,0.167102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +584.816199,0.170045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +584.816371,0.167709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +584.816541,0.168254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +584.816711,0.167453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +584.816881,0.167421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +584.817050,0.166206,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +584.817219,0.167901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +584.817389,0.164542,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +584.817555,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +584.817721,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +584.817886,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +584.818052,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +584.818218,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +584.818383,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +584.818549,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +584.818715,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +584.818881,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +584.819047,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +584.819212,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +584.819378,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +584.819544,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +584.819709,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +584.819875,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +584.820041,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +584.820206,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +584.820372,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +584.820537,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +584.820702,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +584.820867,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +584.821032,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +584.821198,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +584.821363,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +584.821529,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +584.821694,0.162430,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +584.821859,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +584.822025,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +584.822190,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +584.822355,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +584.822521,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +584.822688,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +584.822852,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +584.823018,0.014592,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +584.823035,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +584.823201,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +584.823367,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +584.823532,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +584.823698,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +584.823864,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +584.824029,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +584.824194,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +584.824359,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +584.824524,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +584.824689,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +584.824855,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +584.825021,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +584.825187,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +584.825352,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +584.825518,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +584.825683,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +584.825850,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +584.826015,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +584.826181,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +584.826346,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +584.826511,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +584.826676,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +584.826842,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +584.827008,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +584.827173,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +584.827339,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +584.827504,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +584.827670,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +584.827836,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +584.828001,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +584.828167,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +584.828332,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +584.828497,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +584.828664,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +584.828829,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +584.828995,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +584.829161,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +584.829327,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +584.829492,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +584.829658,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +584.829822,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +584.829988,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +584.830154,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +584.830320,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +584.830484,0.162526,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +584.830648,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +584.830814,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +584.830979,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +584.831146,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +584.831311,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +584.831477,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +584.831643,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +584.831809,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +584.831974,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +584.832140,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +584.832305,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +584.832470,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +584.832636,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +584.832801,0.164126,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +584.832966,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +584.833132,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +584.833297,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +584.833462,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +584.833627,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +584.833793,0.163965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +584.833958,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +584.834125,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +584.834290,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +584.834455,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +584.834621,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +584.834788,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +584.834953,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +584.835119,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +584.835284,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +584.835449,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +584.835615,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +584.835780,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +584.835945,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +584.836110,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +584.836275,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +584.836440,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +584.836606,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +584.836772,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +584.836936,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +584.837102,0.135806,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +584.837239,0.041887,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +584.837283,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +584.837449,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +584.837614,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +584.837781,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +584.837946,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +584.838113,0.164125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +584.838278,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +584.838443,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +584.838609,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +584.838774,0.162461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +584.838939,0.162718,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +584.839104,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +584.839270,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +584.839435,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +584.839601,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +584.839767,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +584.839933,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +584.840098,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +584.840263,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +584.840428,0.164382,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +584.840594,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +584.840760,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +584.840926,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +584.841091,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +584.841257,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +584.841422,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +584.841588,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +584.841753,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +584.841919,0.059615,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +584.841981,0.062047,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +584.842045,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +584.842209,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +584.842376,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +584.842541,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +584.842706,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +584.842873,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +584.843039,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +584.843205,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +584.843371,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +584.843536,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +584.843700,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +584.843866,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +584.844032,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +584.844197,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +584.844362,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +584.844528,0.164061,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +584.844694,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +584.844860,0.164254,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +584.845026,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +584.845192,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +584.845357,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +584.845523,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +584.845689,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +584.845854,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +584.846020,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +584.846185,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +584.846351,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +584.846517,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +584.846682,0.039104,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +584.868361,53.403526,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","295",,,"spmv3",6515 +584.868485,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +584.921764,4.619257,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","294",,,"sum",6519 +584.921878,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +584.921900,4.619257,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","295",,,"sum",6523 +584.926520,9.257712,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","294",,,"divide",6528 +584.926646,6.898613,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","295",,,"divide",6533 +584.935701,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +584.935820,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +584.935922,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +584.936039,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +584.936133,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +584.936250,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +584.936309,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +584.936426,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +584.936693,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +584.936978,54.560372,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","296",,,"spmv3",6551 +584.937063,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +584.991538,53.516580,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","297",,,"spmv3",6561 +584.991673,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +585.045054,4.620825,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","296",,,"sum",6565 +585.045167,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +585.045189,4.619417,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","297",,,"sum",6569 +585.049816,9.253393,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","296",,,"divide",6574 +585.049947,6.908533,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","297",,,"divide",6579 +585.058999,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +585.059099,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +585.059117,0.001312,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +585.059156,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +585.059205,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +585.059214,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +585.059270,0.001215,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +585.059319,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +585.059489,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +585.059698,54.575508,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","298",,,"spmv3",6597 +585.059772,0.002592,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +585.114273,53.506308,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","299",,,"spmv3",6607 +585.114387,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +585.167779,4.619353,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","298",,,"sum",6611 +585.167927,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +585.167949,4.619256,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","299",,,"sum",6615 +585.172541,9.270736,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","298",,,"divide",6620 +585.172643,6.909109,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","299",,,"divide",6625 +585.181754,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +585.181861,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +585.181872,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +585.181926,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +585.181976,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +585.181976,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +585.182040,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +585.182090,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +585.182264,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +585.182463,54.540565,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","300",,,"spmv3",6643 +585.182536,0.001600,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +585.237003,53.574947,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","301",,,"spmv3",6653 +585.237122,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +585.290577,4.620505,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","300",,,"sum",6657 +585.290688,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +585.290710,4.618553,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","301",,,"sum",6661 +585.295356,9.258480,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","300",,,"divide",6666 +585.295442,6.904405,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","301",,,"divide",6671 +585.304542,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +585.304642,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +585.304662,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +585.304694,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +585.304740,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +585.304756,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +585.304807,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +585.304854,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +585.305020,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +585.305220,54.644659,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","302",,,"spmv3",6689 +585.305289,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +585.359864,53.362407,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","303",,,"spmv3",6699 +585.359982,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +585.413226,4.619864,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","302",,,"sum",6703 +585.413340,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +585.413362,4.618296,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","303",,,"sum",6707 +585.417982,9.247409,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","302",,,"divide",6712 +585.418097,6.919029,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","303",,,"divide",6717 +585.427128,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +585.427203,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +585.427243,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +585.427255,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +585.427302,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +585.427317,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +585.427368,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +585.427370,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +585.427416,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +585.427437,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +585.427487,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +585.427488,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +585.427553,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +585.427555,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", +592.654559,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +592.654743,0.061567,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1108940000","[Unified Memory Memcpy HtoD]", +592.655148,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +592.655556,0.162301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +592.655967,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +592.656373,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +592.656795,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +592.657208,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +592.657615,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +592.658019,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +592.658415,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +592.658837,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +592.659245,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +592.659675,0.162142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +592.660087,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +592.660499,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +592.660917,0.173117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +592.661272,0.162494,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a800000","[Unified Memory Memcpy HtoD]", +592.661565,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110aa00000","[Unified Memory Memcpy HtoD]", +592.661794,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ac00000","[Unified Memory Memcpy HtoD]", +592.662015,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ae00000","[Unified Memory Memcpy HtoD]", +592.662238,0.162846,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b000000","[Unified Memory Memcpy HtoD]", +592.662459,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b200000","[Unified Memory Memcpy HtoD]", +592.662687,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b400000","[Unified Memory Memcpy HtoD]", +592.662909,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b600000","[Unified Memory Memcpy HtoD]", +592.663132,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110b800000","[Unified Memory Memcpy HtoD]", +592.663353,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ba00000","[Unified Memory Memcpy HtoD]", +592.663580,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110bc00000","[Unified Memory Memcpy HtoD]", +592.663802,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110be00000","[Unified Memory Memcpy HtoD]", +592.664022,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c000000","[Unified Memory Memcpy HtoD]", +592.664186,0.039360,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x110c200000","[Unified Memory Memcpy HtoD]", +592.664282,0.144062,,,,,,,,,,"GeForce GTX 960 (0)",,,1835008.000000,"0x1116e40000","[Unified Memory Memcpy HtoD]", +592.664505,0.167934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117000000","[Unified Memory Memcpy HtoD]", +592.664732,0.167965,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117200000","[Unified Memory Memcpy HtoD]", +592.664956,0.166782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117400000","[Unified Memory Memcpy HtoD]", +592.665179,0.167709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117600000","[Unified Memory Memcpy HtoD]", +592.665403,0.167613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117800000","[Unified Memory Memcpy HtoD]", +592.665630,0.171197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117a00000","[Unified Memory Memcpy HtoD]", +592.665855,0.183517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117c00000","[Unified Memory Memcpy HtoD]", +592.666081,0.212957,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1117e00000","[Unified Memory Memcpy HtoD]", +592.666295,0.208509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118000000","[Unified Memory Memcpy HtoD]", +592.666505,0.208253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118200000","[Unified Memory Memcpy HtoD]", +592.666715,0.207389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118400000","[Unified Memory Memcpy HtoD]", +592.666923,0.207261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118600000","[Unified Memory Memcpy HtoD]", +592.667132,0.197693,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118800000","[Unified Memory Memcpy HtoD]", +592.667331,0.181021,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118a00000","[Unified Memory Memcpy HtoD]", +592.667513,0.166173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118c00000","[Unified Memory Memcpy HtoD]", +592.667680,0.165246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1118e00000","[Unified Memory Memcpy HtoD]", +592.667847,0.187517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119000000","[Unified Memory Memcpy HtoD]", +592.668035,0.209341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119200000","[Unified Memory Memcpy HtoD]", +592.668246,0.204060,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119400000","[Unified Memory Memcpy HtoD]", +592.668451,0.207613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119600000","[Unified Memory Memcpy HtoD]", +592.668660,0.217597,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119800000","[Unified Memory Memcpy HtoD]", +592.668879,0.227356,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119a00000","[Unified Memory Memcpy HtoD]", +592.669108,0.198237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119c00000","[Unified Memory Memcpy HtoD]", +592.669307,0.191133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1119e00000","[Unified Memory Memcpy HtoD]", +592.669499,0.210813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a000000","[Unified Memory Memcpy HtoD]", +592.669712,0.210397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a200000","[Unified Memory Memcpy HtoD]", +592.669923,0.212060,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a400000","[Unified Memory Memcpy HtoD]", +592.670137,0.214269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a600000","[Unified Memory Memcpy HtoD]", +592.670352,0.212157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111a800000","[Unified Memory Memcpy HtoD]", +592.670566,0.202653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111aa00000","[Unified Memory Memcpy HtoD]", +592.670770,0.170557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ac00000","[Unified Memory Memcpy HtoD]", +592.670941,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ae00000","[Unified Memory Memcpy HtoD]", +592.671105,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b000000","[Unified Memory Memcpy HtoD]", +592.671270,0.166525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b200000","[Unified Memory Memcpy HtoD]", +592.671438,0.162590,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b400000","[Unified Memory Memcpy HtoD]", +592.671601,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b600000","[Unified Memory Memcpy HtoD]", +592.671765,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111b800000","[Unified Memory Memcpy HtoD]", +592.671931,0.171709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ba00000","[Unified Memory Memcpy HtoD]", +592.672104,0.162749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111bc00000","[Unified Memory Memcpy HtoD]", +592.672267,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111be00000","[Unified Memory Memcpy HtoD]", +592.672433,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c000000","[Unified Memory Memcpy HtoD]", +592.672597,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c200000","[Unified Memory Memcpy HtoD]", +592.672761,0.164317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c400000","[Unified Memory Memcpy HtoD]", +592.672927,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c600000","[Unified Memory Memcpy HtoD]", +592.673091,0.163517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111c800000","[Unified Memory Memcpy HtoD]", +592.673256,0.183357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ca00000","[Unified Memory Memcpy HtoD]", +592.673440,0.204381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111cc00000","[Unified Memory Memcpy HtoD]", +592.673646,0.191261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ce00000","[Unified Memory Memcpy HtoD]", +592.673838,0.207005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d000000","[Unified Memory Memcpy HtoD]", +592.674047,0.199229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d200000","[Unified Memory Memcpy HtoD]", +592.674247,0.189213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d400000","[Unified Memory Memcpy HtoD]", +592.674437,0.201821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d600000","[Unified Memory Memcpy HtoD]", +592.674640,0.194397,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111d800000","[Unified Memory Memcpy HtoD]", +592.674836,0.194365,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111da00000","[Unified Memory Memcpy HtoD]", +592.675032,0.201501,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111dc00000","[Unified Memory Memcpy HtoD]", +592.675234,0.193437,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111de00000","[Unified Memory Memcpy HtoD]", +592.675429,0.193373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e000000","[Unified Memory Memcpy HtoD]", +592.675624,0.167614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e200000","[Unified Memory Memcpy HtoD]", +592.675793,0.198429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e400000","[Unified Memory Memcpy HtoD]", +592.675992,0.208189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e600000","[Unified Memory Memcpy HtoD]", +592.676202,0.200252,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111e800000","[Unified Memory Memcpy HtoD]", +592.676403,0.197885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ea00000","[Unified Memory Memcpy HtoD]", +592.676602,0.195453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ec00000","[Unified Memory Memcpy HtoD]", +592.676799,0.197341,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111ee00000","[Unified Memory Memcpy HtoD]", +592.676997,0.198749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f000000","[Unified Memory Memcpy HtoD]", +592.677197,0.199517,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f200000","[Unified Memory Memcpy HtoD]", +592.677398,0.194461,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f400000","[Unified Memory Memcpy HtoD]", +592.677594,0.202205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f600000","[Unified Memory Memcpy HtoD]", +592.677797,0.204093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111f800000","[Unified Memory Memcpy HtoD]", +592.678002,0.196829,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fa00000","[Unified Memory Memcpy HtoD]", +592.678201,0.181469,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fc00000","[Unified Memory Memcpy HtoD]", +592.678383,0.185149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x111fe00000","[Unified Memory Memcpy HtoD]", +592.678570,0.188669,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120000000","[Unified Memory Memcpy HtoD]", +592.678759,0.186621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120200000","[Unified Memory Memcpy HtoD]", +592.678947,0.191261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120400000","[Unified Memory Memcpy HtoD]", +592.679140,0.184925,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120600000","[Unified Memory Memcpy HtoD]", +592.679326,0.192093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120800000","[Unified Memory Memcpy HtoD]", +592.679519,0.186589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120a00000","[Unified Memory Memcpy HtoD]", +592.679707,0.184317,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120c00000","[Unified Memory Memcpy HtoD]", +592.679892,0.186302,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1120e00000","[Unified Memory Memcpy HtoD]", +592.680080,0.181117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121000000","[Unified Memory Memcpy HtoD]", +592.680262,0.183293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121200000","[Unified Memory Memcpy HtoD]", +592.680447,0.184701,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121400000","[Unified Memory Memcpy HtoD]", +592.680633,0.186717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121600000","[Unified Memory Memcpy HtoD]", +592.680821,0.181565,,,,,,,,,,"GeForce GTX 960 (0)",,,2007040.000000,"0x1121800000","[Unified Memory Memcpy HtoD]", +592.681003,0.024864,,,,,,,,,,"GeForce GTX 960 (0)",,,262144.000000,"0x112c5c0000","[Unified Memory Memcpy HtoD]", +592.681029,0.190301,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c600000","[Unified Memory Memcpy HtoD]", +592.681221,0.189821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c800000","[Unified Memory Memcpy HtoD]", +592.681412,0.188573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ca00000","[Unified Memory Memcpy HtoD]", +592.681602,0.183613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112cc00000","[Unified Memory Memcpy HtoD]", +592.681786,0.186173,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ce00000","[Unified Memory Memcpy HtoD]", +592.681974,0.185085,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d000000","[Unified Memory Memcpy HtoD]", +592.682160,0.184766,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d200000","[Unified Memory Memcpy HtoD]", +592.682346,0.190525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d400000","[Unified Memory Memcpy HtoD]", +592.682538,0.182205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d600000","[Unified Memory Memcpy HtoD]", +592.682721,0.184445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112d800000","[Unified Memory Memcpy HtoD]", +592.682907,0.197213,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112da00000","[Unified Memory Memcpy HtoD]", +592.683105,0.189853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112dc00000","[Unified Memory Memcpy HtoD]", +592.683296,0.184541,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112de00000","[Unified Memory Memcpy HtoD]", +592.683482,0.183453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e000000","[Unified Memory Memcpy HtoD]", +592.683667,0.189149,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e200000","[Unified Memory Memcpy HtoD]", +592.683857,0.186237,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e400000","[Unified Memory Memcpy HtoD]", +592.684045,0.181853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e600000","[Unified Memory Memcpy HtoD]", +592.684228,0.184862,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112e800000","[Unified Memory Memcpy HtoD]", +592.684414,0.186877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ea00000","[Unified Memory Memcpy HtoD]", +592.684602,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ec00000","[Unified Memory Memcpy HtoD]", +592.684788,0.185565,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ee00000","[Unified Memory Memcpy HtoD]", +592.684975,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f000000","[Unified Memory Memcpy HtoD]", +592.685162,0.177885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f200000","[Unified Memory Memcpy HtoD]", +592.685341,0.174781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f400000","[Unified Memory Memcpy HtoD]", +592.685517,0.180478,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f600000","[Unified Memory Memcpy HtoD]", +592.685699,0.169949,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112f800000","[Unified Memory Memcpy HtoD]", +592.685870,0.177277,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fa00000","[Unified Memory Memcpy HtoD]", +592.686049,0.168894,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fc00000","[Unified Memory Memcpy HtoD]", +592.686219,0.178749,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112fe00000","[Unified Memory Memcpy HtoD]", +592.686399,0.184733,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130000000","[Unified Memory Memcpy HtoD]", +592.686585,0.180509,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130200000","[Unified Memory Memcpy HtoD]", +592.686767,0.164158,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130400000","[Unified Memory Memcpy HtoD]", +592.686932,0.180573,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130600000","[Unified Memory Memcpy HtoD]", +592.687114,0.177917,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130800000","[Unified Memory Memcpy HtoD]", +592.687293,0.169853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130a00000","[Unified Memory Memcpy HtoD]", +592.687464,0.168190,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130c00000","[Unified Memory Memcpy HtoD]", +592.687633,0.173789,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1130e00000","[Unified Memory Memcpy HtoD]", +592.687809,0.172765,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131000000","[Unified Memory Memcpy HtoD]", +592.687982,0.171678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131200000","[Unified Memory Memcpy HtoD]", +592.688156,0.177885,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131400000","[Unified Memory Memcpy HtoD]", +592.688335,0.188253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131600000","[Unified Memory Memcpy HtoD]", +592.688524,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131800000","[Unified Memory Memcpy HtoD]", +592.688706,0.175549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131a00000","[Unified Memory Memcpy HtoD]", +592.688883,0.169726,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131c00000","[Unified Memory Memcpy HtoD]", +592.689054,0.182941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1131e00000","[Unified Memory Memcpy HtoD]", +592.689238,0.168477,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132000000","[Unified Memory Memcpy HtoD]", +592.689408,0.168830,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132200000","[Unified Memory Memcpy HtoD]", +592.689578,0.171101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132400000","[Unified Memory Memcpy HtoD]", +592.689750,0.179549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132600000","[Unified Memory Memcpy HtoD]", +592.689931,0.179229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132800000","[Unified Memory Memcpy HtoD]", +592.690111,0.179198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132a00000","[Unified Memory Memcpy HtoD]", +592.690291,0.180605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132c00000","[Unified Memory Memcpy HtoD]", +592.690473,0.181821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1132e00000","[Unified Memory Memcpy HtoD]", +592.690656,0.179165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133000000","[Unified Memory Memcpy HtoD]", +592.690836,0.175837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133200000","[Unified Memory Memcpy HtoD]", +592.691013,0.170238,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133400000","[Unified Memory Memcpy HtoD]", +592.691185,0.167997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133600000","[Unified Memory Memcpy HtoD]", +592.691354,0.167678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133800000","[Unified Memory Memcpy HtoD]", +592.691523,0.169405,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133a00000","[Unified Memory Memcpy HtoD]", +592.691693,0.178941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133c00000","[Unified Memory Memcpy HtoD]", +592.691874,0.177821,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1133e00000","[Unified Memory Memcpy HtoD]", +592.692053,0.176606,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134000000","[Unified Memory Memcpy HtoD]", +592.692230,0.177181,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134200000","[Unified Memory Memcpy HtoD]", +592.692409,0.181373,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134400000","[Unified Memory Memcpy HtoD]", +592.692591,0.178205,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134600000","[Unified Memory Memcpy HtoD]", +592.692771,0.170878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134800000","[Unified Memory Memcpy HtoD]", +592.692943,0.176125,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134a00000","[Unified Memory Memcpy HtoD]", +592.693120,0.168157,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134c00000","[Unified Memory Memcpy HtoD]", +592.693290,0.169246,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1134e00000","[Unified Memory Memcpy HtoD]", +592.693460,0.171037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135000000","[Unified Memory Memcpy HtoD]", +592.693632,0.178269,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135200000","[Unified Memory Memcpy HtoD]", +592.693812,0.178141,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135400000","[Unified Memory Memcpy HtoD]", +592.693991,0.183390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135600000","[Unified Memory Memcpy HtoD]", +592.694176,0.192605,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135800000","[Unified Memory Memcpy HtoD]", +592.694369,0.194493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135a00000","[Unified Memory Memcpy HtoD]", +592.694565,0.187293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135c00000","[Unified Memory Memcpy HtoD]", +592.694754,0.186045,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1135e00000","[Unified Memory Memcpy HtoD]", +592.694941,0.183997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136000000","[Unified Memory Memcpy HtoD]", +592.695126,0.185053,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136200000","[Unified Memory Memcpy HtoD]", +592.695312,0.183645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136400000","[Unified Memory Memcpy HtoD]", +592.695497,0.195837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136600000","[Unified Memory Memcpy HtoD]", +592.695694,0.187901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136800000","[Unified Memory Memcpy HtoD]", +592.695884,0.177853,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136a00000","[Unified Memory Memcpy HtoD]", +592.696063,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136c00000","[Unified Memory Memcpy HtoD]", +592.696227,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1136e00000","[Unified Memory Memcpy HtoD]", +592.696391,0.115167,,,,,,,,,,"GeForce GTX 960 (0)",,,1482752.000000,"0x1137000000","[Unified Memory Memcpy HtoD]", +592.696508,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e400000","[Unified Memory Memcpy HtoD]", +592.696673,0.162781,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e600000","[Unified Memory Memcpy HtoD]", +592.696837,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e800000","[Unified Memory Memcpy HtoD]", +592.697001,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ea00000","[Unified Memory Memcpy HtoD]", +592.697165,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ec00000","[Unified Memory Memcpy HtoD]", +592.697330,0.162557,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ee00000","[Unified Memory Memcpy HtoD]", +592.697494,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f000000","[Unified Memory Memcpy HtoD]", +592.697658,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f200000","[Unified Memory Memcpy HtoD]", +592.697822,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f400000","[Unified Memory Memcpy HtoD]", +592.697987,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f600000","[Unified Memory Memcpy HtoD]", +592.698151,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113f800000","[Unified Memory Memcpy HtoD]", +592.698315,0.163485,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fa00000","[Unified Memory Memcpy HtoD]", +592.698480,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fc00000","[Unified Memory Memcpy HtoD]", +592.698644,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113fe00000","[Unified Memory Memcpy HtoD]", +592.698808,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140000000","[Unified Memory Memcpy HtoD]", +592.698972,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140200000","[Unified Memory Memcpy HtoD]", +592.699136,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140400000","[Unified Memory Memcpy HtoD]", +592.699301,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140600000","[Unified Memory Memcpy HtoD]", +592.699465,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140800000","[Unified Memory Memcpy HtoD]", +592.699629,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140a00000","[Unified Memory Memcpy HtoD]", +592.699793,0.162525,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140c00000","[Unified Memory Memcpy HtoD]", +592.699957,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1140e00000","[Unified Memory Memcpy HtoD]", +592.700121,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141000000","[Unified Memory Memcpy HtoD]", +592.700286,0.162558,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141200000","[Unified Memory Memcpy HtoD]", +592.700449,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141400000","[Unified Memory Memcpy HtoD]", +592.700614,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141600000","[Unified Memory Memcpy HtoD]", +592.700778,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141800000","[Unified Memory Memcpy HtoD]", +592.700942,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141a00000","[Unified Memory Memcpy HtoD]", +592.701106,0.100191,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1141c00000","[Unified Memory Memcpy HtoD]", +592.701208,0.101982,,,,,,,,,,"GeForce GTX 960 (0)",,,1310720.000000,"0x113aac0000","[Unified Memory Memcpy HtoD]", +592.701311,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ac00000","[Unified Memory Memcpy HtoD]", +592.701475,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ae00000","[Unified Memory Memcpy HtoD]", +592.701639,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b000000","[Unified Memory Memcpy HtoD]", +592.701803,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b200000","[Unified Memory Memcpy HtoD]", +592.701967,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b400000","[Unified Memory Memcpy HtoD]", +592.702131,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b600000","[Unified Memory Memcpy HtoD]", +592.702295,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113b800000","[Unified Memory Memcpy HtoD]", +592.702460,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ba00000","[Unified Memory Memcpy HtoD]", +592.702624,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113bc00000","[Unified Memory Memcpy HtoD]", +592.702788,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113be00000","[Unified Memory Memcpy HtoD]", +592.702953,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c000000","[Unified Memory Memcpy HtoD]", +592.703117,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c200000","[Unified Memory Memcpy HtoD]", +592.703281,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c400000","[Unified Memory Memcpy HtoD]", +592.703445,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c600000","[Unified Memory Memcpy HtoD]", +592.703610,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113c800000","[Unified Memory Memcpy HtoD]", +592.703774,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ca00000","[Unified Memory Memcpy HtoD]", +592.703938,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113cc00000","[Unified Memory Memcpy HtoD]", +592.704103,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113ce00000","[Unified Memory Memcpy HtoD]", +592.704267,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d000000","[Unified Memory Memcpy HtoD]", +592.704431,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d200000","[Unified Memory Memcpy HtoD]", +592.704596,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d400000","[Unified Memory Memcpy HtoD]", +592.704761,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d600000","[Unified Memory Memcpy HtoD]", +592.704925,0.162686,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113d800000","[Unified Memory Memcpy HtoD]", +592.705089,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113da00000","[Unified Memory Memcpy HtoD]", +592.705253,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113dc00000","[Unified Memory Memcpy HtoD]", +592.705418,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113de00000","[Unified Memory Memcpy HtoD]", +592.705582,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113e000000","[Unified Memory Memcpy HtoD]", +592.705746,0.160925,,,,,,,,,,"GeForce GTX 960 (0)",,,2068480.000000,"0x113e200000","[Unified Memory Memcpy HtoD]", +592.706356,64.611706,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","304",,,"spmv3",6737 +592.706542,0.001664,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +592.706652,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +592.706817,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +592.706983,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +592.707149,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +592.707314,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +592.707480,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +592.707646,0.163422,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +592.707812,0.162845,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +592.707977,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +592.708144,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +592.708309,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +592.708475,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +592.708640,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +592.708805,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +592.708970,0.162589,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +592.709135,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +592.709300,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +592.709465,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +592.709631,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +592.709796,0.163869,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +592.709962,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +592.710127,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +592.710293,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +592.710458,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +592.710624,0.163006,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +592.710788,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +592.710954,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +592.711119,0.163549,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +592.711285,0.100510,,,,,,,,,,"GeForce GTX 960 (0)",,,1282048.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +592.711389,0.123038,,,,,,,,,,"GeForce GTX 960 (0)",,,1572864.000000,"0x110c280000","[Unified Memory Memcpy HtoD]", +592.711514,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c400000","[Unified Memory Memcpy HtoD]", +592.711679,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c600000","[Unified Memory Memcpy HtoD]", +592.711844,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110c800000","[Unified Memory Memcpy HtoD]", +592.712010,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ca00000","[Unified Memory Memcpy HtoD]", +592.712175,0.169566,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110cc00000","[Unified Memory Memcpy HtoD]", +592.712347,0.168989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ce00000","[Unified Memory Memcpy HtoD]", +592.712518,0.169725,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d000000","[Unified Memory Memcpy HtoD]", +592.712690,0.167550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d200000","[Unified Memory Memcpy HtoD]", +592.712860,0.166429,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d400000","[Unified Memory Memcpy HtoD]", +592.713029,0.167389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d600000","[Unified Memory Memcpy HtoD]", +592.713198,0.165086,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110d800000","[Unified Memory Memcpy HtoD]", +592.713365,0.166333,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110da00000","[Unified Memory Memcpy HtoD]", +592.713534,0.166142,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110dc00000","[Unified Memory Memcpy HtoD]", +592.713702,0.167037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110de00000","[Unified Memory Memcpy HtoD]", +592.713871,0.167293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e000000","[Unified Memory Memcpy HtoD]", +592.714040,0.165790,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e200000","[Unified Memory Memcpy HtoD]", +592.714207,0.165117,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e400000","[Unified Memory Memcpy HtoD]", +592.714375,0.165214,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e600000","[Unified Memory Memcpy HtoD]", +592.714543,0.166621,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110e800000","[Unified Memory Memcpy HtoD]", +592.714711,0.167421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ea00000","[Unified Memory Memcpy HtoD]", +592.714881,0.169310,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ec00000","[Unified Memory Memcpy HtoD]", +592.715052,0.167261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110ee00000","[Unified Memory Memcpy HtoD]", +592.715222,0.167389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f000000","[Unified Memory Memcpy HtoD]", +592.715391,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f200000","[Unified Memory Memcpy HtoD]", +592.715556,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f400000","[Unified Memory Memcpy HtoD]", +592.715721,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f600000","[Unified Memory Memcpy HtoD]", +592.715886,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110f800000","[Unified Memory Memcpy HtoD]", +592.716052,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fa00000","[Unified Memory Memcpy HtoD]", +592.716218,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fc00000","[Unified Memory Memcpy HtoD]", +592.716382,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110fe00000","[Unified Memory Memcpy HtoD]", +592.716548,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110000000","[Unified Memory Memcpy HtoD]", +592.716714,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110200000","[Unified Memory Memcpy HtoD]", +592.716879,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110400000","[Unified Memory Memcpy HtoD]", +592.717044,0.163709,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110600000","[Unified Memory Memcpy HtoD]", +592.717209,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110800000","[Unified Memory Memcpy HtoD]", +592.717374,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110a00000","[Unified Memory Memcpy HtoD]", +592.717540,0.163742,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110c00000","[Unified Memory Memcpy HtoD]", +592.717707,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1110e00000","[Unified Memory Memcpy HtoD]", +592.717872,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111000000","[Unified Memory Memcpy HtoD]", +592.718038,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111200000","[Unified Memory Memcpy HtoD]", +592.718203,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111400000","[Unified Memory Memcpy HtoD]", +592.718368,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111600000","[Unified Memory Memcpy HtoD]", +592.718533,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111800000","[Unified Memory Memcpy HtoD]", +592.718699,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111a00000","[Unified Memory Memcpy HtoD]", +592.718864,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111c00000","[Unified Memory Memcpy HtoD]", +592.719030,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1111e00000","[Unified Memory Memcpy HtoD]", +592.719197,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112000000","[Unified Memory Memcpy HtoD]", +592.719363,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112200000","[Unified Memory Memcpy HtoD]", +592.719530,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112400000","[Unified Memory Memcpy HtoD]", +592.719695,0.164093,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112600000","[Unified Memory Memcpy HtoD]", +592.719862,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112800000","[Unified Memory Memcpy HtoD]", +592.720028,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112a00000","[Unified Memory Memcpy HtoD]", +592.720193,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112c00000","[Unified Memory Memcpy HtoD]", +592.720358,0.164189,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1112e00000","[Unified Memory Memcpy HtoD]", +592.720524,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113000000","[Unified Memory Memcpy HtoD]", +592.720690,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113200000","[Unified Memory Memcpy HtoD]", +592.720856,0.163229,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113400000","[Unified Memory Memcpy HtoD]", +592.721021,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113600000","[Unified Memory Memcpy HtoD]", +592.721187,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113800000","[Unified Memory Memcpy HtoD]", +592.721353,0.164094,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113a00000","[Unified Memory Memcpy HtoD]", +592.721519,0.162717,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113c00000","[Unified Memory Memcpy HtoD]", +592.721684,0.163646,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1113e00000","[Unified Memory Memcpy HtoD]", +592.721850,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114000000","[Unified Memory Memcpy HtoD]", +592.722015,0.164221,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114200000","[Unified Memory Memcpy HtoD]", +592.722181,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114400000","[Unified Memory Memcpy HtoD]", +592.722346,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114600000","[Unified Memory Memcpy HtoD]", +592.722511,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114800000","[Unified Memory Memcpy HtoD]", +592.722677,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114a00000","[Unified Memory Memcpy HtoD]", +592.722842,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114c00000","[Unified Memory Memcpy HtoD]", +592.723008,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1114e00000","[Unified Memory Memcpy HtoD]", +592.723174,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115000000","[Unified Memory Memcpy HtoD]", +592.723339,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115200000","[Unified Memory Memcpy HtoD]", +592.723504,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115400000","[Unified Memory Memcpy HtoD]", +592.723671,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115600000","[Unified Memory Memcpy HtoD]", +592.723837,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115800000","[Unified Memory Memcpy HtoD]", +592.724002,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115a00000","[Unified Memory Memcpy HtoD]", +592.724168,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115c00000","[Unified Memory Memcpy HtoD]", +592.724333,0.162654,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1115e00000","[Unified Memory Memcpy HtoD]", +592.724498,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116000000","[Unified Memory Memcpy HtoD]", +592.724663,0.163326,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116200000","[Unified Memory Memcpy HtoD]", +592.724829,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116400000","[Unified Memory Memcpy HtoD]", +592.724995,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116600000","[Unified Memory Memcpy HtoD]", +592.725160,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116800000","[Unified Memory Memcpy HtoD]", +592.725325,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116a00000","[Unified Memory Memcpy HtoD]", +592.725492,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1116c00000","[Unified Memory Memcpy HtoD]", +592.725658,0.015551,,,,,,,,,,"GeForce GTX 960 (0)",,,172032.000000,"0x1116e00000","[Unified Memory Memcpy HtoD]", +592.725677,0.163966,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121a00000","[Unified Memory Memcpy HtoD]", +592.725842,0.162973,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121c00000","[Unified Memory Memcpy HtoD]", +592.726007,0.164030,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1121e00000","[Unified Memory Memcpy HtoD]", +592.726173,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122000000","[Unified Memory Memcpy HtoD]", +592.726338,0.163198,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122200000","[Unified Memory Memcpy HtoD]", +592.726504,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122400000","[Unified Memory Memcpy HtoD]", +592.726670,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122600000","[Unified Memory Memcpy HtoD]", +592.726835,0.163870,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122800000","[Unified Memory Memcpy HtoD]", +592.727001,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122a00000","[Unified Memory Memcpy HtoD]", +592.727167,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122c00000","[Unified Memory Memcpy HtoD]", +592.727333,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1122e00000","[Unified Memory Memcpy HtoD]", +592.727498,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123000000","[Unified Memory Memcpy HtoD]", +592.727663,0.163901,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123200000","[Unified Memory Memcpy HtoD]", +592.727829,0.164670,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123400000","[Unified Memory Memcpy HtoD]", +592.727996,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123600000","[Unified Memory Memcpy HtoD]", +592.728162,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123800000","[Unified Memory Memcpy HtoD]", +592.728328,0.163038,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123a00000","[Unified Memory Memcpy HtoD]", +592.728494,0.164989,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123c00000","[Unified Memory Memcpy HtoD]", +592.728661,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1123e00000","[Unified Memory Memcpy HtoD]", +592.728827,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124000000","[Unified Memory Memcpy HtoD]", +592.728994,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124200000","[Unified Memory Memcpy HtoD]", +592.729160,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124400000","[Unified Memory Memcpy HtoD]", +592.729325,0.163005,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124600000","[Unified Memory Memcpy HtoD]", +592.729490,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124800000","[Unified Memory Memcpy HtoD]", +592.729656,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124a00000","[Unified Memory Memcpy HtoD]", +592.729822,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124c00000","[Unified Memory Memcpy HtoD]", +592.729987,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1124e00000","[Unified Memory Memcpy HtoD]", +592.730152,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125000000","[Unified Memory Memcpy HtoD]", +592.730318,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125200000","[Unified Memory Memcpy HtoD]", +592.730482,0.163166,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125400000","[Unified Memory Memcpy HtoD]", +592.730647,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125600000","[Unified Memory Memcpy HtoD]", +592.730813,0.164285,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125800000","[Unified Memory Memcpy HtoD]", +592.730979,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125a00000","[Unified Memory Memcpy HtoD]", +592.731145,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125c00000","[Unified Memory Memcpy HtoD]", +592.731310,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1125e00000","[Unified Memory Memcpy HtoD]", +592.731474,0.163773,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126000000","[Unified Memory Memcpy HtoD]", +592.731639,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126200000","[Unified Memory Memcpy HtoD]", +592.731805,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126400000","[Unified Memory Memcpy HtoD]", +592.731970,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126600000","[Unified Memory Memcpy HtoD]", +592.732135,0.163453,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126800000","[Unified Memory Memcpy HtoD]", +592.732301,0.164381,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126a00000","[Unified Memory Memcpy HtoD]", +592.732468,0.163838,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126c00000","[Unified Memory Memcpy HtoD]", +592.732634,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1126e00000","[Unified Memory Memcpy HtoD]", +592.732800,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127000000","[Unified Memory Memcpy HtoD]", +592.732965,0.163933,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127200000","[Unified Memory Memcpy HtoD]", +592.733131,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127400000","[Unified Memory Memcpy HtoD]", +592.733297,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127600000","[Unified Memory Memcpy HtoD]", +592.733463,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127800000","[Unified Memory Memcpy HtoD]", +592.733628,0.163614,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127a00000","[Unified Memory Memcpy HtoD]", +592.733794,0.162493,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127c00000","[Unified Memory Memcpy HtoD]", +592.733959,0.162782,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1127e00000","[Unified Memory Memcpy HtoD]", +592.734125,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128000000","[Unified Memory Memcpy HtoD]", +592.734289,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128200000","[Unified Memory Memcpy HtoD]", +592.734454,0.163677,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128400000","[Unified Memory Memcpy HtoD]", +592.734619,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128600000","[Unified Memory Memcpy HtoD]", +592.734785,0.163357,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128800000","[Unified Memory Memcpy HtoD]", +592.734951,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128a00000","[Unified Memory Memcpy HtoD]", +592.735115,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128c00000","[Unified Memory Memcpy HtoD]", +592.735280,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1128e00000","[Unified Memory Memcpy HtoD]", +592.735446,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129000000","[Unified Memory Memcpy HtoD]", +592.735612,0.163837,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129200000","[Unified Memory Memcpy HtoD]", +592.735777,0.162942,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129400000","[Unified Memory Memcpy HtoD]", +592.735942,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129600000","[Unified Memory Memcpy HtoD]", +592.736107,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129800000","[Unified Memory Memcpy HtoD]", +592.736272,0.163133,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129a00000","[Unified Memory Memcpy HtoD]", +592.736438,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129c00000","[Unified Memory Memcpy HtoD]", +592.736603,0.164990,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1129e00000","[Unified Memory Memcpy HtoD]", +592.736770,0.163741,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a000000","[Unified Memory Memcpy HtoD]", +592.736936,0.163454,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a200000","[Unified Memory Memcpy HtoD]", +592.737102,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a400000","[Unified Memory Memcpy HtoD]", +592.737267,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a600000","[Unified Memory Memcpy HtoD]", +592.737432,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112a800000","[Unified Memory Memcpy HtoD]", +592.737597,0.163582,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112aa00000","[Unified Memory Memcpy HtoD]", +592.737762,0.163390,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ac00000","[Unified Memory Memcpy HtoD]", +592.737928,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ae00000","[Unified Memory Memcpy HtoD]", +592.738095,0.163710,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b000000","[Unified Memory Memcpy HtoD]", +592.738260,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b200000","[Unified Memory Memcpy HtoD]", +592.738425,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b400000","[Unified Memory Memcpy HtoD]", +592.738590,0.162653,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b600000","[Unified Memory Memcpy HtoD]", +592.738756,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112b800000","[Unified Memory Memcpy HtoD]", +592.738921,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112ba00000","[Unified Memory Memcpy HtoD]", +592.739086,0.164029,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112bc00000","[Unified Memory Memcpy HtoD]", +592.739252,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112be00000","[Unified Memory Memcpy HtoD]", +592.739418,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c000000","[Unified Memory Memcpy HtoD]", +592.739584,0.162814,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x112c200000","[Unified Memory Memcpy HtoD]", +592.739749,0.135710,,,,,,,,,,"GeForce GTX 960 (0)",,,1744896.000000,"0x112c400000","[Unified Memory Memcpy HtoD]", +592.739887,0.042047,,,,,,,,,,"GeForce GTX 960 (0)",,,524288.000000,"0x1137180000","[Unified Memory Memcpy HtoD]", +592.739931,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137200000","[Unified Memory Memcpy HtoD]", +592.740096,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137400000","[Unified Memory Memcpy HtoD]", +592.740261,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137600000","[Unified Memory Memcpy HtoD]", +592.740427,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137800000","[Unified Memory Memcpy HtoD]", +592.740593,0.162909,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137a00000","[Unified Memory Memcpy HtoD]", +592.740758,0.163774,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137c00000","[Unified Memory Memcpy HtoD]", +592.740924,0.163997,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1137e00000","[Unified Memory Memcpy HtoD]", +592.741090,0.163613,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138000000","[Unified Memory Memcpy HtoD]", +592.741255,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138200000","[Unified Memory Memcpy HtoD]", +592.741423,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138400000","[Unified Memory Memcpy HtoD]", +592.741588,0.162750,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138600000","[Unified Memory Memcpy HtoD]", +592.741753,0.163645,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138800000","[Unified Memory Memcpy HtoD]", +592.741918,0.163358,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138a00000","[Unified Memory Memcpy HtoD]", +592.742083,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138c00000","[Unified Memory Memcpy HtoD]", +592.742251,0.163294,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1138e00000","[Unified Memory Memcpy HtoD]", +592.742417,0.163070,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139000000","[Unified Memory Memcpy HtoD]", +592.742582,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139200000","[Unified Memory Memcpy HtoD]", +592.742748,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139400000","[Unified Memory Memcpy HtoD]", +592.742913,0.163389,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139600000","[Unified Memory Memcpy HtoD]", +592.743078,0.163998,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139800000","[Unified Memory Memcpy HtoD]", +592.743244,0.162813,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139a00000","[Unified Memory Memcpy HtoD]", +592.743409,0.162974,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139c00000","[Unified Memory Memcpy HtoD]", +592.743574,0.164445,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1139e00000","[Unified Memory Memcpy HtoD]", +592.743740,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a000000","[Unified Memory Memcpy HtoD]", +592.743905,0.163934,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a200000","[Unified Memory Memcpy HtoD]", +592.744071,0.162941,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a400000","[Unified Memory Memcpy HtoD]", +592.744236,0.164318,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a600000","[Unified Memory Memcpy HtoD]", +592.744403,0.163805,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x113a800000","[Unified Memory Memcpy HtoD]", +592.744568,0.059999,,,,,,,,,,"GeForce GTX 960 (0)",,,757760.000000,"0x113aa00000","[Unified Memory Memcpy HtoD]", +592.744630,0.062111,,,,,,,,,,"GeForce GTX 960 (0)",,,786432.000000,"0x1141d40000","[Unified Memory Memcpy HtoD]", +592.744694,0.162910,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1141e00000","[Unified Memory Memcpy HtoD]", +592.744860,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142000000","[Unified Memory Memcpy HtoD]", +592.745025,0.163134,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142200000","[Unified Memory Memcpy HtoD]", +592.745190,0.163165,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142400000","[Unified Memory Memcpy HtoD]", +592.745355,0.163902,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142600000","[Unified Memory Memcpy HtoD]", +592.745522,0.163230,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142800000","[Unified Memory Memcpy HtoD]", +592.745688,0.163421,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142a00000","[Unified Memory Memcpy HtoD]", +592.745854,0.163518,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142c00000","[Unified Memory Memcpy HtoD]", +592.746019,0.163261,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1142e00000","[Unified Memory Memcpy HtoD]", +592.746184,0.163550,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143000000","[Unified Memory Memcpy HtoD]", +592.746350,0.164253,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143200000","[Unified Memory Memcpy HtoD]", +592.746516,0.164350,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143400000","[Unified Memory Memcpy HtoD]", +592.746682,0.163037,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143600000","[Unified Memory Memcpy HtoD]", +592.746848,0.163069,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143800000","[Unified Memory Memcpy HtoD]", +592.747013,0.163262,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143a00000","[Unified Memory Memcpy HtoD]", +592.747178,0.163197,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143c00000","[Unified Memory Memcpy HtoD]", +592.747343,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1143e00000","[Unified Memory Memcpy HtoD]", +592.747509,0.163293,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144000000","[Unified Memory Memcpy HtoD]", +592.747674,0.163678,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144200000","[Unified Memory Memcpy HtoD]", +592.747839,0.162877,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144400000","[Unified Memory Memcpy HtoD]", +592.748004,0.163486,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144600000","[Unified Memory Memcpy HtoD]", +592.748170,0.163581,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144800000","[Unified Memory Memcpy HtoD]", +592.748336,0.162685,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144a00000","[Unified Memory Memcpy HtoD]", +592.748501,0.162878,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144c00000","[Unified Memory Memcpy HtoD]", +592.748665,0.163325,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1144e00000","[Unified Memory Memcpy HtoD]", +592.748831,0.163102,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145000000","[Unified Memory Memcpy HtoD]", +592.748996,0.163101,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145200000","[Unified Memory Memcpy HtoD]", +592.749161,0.163806,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1145400000","[Unified Memory Memcpy HtoD]", +592.749327,0.039615,,,,,,,,,,"GeForce GTX 960 (0)",,,495616.000000,"0x1145600000","[Unified Memory Memcpy HtoD]", +592.770967,53.545126,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","305",,,"spmv3",6747 +592.771098,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +592.824511,4.619576,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","304",,,"sum",6751 +592.824627,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +592.824649,4.619480,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","305",,,"sum",6755 +592.829269,9.245010,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","304",,,"divide",6760 +592.829382,6.899765,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","305",,,"divide",6765 +592.838425,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +592.838548,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +592.838560,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +592.838613,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +592.838666,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +592.838680,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +592.838732,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +592.838784,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +592.838918,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +592.839087,54.502166,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","306",,,"spmv3",6783 +592.839150,0.001759,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +592.893589,53.525830,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","307",,,"spmv3",6793 +592.893705,0.001696,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +592.947114,4.619193,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","306",,,"sum",6797 +592.947220,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +592.947243,4.618137,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","307",,,"sum",6801 +592.951863,9.257745,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","306",,,"divide",6806 +592.951908,6.915253,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","307",,,"divide",6811 +592.961025,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +592.961110,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +592.961147,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +592.961164,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +592.961212,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +592.961229,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +592.961282,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +592.961330,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +592.961461,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +592.961654,54.534422,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","308",,,"spmv3",6829 +592.961716,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +593.016188,53.358984,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","309",,,"spmv3",6839 +593.016271,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +593.069546,4.619929,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","308",,,"sum",6843 +593.069655,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +593.069678,4.619705,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","309",,,"sum",6847 +593.075532,9.253265,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","308",,,"divide",6852 +593.075553,6.919669,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","309",,,"divide",6857 +593.084711,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +593.084810,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +593.084832,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +593.084864,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +593.084913,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +593.084929,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +593.084982,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +593.085031,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +593.085321,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +593.085489,54.576758,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","310",,,"spmv3",6875 +593.085569,0.001568,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +593.140065,53.498214,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","311",,,"spmv3",6885 +593.140160,0.001504,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +593.193563,4.619353,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","310",,,"sum",6889 +593.193648,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +593.193671,4.618809,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","311",,,"sum",6893 +593.198291,9.244977,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","310",,,"divide",6898 +593.198321,6.916214,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","311",,,"divide",6903 +593.207445,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +593.207533,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +593.207566,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +593.207584,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +593.207631,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +593.207652,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +593.207702,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +593.207749,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +593.207885,0.001472,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy HtoD]", +593.208077,54.489495,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","312",,,"spmv3",6921 +593.208140,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +593.262566,53.464838,468750,1,1,32,1,1,29,2.000000,128,"GeForce GTX 960 (0)","1","313",,,"spmv3",6931 +593.262680,0.001440,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +593.316030,4.619449,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","312",,,"sum",6935 +593.316117,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy HtoD]", +593.316140,4.618360,32,1,1,32,1,1,8,0.000000,0,"GeForce GTX 960 (0)","1","313",,,"sum",6939 +593.320759,9.241778,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","312",,,"divide",6944 +593.320788,6.908341,32,1,1,32,1,1,14,0.000000,0,"GeForce GTX 960 (0)","1","313",,,"divide",6949 +593.329923,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a80000","[Unified Memory CPU page faults]", +593.329991,,,,,,,,,,,,,,"PC 0xc3d54e87","0x1100a81000","[Unified Memory CPU page faults]", +593.330014,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a82000","[Unified Memory CPU page faults]", +593.330034,,,,,,,,,,,,,,"PC 0xc3d54da1","0x1100a83000","[Unified Memory CPU page faults]", +593.330043,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a80000","[Unified Memory Memcpy DtoH]", +593.330076,,,,,,,,,,,,,,"PC 0xd72b58ae","0x1137180000","[Unified Memory CPU page faults]", +593.330109,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a81000","[Unified Memory Memcpy DtoH]", +593.330113,,,,,,,,,,,,,,"PC 0xd72b58ae","0x113e400000","[Unified Memory CPU page faults]", +593.330132,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a82000","[Unified Memory Memcpy DtoH]", +593.330152,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1100a83000","[Unified Memory Memcpy DtoH]", +593.330197,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1137180000","[Unified Memory Memcpy DtoH]", +593.330198,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1137181000","[Unified Memory Memcpy DtoH]", +593.330234,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x113e400000","[Unified Memory Memcpy DtoH]", +593.330235,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x113e401000","[Unified Memory Memcpy DtoH]", diff --git a/data/nvprof_log/2020_07_20/b8_10958.csv b/data/nvprof_log/2020_07_20/b8_10958.csv new file mode 100644 index 00000000..57a926d8 --- /dev/null +++ b/data/nvprof_log/2020_07_20/b8_10958.csv @@ -0,0 +1,499 @@ +==10958== NVPROF is profiling process 10958, command: java -classpath /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -XX:MaxHeapSize=24G com.oracle.g +==10958== Profiling application: java -classpath /home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/lib/installer/launcher-common.jar:/home/users/alberto.parravicini/Documents/graalvm-ce-java8-20.0.0/jre/lib/graalvm/graalpython-launcher.jar -XX:MaxHeapSize=24G com.oracle.g +==10958== Profiling result: +"Start","Duration","Grid X","Grid Y","Grid Z","Block X","Block Y","Block Z","Registers Per Thread","Static SMem","Dynamic SMem","Device","Context","Stream","Unified Memory","Virtual Address","Name","Correlation_ID" +s,ms,,,,,,,,B,B,,,,B,,, +53.895938,0.208768,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105000000","[Unified Memory Memcpy HtoD]", +53.896149,0.210848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105200000","[Unified Memory Memcpy HtoD]", +53.896363,0.227712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105400000","[Unified Memory Memcpy HtoD]", +53.896593,0.213248,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105600000","[Unified Memory Memcpy HtoD]", +53.896807,0.204096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105800000","[Unified Memory Memcpy HtoD]", +53.897013,0.206368,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105a00000","[Unified Memory Memcpy HtoD]", +53.897221,0.207136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105c00000","[Unified Memory Memcpy HtoD]", +53.897429,0.206016,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1105e00000","[Unified Memory Memcpy HtoD]", +53.897637,0.204768,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106000000","[Unified Memory Memcpy HtoD]", +53.897843,0.213568,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106200000","[Unified Memory Memcpy HtoD]", +53.898058,0.206528,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106400000","[Unified Memory Memcpy HtoD]", +53.898266,0.199424,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106600000","[Unified Memory Memcpy HtoD]", +53.898466,0.165664,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106800000","[Unified Memory Memcpy HtoD]", +53.898633,0.165984,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106a00000","[Unified Memory Memcpy HtoD]", +53.898801,0.164096,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106c00000","[Unified Memory Memcpy HtoD]", +53.898966,0.163584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1106e00000","[Unified Memory Memcpy HtoD]", +53.899131,0.164448,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107000000","[Unified Memory Memcpy HtoD]", +53.899296,0.166976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107200000","[Unified Memory Memcpy HtoD]", +53.899465,0.164320,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107400000","[Unified Memory Memcpy HtoD]", +53.899630,0.164128,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107600000","[Unified Memory Memcpy HtoD]", +53.899796,0.163584,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107800000","[Unified Memory Memcpy HtoD]", +53.899960,0.163392,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107a00000","[Unified Memory Memcpy HtoD]", +53.900125,0.163296,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107c00000","[Unified Memory Memcpy HtoD]", +53.900289,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1107e00000","[Unified Memory Memcpy HtoD]", +53.900454,0.163936,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108000000","[Unified Memory Memcpy HtoD]", +53.900619,0.163648,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108200000","[Unified Memory Memcpy HtoD]", +53.900784,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108400000","[Unified Memory Memcpy HtoD]", +53.900948,0.164480,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108600000","[Unified Memory Memcpy HtoD]", +53.901114,0.168320,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108800000","[Unified Memory Memcpy HtoD]", +53.901284,0.164896,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108a00000","[Unified Memory Memcpy HtoD]", +53.901450,0.164224,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108c00000","[Unified Memory Memcpy HtoD]", +53.901615,0.162976,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1108e00000","[Unified Memory Memcpy HtoD]", +53.901780,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109000000","[Unified Memory Memcpy HtoD]", +53.901944,0.162848,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109200000","[Unified Memory Memcpy HtoD]", +53.902108,0.163072,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109400000","[Unified Memory Memcpy HtoD]", +53.902272,0.163136,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109600000","[Unified Memory Memcpy HtoD]", +53.902437,0.163232,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109800000","[Unified Memory Memcpy HtoD]", +53.902601,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109a00000","[Unified Memory Memcpy HtoD]", +53.902766,0.162880,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109c00000","[Unified Memory Memcpy HtoD]", +53.902930,0.171968,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x1109e00000","[Unified Memory Memcpy HtoD]", +53.903050,44.778996,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","14",,,"gaussian_blur",4 +53.903103,0.163488,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a000000","[Unified Memory Memcpy HtoD]", +53.903268,0.163712,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a200000","[Unified Memory Memcpy HtoD]", +53.903433,0.163328,,,,,,,,,,"GeForce GTX 960 (0)",,,2097152.000000,"0x110a400000","[Unified Memory Memcpy HtoD]", +53.903597,0.154528,,,,,,,,,,"GeForce GTX 960 (0)",,,1982464.000000,"0x110a600000","[Unified Memory Memcpy HtoD]", +53.903753,0.002784,,,,,,,,,,"GeForce GTX 960 (0)",,,20480.000000,"0x1100a80000","[Unified Memory Memcpy HtoD]", +53.904405,57.438355,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","15",,,"gaussian_blur",9 +53.905046,48.124034,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","16",,,"gaussian_blur",14 +53.947977,18.030061,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","14",,,"sobel",18 +53.961964,12.745214,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","15",,,"sobel",22 +53.974793,4.016418,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","15",,,"maximum",26 +53.978871,4.012483,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","15",,,"minimum",30 +53.982980,6.938134,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","15",,,"extend",35 +53.983045,6.108994,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","16",,,"unsharpen",42 +53.990160,5.554635,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","15",,,"combine",50 +53.995966,5.578571,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","14",,,"combine",58 +54.002383,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +54.003236,0.001536,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +54.003238,0.005312,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +54.159219,0.001984,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +54.159454,39.684194,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","17",,,"gaussian_blur",78 +54.160042,49.319087,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","18",,,"gaussian_blur",83 +54.160561,41.240011,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","19",,,"gaussian_blur",88 +54.199262,15.714801,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","17",,,"sobel",92 +54.209524,11.981993,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","18",,,"sobel",96 +54.221643,3.549130,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","18",,,"maximum",100 +54.225299,3.544458,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","18",,,"minimum",104 +54.228932,6.607355,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","18",,,"extend",109 +54.228995,5.944421,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","19",,,"unsharpen",116 +54.235774,5.305903,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","18",,,"combine",124 +54.241324,5.341807,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","17",,,"combine",132 +54.246999,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +54.247021,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +54.247022,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +54.365785,0.002240,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +54.366083,39.430118,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","20",,,"gaussian_blur",152 +54.366739,49.411182,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","21",,,"gaussian_blur",157 +54.367404,41.476871,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","22",,,"gaussian_blur",162 +54.405664,16.007372,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","20",,,"sobel",166 +54.416273,12.153319,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","21",,,"sobel",170 +54.428531,3.548650,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","21",,,"maximum",174 +54.432213,3.545258,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","21",,,"minimum",178 +54.435897,6.628730,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","21",,,"extend",183 +54.435957,5.971044,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","22",,,"unsharpen",190 +54.442703,5.297327,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","21",,,"combine",198 +54.448344,5.341582,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","20",,,"combine",206 +54.454004,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +54.454024,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +54.454025,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +54.577295,0.001984,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +54.577585,39.035468,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","23",,,"gaussian_blur",226 +54.578472,49.372207,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","24",,,"gaussian_blur",231 +54.578862,41.290538,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","25",,,"gaussian_blur",236 +54.616767,15.509907,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","23",,,"sobel",240 +54.627992,11.363507,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","24",,,"sobel",244 +54.639459,3.550154,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","24",,,"maximum",248 +54.643147,3.545578,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","24",,,"minimum",252 +54.646829,6.619803,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","24",,,"extend",257 +54.646950,5.965573,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","25",,,"unsharpen",264 +54.653768,5.332335,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","24",,,"combine",272 +54.659406,5.312431,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","23",,,"combine",280 +54.664974,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +54.664991,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +54.664992,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +54.771879,0.002240,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +54.772124,39.834368,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","26",,,"gaussian_blur",300 +54.772564,49.168337,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","27",,,"gaussian_blur",305 +54.772837,40.972846,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","28",,,"gaussian_blur",310 +54.812148,15.693008,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","26",,,"sobel",314 +54.821880,12.343396,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","27",,,"sobel",318 +54.834383,3.549738,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","27",,,"maximum",322 +54.838011,3.545354,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","27",,,"minimum",326 +54.841649,6.608603,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","27",,,"extend",331 +54.841753,5.931621,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","28",,,"unsharpen",338 +54.848540,5.293743,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","27",,,"combine",346 +54.854193,5.341902,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","26",,,"combine",354 +54.859920,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +54.859950,0.001344,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +54.859951,0.006016,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +54.972629,0.002304,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +54.972944,38.532660,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","29",,,"gaussian_blur",374 +54.973911,49.008532,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","30",,,"gaussian_blur",379 +54.974318,40.839249,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","31",,,"gaussian_blur",384 +55.011650,15.446324,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","29",,,"sobel",388 +55.023090,11.258612,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","30",,,"sobel",392 +55.034469,3.549994,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","30",,,"maximum",396 +55.038108,3.544522,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","30",,,"minimum",400 +55.041775,6.622075,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","30",,,"extend",405 +55.041840,5.967557,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","31",,,"unsharpen",412 +55.048634,5.315087,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","30",,,"combine",420 +55.054243,5.328719,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","29",,,"combine",428 +55.059945,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +55.059972,0.001152,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +55.059973,0.005216,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +55.179888,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +55.180073,39.412518,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","32",,,"gaussian_blur",448 +55.180385,48.409341,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","33",,,"gaussian_blur",453 +55.180761,40.496374,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","34",,,"gaussian_blur",458 +55.219595,15.750543,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","32",,,"sobel",462 +55.228919,12.525313,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","33",,,"sobel",466 +55.241558,3.550858,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","33",,,"maximum",470 +55.245185,3.544010,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","33",,,"minimum",474 +55.248820,6.622266,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","33",,,"extend",479 +55.248914,5.943877,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","34",,,"unsharpen",486 +55.255683,5.321903,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","33",,,"combine",494 +55.261396,5.342222,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","32",,,"combine",502 +55.267117,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +55.267148,0.001408,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +55.267150,0.006784,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +55.396368,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +55.396595,39.981790,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","35",,,"gaussian_blur",522 +55.396914,48.993268,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","36",,,"gaussian_blur",527 +55.397230,40.669684,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","37",,,"gaussian_blur",532 +55.436723,16.024428,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","35",,,"sobel",536 +55.446029,12.557473,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","36",,,"sobel",540 +55.458690,3.549546,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","36",,,"maximum",544 +55.462329,3.543338,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","36",,,"minimum",548 +55.465976,6.603291,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","36",,,"extend",553 +55.466028,5.956261,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","37",,,"unsharpen",560 +55.472776,5.308847,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","36",,,"combine",568 +55.478286,5.328207,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","35",,,"combine",576 +55.483801,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +55.483818,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +55.483819,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +55.606050,0.001888,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +55.606245,38.900334,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","38",,,"gaussian_blur",596 +55.606616,48.349246,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","39",,,"gaussian_blur",601 +55.608196,41.049742,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","40",,,"gaussian_blur",606 +55.645274,16.103594,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","38",,,"sobel",610 +55.655106,12.314180,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","39",,,"sobel",614 +55.667510,3.549930,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","39",,,"maximum",618 +55.671119,3.544458,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","39",,,"minimum",622 +55.674734,6.565019,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","39",,,"extend",627 +55.674808,5.902406,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","40",,,"unsharpen",634 +55.681528,5.312047,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","39",,,"combine",642 +55.687113,5.339342,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","38",,,"combine",650 +55.692667,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +55.692687,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +55.692688,0.005151,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +55.815045,0.002208,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +55.815350,39.656483,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","41",,,"gaussian_blur",670 +55.815849,49.186577,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","42",,,"gaussian_blur",675 +55.816200,40.885712,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","43",,,"gaussian_blur",680 +55.855178,15.707153,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","41",,,"sobel",684 +55.865177,12.229925,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","42",,,"sobel",688 +55.877536,3.549610,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","42",,,"maximum",692 +55.881198,3.545578,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","42",,,"minimum",696 +55.884856,6.616667,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","42",,,"extend",701 +55.885029,5.965957,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","43",,,"unsharpen",708 +55.891769,5.326511,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","42",,,"combine",716 +55.897388,5.327471,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","41",,,"combine",724 +55.902973,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +55.903000,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +55.903001,0.005184,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +56.014290,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +56.014457,39.689794,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","44",,,"gaussian_blur",744 +56.014747,48.395805,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","45",,,"gaussian_blur",749 +56.014970,40.387800,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","46",,,"gaussian_blur",754 +56.054294,15.595762,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","44",,,"sobel",758 +56.063277,12.430338,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","45",,,"sobel",762 +56.075857,3.549514,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","45",,,"maximum",766 +56.079536,3.545258,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","45",,,"minimum",770 +56.083204,6.617851,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","45",,,"extend",775 +56.083271,5.947845,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","46",,,"unsharpen",782 +56.090062,5.313199,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","45",,,"combine",790 +56.095646,5.318159,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","44",,,"combine",798 +56.101264,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +56.101293,0.001248,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +56.101294,0.006336,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +56.221258,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +56.221423,39.575524,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","47",,,"gaussian_blur",818 +56.221746,48.371550,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","48",,,"gaussian_blur",823 +56.221935,40.283482,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","49",,,"gaussian_blur",828 +56.261118,15.594706,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","47",,,"sobel",832 +56.270231,12.518497,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","48",,,"sobel",836 +56.282853,3.548809,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","48",,,"maximum",840 +56.286474,3.545450,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","48",,,"minimum",844 +56.290104,6.629051,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","48",,,"extend",849 +56.290206,5.974085,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","49",,,"unsharpen",856 +56.296985,5.286415,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","48",,,"combine",864 +56.302564,5.332942,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","47",,,"combine",872 +56.308085,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +56.308106,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +56.308107,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +56.452438,0.001984,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +56.452824,39.777889,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","50",,,"gaussian_blur",892 +56.453415,49.154098,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","51",,,"gaussian_blur",897 +56.453800,41.031790,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","52",,,"gaussian_blur",902 +56.492771,15.681808,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","50",,,"sobel",906 +56.502716,12.067560,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","51",,,"sobel",910 +56.514873,3.549706,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","51",,,"maximum",914 +56.518511,3.544138,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","51",,,"minimum",918 +56.522142,6.600539,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","51",,,"extend",923 +56.522209,5.939078,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","52",,,"unsharpen",930 +56.528950,5.301999,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","51",,,"combine",938 +56.534443,5.325711,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","50",,,"combine",946 +56.540016,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +56.540039,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +56.540040,0.005152,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +56.656475,0.002080,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +56.656768,39.171946,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","53",,,"gaussian_blur",966 +56.657427,48.823191,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","54",,,"gaussian_blur",971 +56.657761,40.692723,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","55",,,"gaussian_blur",976 +56.696097,15.543059,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","53",,,"sobel",980 +56.706410,11.758796,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","54",,,"sobel",984 +56.718331,3.549418,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","54",,,"maximum",988 +56.722006,3.546505,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","54",,,"minimum",992 +56.725684,6.572540,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","54",,,"extend",997 +56.725757,5.903398,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","55",,,"unsharpen",1004 +56.732500,5.323055,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","54",,,"combine",1012 +56.738115,5.339502,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","53",,,"combine",1020 +56.743741,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +56.743769,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +56.743770,0.006688,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +56.876335,0.001952,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +56.876633,39.961727,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","56",,,"gaussian_blur",1040 +56.877041,49.046772,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","57",,,"gaussian_blur",1045 +56.877364,41.038286,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","58",,,"gaussian_blur",1050 +56.916723,15.740175,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","56",,,"sobel",1054 +56.926215,12.341731,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","57",,,"sobel",1058 +56.938662,3.549866,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","57",,,"maximum",1062 +56.942289,3.545514,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","57",,,"minimum",1066 +56.945939,6.609691,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","57",,,"extend",1071 +56.945996,5.938629,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","58",,,"unsharpen",1078 +56.952794,5.289391,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","57",,,"combine",1086 +56.958346,5.298895,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","56",,,"combine",1094 +56.963820,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +56.963841,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +56.963842,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +57.081576,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +57.081862,39.394695,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","59",,,"gaussian_blur",1114 +57.082192,48.285663,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","60",,,"gaussian_blur",1119 +57.082403,40.186458,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","61",,,"gaussian_blur",1124 +57.121397,15.976812,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","59",,,"sobel",1128 +57.130621,12.664510,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","60",,,"sobel",1132 +57.143366,3.549066,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","60",,,"maximum",1136 +57.147009,3.544169,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","60",,,"minimum",1140 +57.150674,6.608827,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","60",,,"extend",1145 +57.150739,5.942693,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","61",,,"unsharpen",1152 +57.157501,5.320911,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","60",,,"combine",1160 +57.163083,5.358990,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","59",,,"combine",1168 +57.168615,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +57.168636,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +57.168637,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +57.280914,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +57.281113,39.159370,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","62",,,"gaussian_blur",1188 +57.281359,47.764327,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","63",,,"gaussian_blur",1193 +57.281560,39.760321,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","64",,,"gaussian_blur",1198 +57.320436,15.564339,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","62",,,"sobel",1202 +57.329316,12.622911,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","63",,,"sobel",1206 +57.342054,3.549481,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","63",,,"maximum",1210 +57.345712,3.544266,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","63",,,"minimum",1214 +57.349406,6.577724,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","63",,,"extend",1219 +57.349499,5.911782,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","64",,,"unsharpen",1226 +57.356260,5.308751,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","63",,,"combine",1234 +57.361877,5.311023,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","62",,,"combine",1242 +57.367385,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +57.367411,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +57.367412,0.005472,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +57.479778,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +57.480035,39.915967,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","65",,,"gaussian_blur",1262 +57.480414,49.194737,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","66",,,"gaussian_blur",1267 +57.480748,41.032685,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","67",,,"gaussian_blur",1272 +57.520078,15.952173,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","65",,,"sobel",1276 +57.529737,12.281444,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","66",,,"sobel",1280 +57.542126,3.550826,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","66",,,"maximum",1284 +57.545777,3.545642,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","66",,,"minimum",1288 +57.549411,6.587707,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","66",,,"extend",1293 +57.549486,5.933638,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","67",,,"unsharpen",1300 +57.556168,5.305551,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","66",,,"combine",1308 +57.561715,5.325102,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","65",,,"combine",1316 +57.567218,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +57.567239,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +57.567240,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +57.679711,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +57.679887,39.751649,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","68",,,"gaussian_blur",1336 +57.680258,48.880278,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","69",,,"gaussian_blur",1341 +57.680643,40.708755,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","70",,,"gaussian_blur",1346 +57.719808,15.936268,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","68",,,"sobel",1350 +57.729237,12.479777,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","69",,,"sobel",1354 +57.741826,3.549641,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","69",,,"maximum",1358 +57.745484,3.545098,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","69",,,"minimum",1362 +57.749150,6.639514,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","69",,,"extend",1367 +57.749211,5.976357,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","70",,,"unsharpen",1374 +57.756003,5.334159,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","69",,,"combine",1382 +57.761580,5.355822,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","68",,,"combine",1390 +57.767162,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +57.767188,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +57.767189,0.005087,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +57.859908,0.001728,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +57.860108,39.356776,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","71",,,"gaussian_blur",1410 +57.860372,48.212000,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","72",,,"gaussian_blur",1415 +57.860581,40.084060,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","73",,,"gaussian_blur",1420 +57.899625,15.656465,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","71",,,"sobel",1424 +57.908792,12.498529,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","72",,,"sobel",1428 +57.921418,3.548106,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","72",,,"maximum",1432 +57.925079,3.544649,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","72",,,"minimum",1436 +57.928750,6.573723,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","72",,,"extend",1441 +57.928854,5.917766,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","73",,,"unsharpen",1448 +57.935638,5.327439,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","72",,,"combine",1456 +57.941259,5.359118,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","71",,,"combine",1464 +57.946901,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +57.946931,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +57.946932,0.005664,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +58.058346,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +58.058601,39.444805,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","74",,,"gaussian_blur",1484 +58.058959,48.261759,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","75",,,"gaussian_blur",1489 +58.059210,40.184187,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","76",,,"gaussian_blur",1494 +58.098178,15.950573,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","74",,,"sobel",1498 +58.107382,12.762173,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","75",,,"sobel",1502 +58.120282,3.548138,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","75",,,"maximum",1506 +58.123949,3.545290,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","75",,,"minimum",1510 +58.127615,6.615547,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","75",,,"extend",1515 +58.127698,5.968485,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","76",,,"unsharpen",1522 +58.134513,5.307183,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","75",,,"combine",1530 +58.140187,5.326799,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","74",,,"combine",1538 +58.145835,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +58.145867,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +58.145868,0.006367,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +58.252728,0.001856,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +58.252972,39.259785,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","77",,,"gaussian_blur",1558 +58.253430,48.401085,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","78",,,"gaussian_blur",1563 +58.253687,40.433175,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","79",,,"gaussian_blur",1568 +58.292361,15.599153,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","77",,,"sobel",1572 +58.301959,12.348868,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","78",,,"sobel",1576 +58.314415,3.549866,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","78",,,"maximum",1580 +58.318055,3.545322,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","78",,,"minimum",1584 +58.321695,6.629275,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","78",,,"extend",1589 +58.321760,5.959941,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","79",,,"unsharpen",1596 +58.328539,5.329711,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","78",,,"combine",1604 +58.334110,5.315119,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","77",,,"combine",1612 +58.339563,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +58.339585,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +58.339586,0.005056,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +58.435218,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +58.435460,39.553189,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","80",,,"gaussian_blur",1632 +58.435834,48.471964,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","81",,,"gaussian_blur",1637 +58.436054,40.419927,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","82",,,"gaussian_blur",1642 +58.475111,15.857870,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","80",,,"sobel",1646 +58.484446,12.521313,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","81",,,"sobel",1650 +58.497076,3.548970,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","81",,,"maximum",1654 +58.500713,3.543082,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","81",,,"minimum",1658 +58.504349,6.575580,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","81",,,"extend",1663 +58.504417,5.919078,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","82",,,"unsharpen",1670 +58.511163,5.300719,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","81",,,"combine",1678 +58.516696,5.332015,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","80",,,"combine",1686 +58.522188,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +58.522208,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +58.522209,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +58.619063,0.001856,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +58.619273,40.227130,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","83",,,"gaussian_blur",1706 +58.619597,49.150450,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","84",,,"gaussian_blur",1711 +58.619913,41.084685,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","85",,,"gaussian_blur",1716 +58.659602,15.954765,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","83",,,"sobel",1720 +58.668876,12.668958,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","84",,,"sobel",1724 +58.681648,3.548586,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","84",,,"maximum",1728 +58.685299,3.546026,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","84",,,"minimum",1732 +58.688958,6.602107,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","84",,,"extend",1737 +58.689018,5.929414,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","85",,,"unsharpen",1744 +58.695783,5.306223,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","84",,,"combine",1752 +58.701341,5.339087,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","83",,,"combine",1760 +58.706846,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +58.706871,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +58.706872,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +58.795898,0.002016,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +58.796246,39.164618,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","86",,,"gaussian_blur",1780 +58.796745,48.741240,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","87",,,"gaussian_blur",1785 +58.797112,40.484822,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","88",,,"gaussian_blur",1790 +58.835535,15.656625,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","86",,,"sobel",1794 +58.845598,12.084584,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","87",,,"sobel",1798 +58.857789,3.549290,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","87",,,"maximum",1802 +58.861442,3.546058,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","87",,,"minimum",1806 +58.865097,6.664858,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","87",,,"extend",1811 +58.865164,6.006084,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","88",,,"unsharpen",1818 +58.872089,5.317519,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","87",,,"combine",1826 +58.877659,5.302671,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","86",,,"combine",1834 +58.883141,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +58.883163,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +58.883164,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +58.983415,0.001888,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +58.983647,39.422278,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","89",,,"gaussian_blur",1854 +58.984052,48.513531,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","90",,,"gaussian_blur",1859 +58.984344,40.324376,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","91",,,"gaussian_blur",1864 +59.023241,15.595538,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","89",,,"sobel",1868 +59.032690,12.282212,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","90",,,"sobel",1872 +59.045090,3.549418,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","90",,,"maximum",1876 +59.048757,3.543818,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","90",,,"minimum",1880 +59.052415,6.603036,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","90",,,"extend",1885 +59.052544,5.929446,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","91",,,"unsharpen",1892 +59.059312,5.311407,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","90",,,"combine",1900 +59.064956,5.337742,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","89",,,"combine",1908 +59.070438,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +59.070460,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +59.070462,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +59.158783,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +59.159065,40.114940,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","92",,,"gaussian_blur",1928 +59.159312,52.809945,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","93",,,"gaussian_blur",1933 +59.159571,40.673715,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","94",,,"gaussian_blur",1938 +59.199344,29.946231,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","92",,,"sobel",1942 +59.212285,21.205276,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","93",,,"sobel",1946 +59.233565,3.547914,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","93",,,"maximum",1950 +59.237224,3.545866,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","93",,,"minimum",1954 +59.240896,6.604699,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","93",,,"extend",1959 +59.240983,5.946469,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","94",,,"unsharpen",1966 +59.247771,5.318543,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","93",,,"combine",1974 +59.253412,5.341135,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","92",,,"combine",1982 +59.258889,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +59.258910,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +59.258912,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +59.347556,0.001792,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +59.347854,39.520133,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","95",,,"gaussian_blur",2002 +59.348160,48.371069,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","96",,,"gaussian_blur",2007 +59.348369,40.327064,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","97",,,"gaussian_blur",2012 +59.387500,15.775695,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","95",,,"sobel",2016 +59.396696,12.537536,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","96",,,"sobel",2020 +59.409398,3.548650,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","96",,,"maximum",2024 +59.413145,3.544714,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","96",,,"minimum",2028 +59.416831,6.609244,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","96",,,"extend",2033 +59.416889,5.943557,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","97",,,"unsharpen",2040 +59.423679,5.315791,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","96",,,"combine",2048 +59.429236,5.331439,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","95",,,"combine",2056 +59.434814,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +59.434845,0.001216,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +59.434846,0.005728,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +59.542020,0.001760,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +59.542203,39.574179,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","98",,,"gaussian_blur",2076 +59.542583,48.595162,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","99",,,"gaussian_blur",2081 +59.542842,40.373623,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","100",,,"gaussian_blur",2086 +59.581926,15.714064,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","98",,,"sobel",2090 +59.591307,12.446658,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","99",,,"sobel",2094 +59.603835,3.548681,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","99",,,"maximum",2098 +59.607486,3.545386,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","99",,,"minimum",2102 +59.611124,6.603068,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","99",,,"extend",2107 +59.611244,5.965988,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","100",,,"unsharpen",2114 +59.617991,5.307695,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","99",,,"combine",2122 +59.623591,5.342799,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","98",,,"combine",2130 +59.629080,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +59.629101,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +59.629102,0.005088,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", +59.724616,0.001824,,,,,,,,,,"GeForce GTX 960 (0)",,,8192.000000,"0x1100a83000","[Unified Memory Memcpy HtoD]", +59.724901,39.499397,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","101",,,"gaussian_blur",2150 +59.725390,48.814103,8,8,1,8,8,1,24,0,100,"GeForce GTX 960 (0)","1","102",,,"gaussian_blur",2155 +59.725664,40.711538,8,8,1,8,8,1,24,0,36,"GeForce GTX 960 (0)","1","103",,,"gaussian_blur",2160 +59.764533,15.590482,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","101",,,"sobel",2164 +59.774322,12.149735,8,8,1,8,8,1,40,72,0,"GeForce GTX 960 (0)","1","102",,,"sobel",2168 +59.786571,3.549514,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","102",,,"maximum",2172 +59.790194,3.545706,16,1,1,128,1,1,8,0,0,"GeForce GTX 960 (0)","1","102",,,"minimum",2176 +59.793836,6.650299,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","102",,,"extend",2181 +59.793945,5.984388,16,1,1,128,1,1,12,0,0,"GeForce GTX 960 (0)","1","103",,,"unsharpen",2188 +59.800742,5.300623,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","102",,,"combine",2196 +59.806293,5.353742,16,1,1,128,1,1,13,0,0,"GeForce GTX 960 (0)","1","101",,,"combine",2204 +59.811819,,,,,,,,,,,,,,"PC 0x9913d8ae","0x1110000000","[Unified Memory CPU page faults]", +59.811844,0.001184,,,,,,,,,,"GeForce GTX 960 (0)",,,4096.000000,"0x1110000000","[Unified Memory Memcpy DtoH]", +59.811845,0.005120,,,,,,,,,,"GeForce GTX 960 (0)",,,61440.000000,"0x1110001000","[Unified Memory Memcpy DtoH]", diff --git a/data/nvprof_log/2020_07_20/summary.csv b/data/nvprof_log/2020_07_20/summary.csv new file mode 100644 index 00000000..20996202 --- /dev/null +++ b/data/nvprof_log/2020_07_20/summary.csv @@ -0,0 +1,6 @@ +benchmark,ct_overlap_perc,tc_overlap_perc,cc_overlap_perc,total_overlap_perc +b1,0.33736060497244375,0.28325313154792087,0.0,0.1539741101367165 +b5,0.24803521217460248,0.9309995299857262,0.31940070143967975,0.40841530163406864 +b6,0.0022776189801614216,0.9661026728181651,0.3637018277212265,0.3651186673761415 +b7,0.06038393891786274,0.46557339367676137,0.08448172861398016,0.12833553351558946 +b8,0.00011424194033166917,0.08086681678156217,0.641453353108711,0.6406625201084443 diff --git a/projects/resources/python/benchmark/bench/bench_72.py b/projects/resources/python/benchmark/bench/bench_72.py index cc292101..fdf1c79b 100644 --- a/projects/resources/python/benchmark/bench/bench_72.py +++ b/projects/resources/python/benchmark/bench/bench_72.py @@ -338,8 +338,8 @@ def execute(self) -> object: self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) self.benchmark.add_computation_time((end - start_comp) / 1_000_000_000) # Compute GPU result; - for i in range(self.size): - self.gpu_result[i] = self.auth1[i] + self.hub1[i] + # for i in range(self.size): + # self.gpu_result[i] = self.auth1[i] + self.hub1[i] self.benchmark.add_to_benchmark("gpu_result", 0) if self.benchmark.debug: diff --git a/projects/resources/python/plotting/compute_transfer_computation_overlap.py b/projects/resources/python/plotting/compute_transfer_computation_overlap.py new file mode 100755 index 00000000..f2e4ef5a --- /dev/null +++ b/projects/resources/python/plotting/compute_transfer_computation_overlap.py @@ -0,0 +1,307 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Mon Jul 20 10:36:56 2020 + +@author: alberto.parravicini +""" + +import pandas as pd +import json +import os +import numpy as np + +DEFAULT_RES_DIR = "../../../../data/nvprof_log" + +INPUT_DATE = "2020_07_20" +OUTPUT_DATE = "2020_07_20" +PLOT_DIR = "../../../../data/plots" + +BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} +DATA_DICT = { + "b1": "b1_31343.csv", + "b5": "b5_808.csv", + "b6": "b6_1989.csv", + "b7": "b7_2663.csv", + "b8": "b8_10958.csv", + } + +SKIP_SUMMARY_ROWS = { + "b1": 7, + "b5": 22, + "b6": 0, + "b7": 0, + "b8": 0, + } + +NVPROF_HEADER = ["start_ms", "duration_ms", "Grid X", "Grid Y", "Grid Z", "Block X", "Block Y", "Block Z", + "Registers Per Thread"," Static SMem", "Dynamic SMem", "Device", "Context", "Stream", + "transferred_data_byte", "Virtual Address", "name", "Correlation_ID"] +NVPROF_HEADER_FILTERED = NVPROF_HEADER[:2] + [NVPROF_HEADER[-4]] + [NVPROF_HEADER[-2]] + +OPERATIONS_TO_MERGE = set(["htod", "dtoh"]) + +NUM_ITER = 29 + +def get_overlap(a, b, c, d): + """ + Given 2 segments (a, b) and (c, d), get the overlap length of the 2 segments; + """ + s = max(a, c) + e = min(b, d) + return max(0, e - s), s, e + + +def get_overlap_ct(data): + """ + For each computation, look at the computations before it and compute the length of the overlap with them, in seconds. + By definition, a computation has 0 overlap with itself. + Keep only overlaps of computations with transfers; + """ + data["overlap_ct_sec"] = 0.0 + overlap_matrix = np.zeros((len(data), len(data))) + overlap_collection = set() + # Initial collection of overlaps; + for i, row_i in data.iterrows(): + overlaps = [] + for j, row_j in data.iterrows(): + if row_j["start_ms"] > row_i["end_ms"]: + break + if i != j and row_i["name"] not in OPERATIONS_TO_MERGE and row_j["name"] in OPERATIONS_TO_MERGE: + overlap, start, end = get_overlap(row_i["start_ms"], row_i["end_ms"], row_j["start_ms"], row_j["end_ms"]) + if overlap > 0: + # overlap_collection.add((start, end)) + # overlap_matrix[j, i] = overlap + overlaps += [(start, end)] + data.at[i, "overlap_ct_sec"] = get_total_segment_set_length(overlaps) + return data["overlap_ct_sec"].sum(), overlap_matrix + # return, overlap_matrix + + +def get_overlap_tc(data): + """ + For each computation, look at the computations before it and compute the length of the overlap with them, in seconds. + By definition, a computation has 0 overlap with itself. + Keep only overlaps of transfers with computations; + """ + data["overlap_tc_sec"] = 0.0 + overlap_matrix = np.zeros((len(data), len(data))) + overlap_collection = set() + # Initial collection of overlaps; + for i, row_i in data.iterrows(): + overlaps = [] + for j, row_j in data.iterrows(): + if row_j["start_ms"] > row_i["end_ms"]: + break + if i != j and row_i["name"] in OPERATIONS_TO_MERGE and row_j["name"] not in OPERATIONS_TO_MERGE: + overlap, start, end = get_overlap(row_i["start_ms"], row_i["end_ms"], row_j["start_ms"], row_j["end_ms"]) + if overlap > 0: + # overlap_collection.add((start, end)) + # overlap_matrix[j, i] = overlap + overlaps += [(start, end)] + data.at[i, "overlap_tc_sec"] = get_total_segment_set_length(overlaps) + return data["overlap_tc_sec"].sum(), overlap_matrix + # return get_total_segment_set_length(overlap_collection), overlap_matrix + + +def get_overlap_cc(data): + """ + For each computation, look at the computations before it and compute the length of the overlap with them, in seconds. + By definition, a computation has 0 overlap with itself. + Keep only overlaps of computations with computations; + """ + data["overlap_cc_sec"] = 0.0 + overlap_matrix = np.zeros((len(data), len(data))) + overlap_collection = set() + # Initial collection of overlaps; + for i, row_i in data.iterrows(): + overlaps = [] + for j, row_j in data.iterrows(): + # if row_j["start_ms"] > row_i["end_ms"]: + # break + if j >= i: + break + if i != j and row_i["name"] not in OPERATIONS_TO_MERGE and row_j["name"] not in OPERATIONS_TO_MERGE: + overlap, start, end = get_overlap(row_i["start_ms"], row_i["end_ms"], row_j["start_ms"], row_j["end_ms"]) + if overlap > 0: + # overlap_collection.add((start, end)) + # overlap_matrix[j, i] = overlap + overlaps += [(start, end)] + data.at[i, "overlap_cc_sec"] = get_total_segment_set_length(overlaps) + return data["overlap_cc_sec"].sum(), overlap_matrix + # return get_total_segment_set_length(overlap_collection), overlap_matrix + + +def get_overlap_total(data): + """ + For each computation, look at the computations before it and compute the length of the overlap with them, in seconds. + By definition, a computation has 0 overlap with itself; + """ + data["overlap_total_sec"] = 0.0 + overlap_matrix = np.zeros((len(data), len(data))) + overlap_collection = set() + # Initial collection of overlaps; + for i, row_i in data.iterrows(): + overlaps = [] + for j, row_j in data.iterrows(): + # if row_j["start_ms"] > row_i["end_ms"]: + # break + if j >= i: + break + if i != j: + overlap, start, end = get_overlap(row_i["start_ms"], row_i["end_ms"], row_j["start_ms"], row_j["end_ms"]) + if overlap > 0: + # overlap_collection.add((start, end)) + # overlap_matrix[j, i] = overlap + overlaps += [(start, end)] + data.at[i, "overlap_total_sec"] = get_total_segment_set_length(overlaps) + return data["overlap_total_sec"].sum(), overlap_matrix + # return get_total_segment_set_length(overlap_collection), overlap_matrix10 + + +def get_total_segment_set_length(segments): + + def merge_overlaps(a, b, c, d): + start = max(a, c) + end = min(b, d) + if start < end: + return (min(a, c), max(b, d)) + else: + return None + + overlap_collection = set(segments) + # Join overlaps until a fixed point is reached; + while True: + new_overlap_collection = set() + for i, s_i in enumerate(overlap_collection): + skip_set = set() + merge_done = False + for j, s_j in enumerate(overlap_collection): + if j >= i or j in skip_set: + break + overlap = merge_overlaps(*s_i, *s_j) + # If a new merged overlap is created, add it to the collection, else add both segments; + if overlap: + merge_done = True + skip_set.add(j) + new_overlap_collection.add(overlap) + if not merge_done: + new_overlap_collection.add(s_i) + + if (len(new_overlap_collection) == len(overlap_collection)) or len(overlap_collection) <= 1: + break + else: + # print(len(new_overlap_collection)) + overlap_collection = new_overlap_collection + + return sum([s[1] - s[0] for s in overlap_collection]) + + +if __name__ == "__main__": + + + output_res = [] + for b in DATA_DICT.keys(): + + input_file = os.path.join(DEFAULT_RES_DIR, INPUT_DATE, DATA_DICT[b]) + data = pd.read_csv(input_file, skiprows=5, names=NVPROF_HEADER) + + # Keep only a subset of columns; + data = data[NVPROF_HEADER_FILTERED] + + # Remove rows with NaN Duration; + data = data.dropna(subset=["duration_ms"]).reset_index(drop=True) + + # Fix data transfer column; + data["transferred_data_byte"] = data["transferred_data_byte"].apply(lambda x: int(str(x).split(".")[0]) if not pd.isnull(x) else 0) + + # Convert start from seconds to milliseconds; + data["start_ms"] *= 1000 + + # Set the start of the computation equal to 0; + data["start_ms"] -= data["start_ms"].iloc[0] + + + # Set the end of the computation; + data["end_ms"] = data["duration_ms"] + data["start_ms"] + + # Clean names of operations; + data["name"] = data["name"].replace({ + "[Unified Memory Memcpy HtoD]": "htod", + "[Unified Memory Memcpy DtoH]": "dtoh" + }) + + # Keep just the name of kernels; + data["name"] = data["name"].apply(lambda x: x.split("(")[0]) + + # Create a summary data-set where contiguous operations are merged; + data["group"] = -1 + current_group = -1 + current_operation = "" + for i, row in data.iterrows(): + tmp_operation = row["name"] + # Keep adding to the current operation, if the time difference between the 2 operations is small enough to consider them as contiguous; + if tmp_operation == current_operation and tmp_operation in OPERATIONS_TO_MERGE and i > 0 and np.abs(row["start_ms"] - data.at[i - 1, "end_ms"]) < 0.1: + data.at[i, "group"] = current_group + else: + # New group of operations; + current_operation = tmp_operation + current_group += 1 + data.at[i, "group"] = current_group + + summary = data.groupby(["group"]).agg({ + "start_ms": np.min, + "duration_ms": np.sum, + "transferred_data_byte": np.sum, + "name": lambda x: x.iloc[0], + "end_ms": np.max, + "group": lambda x: x.iloc[0], + }) + # Ignore the first iteration; + summary = summary.iloc[SKIP_SUMMARY_ROWS[b]:, :].reset_index(drop=True) + # # Set the start of the computation equal to 0; + # summary["end_ms"] -= summary["start_ms"].iloc[0] + # summary["start_ms"] -= summary["start_ms"].iloc[0] + + summary["end_ms"] = summary["duration_ms"] + summary["start_ms"] + + #%% + + # Compute 3 types of overlap: + # 1. Percentage of computation overlapped with transfer; + # summary["overlap_ct_sec"] = get_overlap_matrix_ct(summary).sum(axis=0) + # summary["overlap_ct_perc"] = summary["overlap_ct_sec"] / summary["duration_ms"] + # ct_overlap_perc = summary[~summary["name"].isin(OPERATIONS_TO_MERGE)]["overlap_ct_perc"].mean() + ct_overlap, ct_overlap_matrix = get_overlap_ct(summary) + ct_overlap_perc = ct_overlap / summary[~summary["name"].isin(OPERATIONS_TO_MERGE)]["duration_ms"].sum() + + # # 2. Percentage of transfer overlapped with computation; + # summary["overlap_tc_sec"] = get_overlap_matrix_tc(summary).sum(axis=0) + # summary["overlap_tc_perc"] = summary["overlap_tc_sec"] / summary["duration_ms"] + # tc_overlap_perc = summary[summary["name"].isin(OPERATIONS_TO_MERGE)]["overlap_tc_perc"].mean() + tc_overlap, tc_overlap_matrix = get_overlap_tc(summary) + tc_overlap_perc = tc_overlap / summary[summary["name"].isin(OPERATIONS_TO_MERGE)]["duration_ms"].sum() + # tc_overlap_perc = 0 + + # # 3. Percentage of computation overlapped with other computations; + # summary["overlap_cc_sec"] = get_overlap_matrix_cc(summary).sum(axis=0) + # summary["overlap_cc_perc"] = summary["overlap_cc_sec"] / summary["duration_ms"] + # cc_overlap_perc = summary[~summary["name"].isin(OPERATIONS_TO_MERGE)]["overlap_cc_perc"].mean() + cc_overlap, cc_overlap_matrix = get_overlap_cc(summary) + cc_overlap_perc = cc_overlap / summary[~summary["name"].isin(OPERATIONS_TO_MERGE)]["duration_ms"].sum() + # cc_overlap_perc = 0 + + total_overlap, total_overlap_matrix = get_overlap_total(summary) + total_overlap_perc = total_overlap / summary["duration_ms"].sum() + # total_overlap_perc = 0 + + print(f"Benchmark={b}; CT={100 *ct_overlap_perc:.2f}%; TC={100 * tc_overlap_perc:.2f}%; CC={100 * cc_overlap_perc:.2f}%; TOTAL={100 * total_overlap_perc:.2f}%") + output_res += [[b, ct_overlap_perc, tc_overlap_perc, cc_overlap_perc, total_overlap_perc]] + + # Store the DataFrame; + out_df = pd.DataFrame(output_res) + out_df.to_csv(os.path.join(DEFAULT_RES_DIR, INPUT_DATE, "summary.csv"), index=False, header=["benchmark", "ct_overlap_perc", "tc_overlap_perc", "cc_overlap_perc", "total_overlap_perc"]) + + + + diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 4e872720..b4e84810 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -329,74 +329,74 @@ def major_formatter(x, pos): data_cuda = load_data_cuda(INPUT_DATE_CUDA, skip_iter=3) data = join_tables(data_grcuda, data_cuda) - # sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - # plt.rcParams["font.family"] = ["Latin Modern Roman"] - # plt.rcParams['axes.titlepad'] = 20 - # plt.rcParams['axes.labelpad'] = 10 - # plt.rcParams['axes.titlesize'] = 22 - # plt.rcParams['axes.labelsize'] = 14 - - # # Lists of benchmarks and block sizes; - # benchmark_list = sorted(data["benchmark"].unique()) - # block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) - # num_col = len(benchmark_list) - # num_row = len(block_size_list) - # fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) - # gs = gridspec.GridSpec(num_row, num_col) - # plt.subplots_adjust(top=0.8, - # bottom=0.15, - # left=0.2, - # right=0.90, - # hspace=1.1, - # wspace=0.15) + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams['axes.titlepad'] = 20 + plt.rcParams['axes.labelpad'] = 10 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + + # Lists of benchmarks and block sizes; + benchmark_list = sorted(data["benchmark"].unique()) + block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) + num_col = len(benchmark_list) + num_row = len(block_size_list) + fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) + gs = gridspec.GridSpec(num_row, num_col) + plt.subplots_adjust(top=0.8, + bottom=0.15, + left=0.2, + right=0.90, + hspace=1.1, + wspace=0.15) - # exec_time_axes = [] - # for b_i, b in enumerate(benchmark_list): - # for block_size_i, block_size in enumerate(block_size_list): - # curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) - # exec_time_axes += [build_exec_time_plot_grcuda_cuda(curr_res, gs, block_size_i, b_i)] + exec_time_axes = [] + for b_i, b in enumerate(benchmark_list): + for block_size_i, block_size in enumerate(block_size_list): + curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) + exec_time_axes += [build_exec_time_plot_grcuda_cuda(curr_res, gs, block_size_i, b_i)] - # plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") - # plt.annotate("Speedup", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") - # plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") + plt.annotate("Speedup", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") - # save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_{}.{}", OUTPUT_DATE) + save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_{}.{}", OUTPUT_DATE) - # #%% Similar plot, but all block sizes are on 1 row; - - # sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - # plt.rcParams["font.family"] = ["Latin Modern Roman"] - # plt.rcParams['axes.titlepad'] = 20 - # plt.rcParams['axes.labelpad'] = 10 - # plt.rcParams['axes.titlesize'] = 22 - # plt.rcParams['axes.labelsize'] = 14 - - # # Lists of benchmarks and block sizes; - # benchmark_list = sorted(data["benchmark"].unique()) - # policy_list = sorted(data["exec_policy"].unique()) - # num_col = len(benchmark_list) - # num_row = len(policy_list) - # fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) - # gs = gridspec.GridSpec(num_row, num_col) - # plt.subplots_adjust(top=0.8, - # bottom=0.14, - # left=0.1, - # right=0.95, - # hspace=0.8, - # wspace=0.15) + #%% Similar plot, but all block sizes are on 1 row; + + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams['axes.titlepad'] = 20 + plt.rcParams['axes.labelpad'] = 10 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + + # Lists of benchmarks and block sizes; + benchmark_list = sorted(data["benchmark"].unique()) + policy_list = sorted(data["exec_policy"].unique()) + num_col = len(benchmark_list) + num_row = len(policy_list) + fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) + gs = gridspec.GridSpec(num_row, num_col) + plt.subplots_adjust(top=0.8, + bottom=0.14, + left=0.1, + right=0.95, + hspace=0.8, + wspace=0.15) - # exec_time_axes = [] - # for b_i, b in enumerate(benchmark_list): - # for p_i, p in enumerate(policy_list): - # curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) - # exec_time_axes += [build_exec_time_plot_grcuda_cuda_compact(curr_res, gs, p_i, b_i)] + exec_time_axes = [] + for b_i, b in enumerate(benchmark_list): + for p_i, p in enumerate(policy_list): + curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) + exec_time_axes += [build_exec_time_plot_grcuda_cuda_compact(curr_res, gs, p_i, b_i)] - # plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") - # plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") - # plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") + plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") - # save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_compact_{}.{}", OUTPUT_DATE) + save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_compact_{}.{}", OUTPUT_DATE) #%% Ridge plot with distributions; diff --git a/projects/resources/python/plotting/plot_transfer_computation_overlap.py b/projects/resources/python/plotting/plot_transfer_computation_overlap.py new file mode 100755 index 00000000..b75f51b3 --- /dev/null +++ b/projects/resources/python/plotting/plot_transfer_computation_overlap.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Jul 21 09:45:50 2020 + +@author: alberto.parravicini +""" + +import os +import numpy as np +import pandas as pd +import seaborn as sns +import matplotlib.pyplot as plt +import matplotlib.gridspec as gridspec +from scipy.stats.mstats import gmean +from matplotlib.patches import Patch, Rectangle +from matplotlib.collections import PatchCollection, LineCollection +import matplotlib.lines as lines +from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot + + +DEFAULT_RES_DIR = "../../../../data/nvprof_log" + +INPUT_DATE = "2020_07_20" +OUTPUT_DATE = "2020_07_20" +PLOT_DIR = "../../../../data/plots" + +BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} + +LABEL_DICT = {"ct_overlap_perc": "CT", "tc_overlap_perc": "TC", "cc_overlap_perc": "CC", "total_overlap_perc": "TOT", "fake_perc": ""} +LABEL_LEGEND_DICT = {"ct_overlap_perc": "CT, computation w.r.t transfer", + "tc_overlap_perc": "TC, transfer w.r.t computation", + "cc_overlap_perc": "CC, computation w.r.t transfer", + "total_overlap_perc": "TOT, any type of overlap" + } + + +if __name__ == "__main__": + data = pd.read_csv(os.path.join(DEFAULT_RES_DIR, INPUT_DATE, "summary.csv")) + + # Add a fake column for visualization; + data["fake_perc"] = 0.0 + + # Pivot the dataset; + data_pivot = pd.melt(data, id_vars=data.columns[0], value_vars=data.columns[1:], + var_name="overlap_type", value_name="overlap_perc") + data_pivot = data_pivot.sort_values(list(data_pivot.columns[:1]), ignore_index=True, kind="mergesort") + + # Remove the fake column for the last benchmark; + last_b = data_pivot["benchmark"].unique()[-1] + data_pivot = data_pivot[~((data_pivot["benchmark"] == last_b) & (data_pivot["overlap_type"] == "fake_perc"))] + + # Obtain x values for the plot; + x = np.arange(len(data_pivot)) + # Obtain labels; + x_labels = [LABEL_DICT[l] for l in data_pivot["overlap_type"]] + # Obtain y; + y = data_pivot["overlap_perc"] + + sns.set_style("white", {"ytick.left": True}) + plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] + plt.rcParams['axes.titlepad'] = 25 + plt.rcParams['axes.labelpad'] = 9 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + plt.rcParams['xtick.major.pad'] = 1 + + num_col = len(data_pivot["benchmark"].unique()) + # fig = plt.figure(figsize=(1.2 * num_col, 3)) + # gs = gridspec.GridSpec(1, num_col) + + fig = plt.figure(figsize=(1.2 * num_col, 2.2)) + ax = fig.add_subplot() + plt.subplots_adjust(top=0.75, + bottom=0.15, + left=0.08, + right=.99, + hspace=0.9, + wspace=0.0) + +# b3 = CEF0E4 +# b8 = 7bd490 +# y3= FFAB69 +# r5 = F07B71 + palette = (["#FFA728", "#FF9642", "#FFAB69", "#F07B71"] + ["#ffffff"]) * num_col + palette = ([COLORS["b3"], COLORS["b8"], COLORS["y3"], COLORS["r5"], COLORS["bb4"], COLORS["bb5"]][:len(LABEL_DICT) - 1] + ["#ffffff"]) * num_col + palette = palette[:len(x)] + edgecolor = ["#ffffff" if (p == "#ffffff" or y[i] <= 0) else "#2f2f2f" for i, p in enumerate(palette)] + + bar_width = 0.8 + + white_bars = (([1] * len(LABEL_LEGEND_DICT) + [0]) * num_col)[:-1] + edgecolor_white_bars = ["#ffffff" if p == "#ffffff" else "#0f0f0f" for i, p in enumerate(palette)] + ax.bar(x, white_bars, bar_width, color="0.8", edgecolor=edgecolor_white_bars, alpha=0.5) + ax.bar(x, y, bar_width, color=palette, edgecolor=edgecolor) + ax.set_xticks(x) + ax.set_xticklabels(x_labels, fontsize=8) + + ax.set_xlim((0 - bar_width / 2 - 0.2, len(x) - 1 + bar_width / 2 + 0.2)) + ax.set_ylim((0, 1)) + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(6)) + ax.set_yticklabels(labels=[f"{int(l * 100)}%" for l in ax.get_yticks()], ha="right", fontsize=9) + ax.grid(True, axis="y") + + # Add benchmark name; + x_label_pos = 1 / (2 * len(BENCHMARK_NAMES)) + def get_x_label_pos(i): + base_pos = 2 * x_label_pos * i + x_label_pos + if i == 0: + return base_pos - 0.015 + elif i == len(BENCHMARK_NAMES) - 1: + return base_pos + 0.015 + else: + return base_pos + for i, b in enumerate(BENCHMARK_NAMES): + ax.annotate(f"{BENCHMARK_NAMES[b]}", xy=(get_x_label_pos(i), -0.22), fontsize=10, ha="center", xycoords="axes fraction") + + # Legend; + labels = [LABEL_LEGEND_DICT[l] for l in list(LABEL_DICT.keys())[:-1]] + custom_lines = [Patch(facecolor=palette[i], edgecolor="#2f2f2f", label=l) + for i, l in enumerate(labels)] + leg = fig.legend(custom_lines, labels, bbox_to_anchor=(0.98, 1), fontsize=8, ncol=1) + leg.set_title("Type of overlap") + leg._legend_box.align = "left" + leg.get_frame().set_facecolor('white') + + plt.suptitle("Amount of overlap for each benchmark", fontsize=12, x=.05, y=0.95, ha="left") + + save_plot(PLOT_DIR, "overlap_{}.{}", OUTPUT_DATE) \ No newline at end of file From 77e90a623aabdd7951248ef483b004e02d7815d9 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 21 Jul 2020 14:44:31 +0200 Subject: [PATCH 123/236] fixed overlap plot --- .../python/plotting/plot_transfer_computation_overlap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/resources/python/plotting/plot_transfer_computation_overlap.py b/projects/resources/python/plotting/plot_transfer_computation_overlap.py index b75f51b3..7c718f6f 100755 --- a/projects/resources/python/plotting/plot_transfer_computation_overlap.py +++ b/projects/resources/python/plotting/plot_transfer_computation_overlap.py @@ -30,7 +30,7 @@ LABEL_DICT = {"ct_overlap_perc": "CT", "tc_overlap_perc": "TC", "cc_overlap_perc": "CC", "total_overlap_perc": "TOT", "fake_perc": ""} LABEL_LEGEND_DICT = {"ct_overlap_perc": "CT, computation w.r.t transfer", "tc_overlap_perc": "TC, transfer w.r.t computation", - "cc_overlap_perc": "CC, computation w.r.t transfer", + "cc_overlap_perc": "CC, computation w.r.t computation", "total_overlap_perc": "TOT, any type of overlap" } From e0f30931e5fec321ea031eca2e7d6579cb5cbf3b Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 21 Jul 2020 15:14:35 +0200 Subject: [PATCH 124/236] added speedup to overlap plot --- .../python/plotting/plot_speedup_baseline.py | 1 + .../plot_transfer_computation_overlap.py | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index f9dffcec..2463a343 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -114,6 +114,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) ax = sns.lineplot(x="size_str", y="computation_speedup", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, err_style="bars", linewidth=2, legend=None, sort=False, ci=None, zorder=2) + print(data.groupby(["size_str", "block_size_str"])["computation_speedup"].apply(gmean)) data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["computation_speedup"].apply(gmean).reset_index() order = data["block_size_str"].unique() ax = sns.scatterplot(x="size_str", y="computation_speedup", hue="block_size_str", data=data_averaged, palette=palette, ax=ax, edgecolor="#0f0f0f", diff --git a/projects/resources/python/plotting/plot_transfer_computation_overlap.py b/projects/resources/python/plotting/plot_transfer_computation_overlap.py index 7c718f6f..f0a50946 100755 --- a/projects/resources/python/plotting/plot_transfer_computation_overlap.py +++ b/projects/resources/python/plotting/plot_transfer_computation_overlap.py @@ -34,6 +34,13 @@ "total_overlap_perc": "TOT, any type of overlap" } +SPEEDUPS = { + "b1": 1.17, + "b5": 1.34, + "b6": 1.25, + "b7": 1.14, + "b8": 1.30, + } if __name__ == "__main__": data = pd.read_csv(os.path.join(DEFAULT_RES_DIR, INPUT_DATE, "summary.csv")) @@ -69,19 +76,15 @@ # fig = plt.figure(figsize=(1.2 * num_col, 3)) # gs = gridspec.GridSpec(1, num_col) - fig = plt.figure(figsize=(1.2 * num_col, 2.2)) + fig = plt.figure(figsize=(1.2 * num_col, 2.5)) ax = fig.add_subplot() plt.subplots_adjust(top=0.75, - bottom=0.15, + bottom=0.25, left=0.08, right=.99, hspace=0.9, wspace=0.0) -# b3 = CEF0E4 -# b8 = 7bd490 -# y3= FFAB69 -# r5 = F07B71 palette = (["#FFA728", "#FF9642", "#FFAB69", "#F07B71"] + ["#ffffff"]) * num_col palette = ([COLORS["b3"], COLORS["b8"], COLORS["y3"], COLORS["r5"], COLORS["bb4"], COLORS["bb5"]][:len(LABEL_DICT) - 1] + ["#ffffff"]) * num_col palette = palette[:len(x)] @@ -114,7 +117,9 @@ def get_x_label_pos(i): else: return base_pos for i, b in enumerate(BENCHMARK_NAMES): - ax.annotate(f"{BENCHMARK_NAMES[b]}", xy=(get_x_label_pos(i), -0.22), fontsize=10, ha="center", xycoords="axes fraction") + ax.annotate(f"{BENCHMARK_NAMES[b]}", xy=(get_x_label_pos(i), -0.25), fontsize=10, ha="center", xycoords="axes fraction") + ax.annotate(f"Speedup: ", xy=(get_x_label_pos(i) - 0.02, -0.4), fontsize=8, ha="center", xycoords="axes fraction") + ax.annotate(f"{SPEEDUPS[b]:.2f}x", xy=(get_x_label_pos(i) + 0.045, -0.4), fontsize=8, ha="center", xycoords="axes fraction", color=COLORS["r1"]) # Legend; labels = [LABEL_LEGEND_DICT[l] for l in list(LABEL_DICT.keys())[:-1]] From eb515ddfe7438973460aa80a5f7386a04705ef4c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 21 Jul 2020 19:00:20 +0200 Subject: [PATCH 125/236] updated palette --- .../python/plotting/plot_transfer_computation_overlap.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/projects/resources/python/plotting/plot_transfer_computation_overlap.py b/projects/resources/python/plotting/plot_transfer_computation_overlap.py index f0a50946..9229be0a 100755 --- a/projects/resources/python/plotting/plot_transfer_computation_overlap.py +++ b/projects/resources/python/plotting/plot_transfer_computation_overlap.py @@ -84,9 +84,10 @@ right=.99, hspace=0.9, wspace=0.0) - - palette = (["#FFA728", "#FF9642", "#FFAB69", "#F07B71"] + ["#ffffff"]) * num_col - palette = ([COLORS["b3"], COLORS["b8"], COLORS["y3"], COLORS["r5"], COLORS["bb4"], COLORS["bb5"]][:len(LABEL_DICT) - 1] + ["#ffffff"]) * num_col + p = [COLORS["b3"], COLORS["b8"], COLORS["y3"], COLORS["r5"], COLORS["bb4"], COLORS["bb5"]] + # p = ["#FFEDAB", "#FFDB8C", "#FFC773", "#FFAF66"] + p = ["#C8FCB6", "#96DE9B", "#66B784", "#469E7B"] + palette = (p[:len(LABEL_DICT) - 1] + ["#ffffff"]) * num_col palette = palette[:len(x)] edgecolor = ["#ffffff" if (p == "#ffffff" or y[i] <= 0) else "#2f2f2f" for i, p in enumerate(palette)] @@ -119,7 +120,7 @@ def get_x_label_pos(i): for i, b in enumerate(BENCHMARK_NAMES): ax.annotate(f"{BENCHMARK_NAMES[b]}", xy=(get_x_label_pos(i), -0.25), fontsize=10, ha="center", xycoords="axes fraction") ax.annotate(f"Speedup: ", xy=(get_x_label_pos(i) - 0.02, -0.4), fontsize=8, ha="center", xycoords="axes fraction") - ax.annotate(f"{SPEEDUPS[b]:.2f}x", xy=(get_x_label_pos(i) + 0.045, -0.4), fontsize=8, ha="center", xycoords="axes fraction", color=COLORS["r1"]) + ax.annotate(f"{SPEEDUPS[b]:.2f}x", xy=(get_x_label_pos(i) + 0.045, -0.4), fontsize=8, ha="center", xycoords="axes fraction", color="#469E7B") # Legend; labels = [LABEL_LEGEND_DICT[l] for l in list(LABEL_DICT.keys())[:-1]] From 742bfafea7c719c4e22bc999facda2e68218be74 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 28 Jul 2020 13:08:30 +0200 Subject: [PATCH 126/236] added device memory analysis --- .gitignore | 1 + RESULTS.md | 13 +- .../benchmark/benchmark_nvprof_wrapper.py | 171 ++++++++++++ .../python/plotting/plot_memory_throughput.py | 263 ++++++++++++++++++ .../resources/python/plotting/plot_utils.py | 1 + 5 files changed, 448 insertions(+), 1 deletion(-) create mode 100644 projects/resources/python/benchmark/benchmark_nvprof_wrapper.py create mode 100755 projects/resources/python/plotting/plot_memory_throughput.py diff --git a/.gitignore b/.gitignore index 78e39a7d..657013b2 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,4 @@ mx.grcuda/eclipse-launches **.nvvp projects/resources/cuda/bin data/results/* +data/nvprof_log/* diff --git a/RESULTS.md b/RESULTS.md index f052325c..2d85d407 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -220,4 +220,15 @@ Measures are taken for the largest data-size in the evaluation (for each benchma We observe how in `b1` the speedup comes exclusively from the overlap of transfer and computation, while in `b8` the speedup is caused by the overlap of kernels which, if executed serially, do not fill the GPU resources. Very different values of **CT** and **TC** (as in `b5`) indicate that, although the data-transfer is completely overlapped to GPU computations, the computation lasts much longer than the data-transfer, and part of the computation cannot be overlapped. - In all likelihood, a more optimized kernel computation would result in higher **CT** overlap, and better speedup. \ No newline at end of file + In all likelihood, a more optimized kernel computation would result in higher **CT** overlap, and better speedup. + +![Memory throughput](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_28/memory_throughput_2020_07_28.png) + +Using `nvprof` we measure the total amount of bytes read/written by each kernel, and analyse how the GPU memory throughput is affected by space-sharing. +Note that `nvprof` affects the kernel execution and limits the execution of concurrent kernels due to the high overhead introduced by collecting memory access metrics for each kernel. +Instead, we measure the execution times obtained without metric collection (so that `nvprof` influence over the execution times is minimal) +and combine them with memory access metrics collected in a separate run. +The assumption here is the total amount of memory accesses is not significantly impacted by space sharing, and this evaluation is still useful to obtain performance insights. +Indeed, we see that for kernels that contain computation overlap (e.g. `b6` and `b8`) the increase in memory throughput is significant, and in-line with the total speedup observed for these benchmarks. +As expected, `b1` does not have any increase in memory throughput, as its speedup comes exclusively from transfer overlap. + Similarly, `b5` shows a small memory throughput increase, as the benchmark main bottleneck by the arithmetic intensity, and a significant part of the speedup comes from transfer overlapping. \ No newline at end of file diff --git a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py new file mode 100644 index 00000000..b0a4e500 --- /dev/null +++ b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py @@ -0,0 +1,171 @@ +import argparse +import subprocess +import time +import os +from datetime import datetime +from benchmark_result import BenchmarkResult +from benchmark_main import create_block_size_list +from java.lang import System + +############################## +############################## + +DEFAULT_NUM_BLOCKS = 64 + +# Benchmark settings; +benchmarks = [ + "b1", + # "b4", + "b5", + "b6", + "b7", + "b8", +] + +num_elem = { + "b1": [80_000_000], + "b4": [40000000], + "b5": [10_000_000], + "b6": [800000], + "b7": [15_000_000], + "b8": [4800], +} + +exec_policies = ["default", "sync"] + +new_stream_policies = ["always-new"] + +parent_stream_policies = ["disjoint"] + +dependency_policies = ["with-const"] + +block_sizes_1d_dict = { + "b1": 32, + "b4": 32, + "b5": 256, + "b6": 32, + "b7": 32, + "b8": 128, +} + +block_sizes_2d_dict = { + "b1": 8, + "b4": 8, + "b5": 8, + "b6": 8, + "b7": 8, + "b8": 8, +} + +############################## +############################## + +LOG_FOLDER = "../../../../data/nvprof_log" +METRICS = "--metrics 'dram_read_throughput,dram_write_throughput,dram_read_bytes,dram_write_bytes,l2_global_atomic_store_bytes,l2_global_load_bytes,l2_global_reduction_bytes,l2_local_global_store_bytes,l2_local_load_bytes,l2_read_throughput,l2_write_throughput,inst_issued,ipc'" + +# This path is hard-coded because nvprof is executed as root, +# and the superuser doesn't have Graalpython in its environment; +GRAALPYTHON_FOLDER = "/home/users/alberto.parravicini/Documents/graalpython_venv/bin" +GRCUDA_HOME = "/home/users/alberto.parravicini/Documents/grcuda" + +GRAALPYTHON_CMD = """/usr/local/cuda/bin/nvprof --csv --log-file "{}" --print-gpu-trace {} --profile-from-start off --profile-child-processes \ +{}/graalpython --vm.XX:MaxHeapSize=24G --jvm --polyglot --WithThread --grcuda.RetrieveNewStreamPolicy={} \ +--grcuda.ExecutionPolicy={} --grcuda.DependencyPolicy={} --grcuda.RetrieveParentStreamPolicy={} benchmark_main.py \ +-i {} -n {} --reinit false --realloc false -b {} --block_size_1d {} --block_size_2d {} --no_cpu_validation {} {} --nvprof +""" + + +def execute_grcuda_benchmark(benchmark, size, exec_policy, new_stream_policy, + parent_stream_policy, dependency_policy, num_iter, debug, time_phases): + block_size = (block_sizes_1d_dict[b], block_sizes_2d_dict[b]) + for m in [True]: #[True, False]: + if debug: + BenchmarkResult.log_message("") + BenchmarkResult.log_message("") + BenchmarkResult.log_message("#" * 30) + BenchmarkResult.log_message(f"Benchmark {i + 1}/{tot_benchmarks}") + BenchmarkResult.log_message(f"benchmark={b}, size={n}," + f"block size={block_size}, " + f"exec policy={exec_policy}, " + f"new stream policy={new_stream_policy}, " + f"parent stream policy={parent_stream_policy}, " + f"dependency policy={dependency_policy}, " + f"time_phases={time_phases}, " + f"collect metrics={m}") + BenchmarkResult.log_message("#" * 30) + BenchmarkResult.log_message("") + BenchmarkResult.log_message("") + + log_folder = f"{datetime.now().strftime('%Y_%m_%d')}" + # Create a folder if it doesn't exist; + output_folder_path = os.path.join(LOG_FOLDER, log_folder) + if not os.path.exists(output_folder_path): + if debug: + BenchmarkResult.log_message(f"creating result folder: {output_folder_path}") + os.mkdir(output_folder_path) + file_name = f"{b}_{exec_policy}_{'metric' if m else 'nometric'}_%p.csv" + output_path = os.path.join(output_folder_path, file_name) + + + benchmark_cmd = GRAALPYTHON_CMD.format(output_path, METRICS if m else "", GRAALPYTHON_FOLDER, + new_stream_policy, exec_policy, dependency_policy, parent_stream_policy, + num_iter, size, benchmark, block_size[0], block_size[1], + "-d" if debug else "", "-p" if time_phases else "") + start = System.nanoTime() + result = subprocess.run(benchmark_cmd, + shell=True, + stdout=subprocess.STDOUT, + cwd=f"{GRCUDA_HOME}/projects/resources/python/benchmark") + result.check_returncode() + end = System.nanoTime() + if debug: + BenchmarkResult.log_message(f"Benchmark total execution time: {(end - start) / 1_000_000_000:.2f} seconds") + +############################## +############################## + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description="Wrap the GrCUDA benchmark to specify additional settings, and run nvprof to collect metrics") + + parser.add_argument("-d", "--debug", action="store_true", + help="If present, print debug messages") + parser.add_argument("-i", "--num_iter", metavar="N", type=int, default=BenchmarkResult.DEFAULT_NUM_ITER, + help="Number of times each benchmark is executed") + parser.add_argument("-g", "--num_blocks", metavar="N", type=int, default=DEFAULT_NUM_BLOCKS, + help="Number of blocks in each kernel, when applicable") + parser.add_argument("-p", "--time_phases", action="store_true", + help="Measure the execution time of each phase of the benchmark;" + " note that this introduces overheads, and might influence the total execution time") + + # Parse the input arguments; + args = parser.parse_args() + + debug = args.debug if args.debug else BenchmarkResult.DEFAULT_DEBUG + num_iter = args.num_iter if args.num_iter else BenchmarkResult.DEFAULT_NUM_ITER + time_phases = args.time_phases + num_blocks = args.num_blocks + + def tot_benchmark_count(): + tot = 0 + for b in benchmarks: + tot += len(num_elem[b]) * len(exec_policies) + return tot + + output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + + # Execute each test; + i = 0 + tot_benchmarks = tot_benchmark_count() + for b in benchmarks: + for n in num_elem[b]: + for exec_policy in exec_policies: + # GrCUDA Benchmarks; + for new_stream_policy in new_stream_policies: + for parent_stream_policy in parent_stream_policies: + for dependency_policy in dependency_policies: + execute_grcuda_benchmark(b, n, exec_policy, new_stream_policy, + parent_stream_policy, dependency_policy, num_iter, + debug, time_phases) + i += 1 diff --git a/projects/resources/python/plotting/plot_memory_throughput.py b/projects/resources/python/plotting/plot_memory_throughput.py new file mode 100755 index 00000000..503b375e --- /dev/null +++ b/projects/resources/python/plotting/plot_memory_throughput.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Tue Jul 28 09:10:07 2020 + +@author: alberto.parravicini +""" + + +import pandas as pd +import json +import os +import numpy as np +from compute_transfer_computation_overlap import get_overlap, get_total_segment_set_length + +import seaborn as sns +import matplotlib.pyplot as plt +import matplotlib.gridspec as gridspec +from scipy.stats.mstats import gmean +from matplotlib.patches import Patch, Rectangle +from matplotlib.collections import PatchCollection, LineCollection +import matplotlib.lines as lines +from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot + + +DEFAULT_RES_DIR = "../../../../data/nvprof_log" + +INPUT_DATE = "2020_07_22" +OUTPUT_DATE = "2020_07_28" +PLOT_DIR = "../../../../data/plots" + +BENCHMARK_NAMES = { + "b1": "Vector\nSquares", + "b5": "B&S", + "b6": "ML\nEnsemble", + "b7": "HITS", + "b8": "Images" + } +POLICIES = ["sync", "default"] +POLICIES_DICT = {"default": "DAG Scheduling", "sync": "Serial Scheduling"} + +NVPROF_HEADER_NOMETRIC = ["start_ms", "duration_ms", "Grid X", "Grid Y", "Grid Z", "Block X", "Block Y", "Block Z", + "Registers Per Thread"," Static SMem", "Dynamic SMem", "Device", "Context", "Stream", + "transferred_data_byte", "Virtual Address", "name", "Correlation_ID"] +NVPROF_HEADER_NOMETRIC_FILTERED = NVPROF_HEADER_NOMETRIC[:2] + [NVPROF_HEADER_NOMETRIC[-2]] + +NVPROF_HEADER_METRIC = ["Device", "Context", "Stream", "name", "Correlation_ID", "dram_read_throughput", + "dram_read_transactions", "dram_read_bytes", "dram_write_bytes"] +NVPROF_HEADER_METRIC_FILTERED = [NVPROF_HEADER_METRIC[3]] + [NVPROF_HEADER_METRIC[5]] + NVPROF_HEADER_METRIC[7:] + +OPERATIONS_TO_MERGE = set(["htod", "dtoh"]) + +NUM_ITER = 30 + +# Maximum memory bandiwth, in GB/s. of the GPU (currently: GTX 960); +MAX_GPU_BANDWIDTH = 112 + + +def load_data(b, p, files): + ############################## + # Process file with execution time; + ############################## + + input_file = os.path.join(DEFAULT_RES_DIR, INPUT_DATE, files_dict[(b, p, "nometric")]) + data_nometric = pd.read_csv(input_file, skiprows=5, names=NVPROF_HEADER_NOMETRIC) + + # Keep only a subset of columns; + data_nometric = data_nometric[NVPROF_HEADER_NOMETRIC_FILTERED] + + # Remove rows with NaN Duration; + data_nometric = data_nometric.dropna(subset=["duration_ms"]).reset_index(drop=True) + + # Convert start from seconds to milliseconds; + data_nometric["start_ms"] *= 1000 + + # Set the start of the computation equal to 0; + data_nometric["start_ms"] -= data_nometric["start_ms"].iloc[0] + + # Set the end of the computation; + data_nometric["end_ms"] = data_nometric["duration_ms"] + data_nometric["start_ms"] + + # Clean names of operations; + data_nometric["name"] = data_nometric["name"].replace({ + "[Unified Memory Memcpy HtoD]": "htod", + "[Unified Memory Memcpy DtoH]": "dtoh" + }) + + # Keep only kernel computations; + data_nometric = data_nometric[~data_nometric["name"].isin(["htod", "dtoh"])].reset_index(drop=True) + + # Keep just the name of kernels; + data_nometric["name"] = data_nometric["name"].apply(lambda x: x.split("(")[0]) + + ############################## + # Process file with memory access information; + ############################## + + input_file = os.path.join(DEFAULT_RES_DIR, INPUT_DATE, files_dict[(b, p, "metric")]) + data_metric = pd.read_csv(input_file, skiprows=6, names=NVPROF_HEADER_METRIC) + # Keep only a subset of columns; + data_metric = data_metric[NVPROF_HEADER_METRIC_FILTERED] + + # Keep only kernel computations; + data_metric["name"] = data_metric["name"].apply(lambda x: x.split("(")[0]) + + # Rename the "name" column to allow debugging after merging; + data_metric = data_metric.rename(columns={"name": "name_metric"}) + + # Turn bytes into GB; + data_metric["dram_read_bytes"] /= 2**30 + data_metric["dram_write_bytes"] /= 2**30 + + # Concatenate the 2 tables; + data = pd.concat([data_nometric, data_metric], axis=1) + + # Look for inconsistencies; + assert(len(data_metric) == len(data_nometric)) + # Note: this check can fail, as kernels with dependencies can be scheduled in different order from the sync kernels. + # It doesn't matter for the memory throughput computation, as we consider the total execution time; + # assert((data["name"] == data["name_metric"]).all()) + + # Check if read throughput is close to the one computed by nvprof, for debugging. + # This is relevant only for "sync" policies, as the execution times for the 2 tables are consistent; + data["estimated_read_througput"] = data["dram_read_bytes"] / (data["duration_ms"] / 1000) + + # Add index columns; + data["benchmark"] = b + data["policy"] = p + return data + + +def get_computation_time_with_overlap(data): + """ + For each computation, look at the computations before it and compute the length of the overlap with them, in seconds. + By definition, a computation has 0 overlap with itself; + """ + curr_start = 0 + curr_end = 0 + total_duration = 0 + for i, r in data.iterrows(): + if r["start_ms"] < curr_end: + curr_end = r["end_ms"] + else: + # Found the end of a contiguous computation segment; + total_duration += curr_end - curr_start + curr_start = r["start_ms"] + curr_end = r["end_ms"] + + # Add the last computation; + total_duration += curr_end - curr_start + + return total_duration + + +if __name__ == "__main__": + + files = os.listdir(os.path.join(DEFAULT_RES_DIR, INPUT_DATE)) + + # Associate each file to a key that represents its content; + files_dict = {tuple(file.split("_")[:3]): file for file in files} + + output_res = [] + for b in BENCHMARK_NAMES.keys(): + for p in POLICIES: + output_res += [load_data(b, p, files)] + + # Create a single table; + res = pd.concat(output_res, ignore_index=True) + # Sort columns; + res = res[list(res.columns[-2:]) + [res.columns[2]] + [res.columns[0]] + [res.columns[3]] + [res.columns[1]] + list(res.columns[5:9])] + + # For each benchmark and policy, compute the total computation time; + summary_list = [] + for (b, p), group in res.groupby(by=["benchmark", "policy"]): + overlap_computation_time = get_computation_time_with_overlap(group) + total_memory_accessed = group["dram_read_bytes"].sum() + group["dram_write_bytes"].sum() + memory_throughput = total_memory_accessed / (overlap_computation_time / 1000) + summary_list += [[b, p, overlap_computation_time, total_memory_accessed, memory_throughput, memory_throughput / MAX_GPU_BANDWIDTH]] + + summary = pd.DataFrame(summary_list, columns=["benchmark", "policy", "duration_ms", "dram_accessed_GB", "memory_throughput", "max_memory_throughput_perc"]) + + #%% Create barplot with memory throughput; + + # Obtain x values for the plot; + x = np.arange(len(summary["benchmark"].unique())) + + # Obtain labels; + x_labels = [BENCHMARK_NAMES[l] for l in summary["benchmark"].unique()] + # Obtain y; + y_sync = summary[summary["policy"] == "sync"]["memory_throughput"] + y_default = summary[summary["policy"] == "default"]["memory_throughput"] + + sns.set_style("white", {"ytick.left": True}) + plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] + plt.rcParams['axes.titlepad'] = 25 + plt.rcParams['axes.labelpad'] = 9 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + plt.rcParams['xtick.major.pad'] = 10 + + num_col = 1 + + fig = plt.figure(figsize=(3 * num_col, 2.5)) + ax = fig.add_subplot() + plt.subplots_adjust(top=0.75, + bottom=0.25, + left=0.15, + right=.99, + hspace=0.9, + wspace=0.0) + palette = [COLORS["peach1"], COLORS["b8"]] + edgecolor = "#2f2f2f" + # p = ["#FFEDAB", "#FFDB8C", "#FFC773", "#FFAF66"] + # p = ["#C8FCB6", "#96DE9B", "#66B784", "#469E7B"] + + bar_width = 0.35 + + rects1 = ax.bar(x - bar_width / 2, y_sync, bar_width, label="sync", color=palette[0], edgecolor=edgecolor) + rects2 = ax.bar(x + bar_width / 2, y_default, bar_width, label="default", color=palette[1], edgecolor=edgecolor) + + ax.set_xticks(x) + ax.set_xticklabels(x_labels, fontsize=8, va="center") + + # ax.set_ylim((0, 1.1 * summary["memory_throughput"].max())) + ax.set_ylim((0, 50)) + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(6)) + ax.set_yticklabels(labels=[f"{int(l)} GB/s" for l in ax.get_yticks()], ha="right", fontsize=6) + ax.grid(True, axis="y") + + plt.suptitle("Device memory throughput\nfor each benchmark\nand execution policy", fontsize=9, x=.02, y=0.95, ha="left") + + def autolabel(rects1, rects2): + """Attach a text label above each bar in *rects*, displaying its height.""" + for i, rect in enumerate(rects2): + height1 = rects1[i].get_height() + height2 = rect.get_height() + ax.annotate('{:.2f}x'.format(height2 / height1), + xy=(rect.get_x() + rect.get_width() / 2, height2), + xytext=(0, 2), # 3 points vertical offset + textcoords="offset points", + ha='center', va='bottom', + fontsize=8) + + autolabel(rects1, rects2) + + # Add baseline annotations; + for i, b in enumerate(BENCHMARK_NAMES): + position = x[i] + serial_throughput = summary[(summary["benchmark"] == b) & (summary["policy"] == "sync")]["memory_throughput"].iloc[0] + ax.annotate(f"Serial\nthroughput: ", xy=(position, 0), fontsize=6, ha="center", xycoords="data", xytext=(0, -36), textcoords="offset points") + ax.annotate(f"{int(serial_throughput)} GB/s", xy=(position, 0), fontsize=6, ha="center", xycoords="data", color="#469E7B", xytext=(0, -43.5), textcoords="offset points") + + # Legend; + labels = [POLICIES_DICT[p] for p in POLICIES] + custom_lines = [Patch(facecolor=palette[i], edgecolor="#2f2f2f", label=l) + for i, l in enumerate(labels)] + leg = fig.legend(custom_lines, labels, bbox_to_anchor=(1, 0.96), fontsize=8, ncol=1) + leg._legend_box.align = "left" + leg.get_frame().set_facecolor('white') + + save_plot(PLOT_DIR, "memory_throuhput_{}.{}", OUTPUT_DATE) + \ No newline at end of file diff --git a/projects/resources/python/plotting/plot_utils.py b/projects/resources/python/plotting/plot_utils.py index ded2e82d..61abac97 100755 --- a/projects/resources/python/plotting/plot_utils.py +++ b/projects/resources/python/plotting/plot_utils.py @@ -31,6 +31,7 @@ r4 = "#CE1922", r5 = "#F07B71", r6 = "#F0A694", + r7 = "#F78177", b1 = "#97E6DB", b2 = "#C6E6DB", From 3b84093dbbef2ac13ab88a397ede3b7aa9cf1d9a Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 28 Jul 2020 13:09:43 +0200 Subject: [PATCH 127/236] fixed missing plot --- projects/resources/python/plotting/plot_memory_throughput.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/resources/python/plotting/plot_memory_throughput.py b/projects/resources/python/plotting/plot_memory_throughput.py index 503b375e..13061345 100755 --- a/projects/resources/python/plotting/plot_memory_throughput.py +++ b/projects/resources/python/plotting/plot_memory_throughput.py @@ -259,5 +259,5 @@ def autolabel(rects1, rects2): leg._legend_box.align = "left" leg.get_frame().set_facecolor('white') - save_plot(PLOT_DIR, "memory_throuhput_{}.{}", OUTPUT_DATE) + save_plot(PLOT_DIR, "memory_throughput_{}.{}", OUTPUT_DATE) \ No newline at end of file From 2c49811882bb214a1271d48456aa688b2598684c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 28 Jul 2020 13:14:35 +0200 Subject: [PATCH 128/236] Update RESULTS.md fixed image sizes in results.md --- RESULTS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index 2d85d407..62c8ad9a 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -188,7 +188,7 @@ The only situation with a visible difference is `bench_8`, when processing very These results are further reaffirmed by looking at the execution time distributions (for example, using the largest data-sets and `block_size=256`, to evaluate an average case). In a couple of cases (e.g `bench_1`) it can be seen how the CUDA implementation might be sligthly faster (around 5%), although the same is true for GrCUDA in `bench_8`, while other benchmarks show very similar distributions. -![Relative exec. time w.r.t. CUDA, distribution](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_grcuda_cuda_ridgeplot_2020_07_15.png) + By measuring the execution time of each phase of a benchmark, it is possible to estimate the fastest theoretical time of the benchmark. This theoretical time assumes a *GPU* with infinite resources and infinite host-device capacity, so that it's always possible to transfer data without having to wait for the current transfer to end @@ -222,7 +222,7 @@ Measures are taken for the largest data-size in the evaluation (for each benchma the computation lasts much longer than the data-transfer, and part of the computation cannot be overlapped. In all likelihood, a more optimized kernel computation would result in higher **CT** overlap, and better speedup. -![Memory throughput](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_28/memory_throughput_2020_07_28.png) + Using `nvprof` we measure the total amount of bytes read/written by each kernel, and analyse how the GPU memory throughput is affected by space-sharing. Note that `nvprof` affects the kernel execution and limits the execution of concurrent kernels due to the high overhead introduced by collecting memory access metrics for each kernel. @@ -231,4 +231,4 @@ and combine them with memory access metrics collected in a separate run. The assumption here is the total amount of memory accesses is not significantly impacted by space sharing, and this evaluation is still useful to obtain performance insights. Indeed, we see that for kernels that contain computation overlap (e.g. `b6` and `b8`) the increase in memory throughput is significant, and in-line with the total speedup observed for these benchmarks. As expected, `b1` does not have any increase in memory throughput, as its speedup comes exclusively from transfer overlap. - Similarly, `b5` shows a small memory throughput increase, as the benchmark main bottleneck by the arithmetic intensity, and a significant part of the speedup comes from transfer overlapping. \ No newline at end of file + Similarly, `b5` shows a small memory throughput increase, as the benchmark main bottleneck by the arithmetic intensity, and a significant part of the speedup comes from transfer overlapping. From 59f572b44c46e3a7268659dd31aea7137823e4d1 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 28 Jul 2020 18:38:24 +0200 Subject: [PATCH 129/236] updated metric plot with l2 and ipc --- RESULTS.md | 8 +- .../benchmark/benchmark_nvprof_wrapper.py | 2 +- .../python/plotting/plot_memory_throughput.py | 203 +++++++++++------- 3 files changed, 131 insertions(+), 82 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index 62c8ad9a..01851b67 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -222,13 +222,17 @@ Measures are taken for the largest data-size in the evaluation (for each benchma the computation lasts much longer than the data-transfer, and part of the computation cannot be overlapped. In all likelihood, a more optimized kernel computation would result in higher **CT** overlap, and better speedup. - + Using `nvprof` we measure the total amount of bytes read/written by each kernel, and analyse how the GPU memory throughput is affected by space-sharing. Note that `nvprof` affects the kernel execution and limits the execution of concurrent kernels due to the high overhead introduced by collecting memory access metrics for each kernel. Instead, we measure the execution times obtained without metric collection (so that `nvprof` influence over the execution times is minimal) and combine them with memory access metrics collected in a separate run. -The assumption here is the total amount of memory accesses is not significantly impacted by space sharing, and this evaluation is still useful to obtain performance insights. +The assumption here is the total amount of memory accesses is not significantly impacted by `nvprof` profiling, and this evaluation is still useful to obtain performance insights. + Indeed, we see that for kernels that contain computation overlap (e.g. `b6` and `b8`) the increase in memory throughput is significant, and in-line with the total speedup observed for these benchmarks. As expected, `b1` does not have any increase in memory throughput, as its speedup comes exclusively from transfer overlap. Similarly, `b5` shows a small memory throughput increase, as the benchmark main bottleneck by the arithmetic intensity, and a significant part of the speedup comes from transfer overlapping. + +Other metrics, such as L2 cache read/write throughput, and IPC (computed assuming that the GPU runs at the maximum frequency), show identical speedups; +benchmarks that operates on matrices (`b6` and `b8`) make heavier use of the cache, while the sparse matrices in `b6` results in very low IPC, due to the high number of random memory accesses. diff --git a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py index b0a4e500..c9dc2667 100644 --- a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py @@ -61,7 +61,7 @@ ############################## LOG_FOLDER = "../../../../data/nvprof_log" -METRICS = "--metrics 'dram_read_throughput,dram_write_throughput,dram_read_bytes,dram_write_bytes,l2_global_atomic_store_bytes,l2_global_load_bytes,l2_global_reduction_bytes,l2_local_global_store_bytes,l2_local_load_bytes,l2_read_throughput,l2_write_throughput,inst_issued,ipc'" +METRICS = "--metrics 'dram_read_throughput,dram_write_throughput,dram_read_bytes,dram_write_bytes,l2_global_atomic_store_bytes,l2_global_load_bytes,l2_global_reduction_bytes,l2_local_global_store_bytes,l2_local_load_bytes,l2_read_throughput,l2_write_throughput,inst_executed,ipc'" # This path is hard-coded because nvprof is executed as root, # and the superuser doesn't have Graalpython in its environment; diff --git a/projects/resources/python/plotting/plot_memory_throughput.py b/projects/resources/python/plotting/plot_memory_throughput.py index 13061345..10782bc0 100755 --- a/projects/resources/python/plotting/plot_memory_throughput.py +++ b/projects/resources/python/plotting/plot_memory_throughput.py @@ -25,16 +25,16 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" -INPUT_DATE = "2020_07_22" -OUTPUT_DATE = "2020_07_28" +INPUT_DATE = "2020_07_28" +OUTPUT_DATE = "2020_07_282" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = { - "b1": "Vector\nSquares", + "b1": "VEC", "b5": "B&S", - "b6": "ML\nEnsemble", + "b6": "ML", "b7": "HITS", - "b8": "Images" + "b8": "IMG" } POLICIES = ["sync", "default"] POLICIES_DICT = {"default": "DAG Scheduling", "sync": "Serial Scheduling"} @@ -44,9 +44,11 @@ "transferred_data_byte", "Virtual Address", "name", "Correlation_ID"] NVPROF_HEADER_NOMETRIC_FILTERED = NVPROF_HEADER_NOMETRIC[:2] + [NVPROF_HEADER_NOMETRIC[-2]] -NVPROF_HEADER_METRIC = ["Device", "Context", "Stream", "name", "Correlation_ID", "dram_read_throughput", - "dram_read_transactions", "dram_read_bytes", "dram_write_bytes"] -NVPROF_HEADER_METRIC_FILTERED = [NVPROF_HEADER_METRIC[3]] + [NVPROF_HEADER_METRIC[5]] + NVPROF_HEADER_METRIC[7:] +NVPROF_HEADER_METRIC = ["Device", "Context", "Stream", "name", "Correlation_ID", + "dram_read_throughput", "dram_write_throughput", "dram_read_bytes", "dram_write_bytes", + "l2_global_atomic_store_bytes", "l2_global_load_bytes", "l2_global_reduction_bytes", "l2_local_global_store_bytes", "l2_local_load_bytes", "l2_read_throughput", "l2_write_throughput", + "inst_executed", "ipc"] +NVPROF_HEADER_METRIC_FILTERED = [NVPROF_HEADER_METRIC[3]] + NVPROF_HEADER_METRIC[5:] OPERATIONS_TO_MERGE = set(["htod", "dtoh"]) @@ -54,6 +56,9 @@ # Maximum memory bandiwth, in GB/s. of the GPU (currently: GTX 960); MAX_GPU_BANDWIDTH = 112 +MAX_L2_GPU_BANDWIDTH = 450 # Not publicly known, estimated using nvvp; +GPU_CLOCK_HZ = 1_177_000_000 +GPU_NUM_SM = 8 def load_data(b, p, files): @@ -109,6 +114,14 @@ def load_data(b, p, files): # Turn bytes into GB; data_metric["dram_read_bytes"] /= 2**30 data_metric["dram_write_bytes"] /= 2**30 + data_metric["l2_global_atomic_store_bytes"] /= 2**30 + data_metric["l2_global_load_bytes"] /= 2**30 + data_metric["l2_global_reduction_bytes"] /= 2**30 + data_metric["l2_local_global_store_bytes"] /= 2**30 + data_metric["l2_local_load_bytes"] /= 2**30 + + data_metric["total_l2_read_bytes"] = data_metric["l2_global_load_bytes"] + data_metric["l2_local_load_bytes"] + data_metric["total_l2_write_bytes"] = data_metric["l2_global_atomic_store_bytes"] + data_metric["l2_global_reduction_bytes"] + data_metric["l2_local_global_store_bytes"] # Concatenate the 2 tables; data = pd.concat([data_nometric, data_metric], axis=1) @@ -119,9 +132,13 @@ def load_data(b, p, files): # It doesn't matter for the memory throughput computation, as we consider the total execution time; # assert((data["name"] == data["name_metric"]).all()) - # Check if read throughput is close to the one computed by nvprof, for debugging. + # Check if throughput is close to the one computed by nvprof, for debugging. # This is relevant only for "sync" policies, as the execution times for the 2 tables are consistent; data["estimated_read_througput"] = data["dram_read_bytes"] / (data["duration_ms"] / 1000) + data["estimated_l2_read_througput"] = data["total_l2_read_bytes"] / (data["duration_ms"] / 1000) + data["estimated_l2_write_througput"] = data["total_l2_write_bytes"] / (data["duration_ms"] / 1000) + + data["estimated_ipc"] = data["inst_executed"] / (GPU_CLOCK_HZ * (data["duration_ms"] / 1000)) / GPU_NUM_SM # Add index columns; data["benchmark"] = b @@ -152,6 +169,70 @@ def get_computation_time_with_overlap(data): return total_duration +def autolabel(ax, rects1, rects2): + """Attach a text label above each bar in *rects*, displaying its height.""" + for i, rect in enumerate(rects2): + height1 = rects1[i].get_height() + height2 = rect.get_height() + ax.annotate('{:.2f}x'.format(height2 / height1), + xy=(rect.get_x(), height2), + xytext=(0, 2), # 3 points vertical offset + textcoords="offset points", + ha='center', va='bottom', + fontsize=7) + +def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_tick_format=lambda l: f"{l:.2f}", baseline_annotation_format=lambda l: f"{l:.2f}"): + + # Obtain x values for the plot; + x = np.arange(len(data["benchmark"].unique())) + + # Obtain labels; + x_labels = [BENCHMARK_NAMES[l] for l in data["benchmark"].unique()] + + palette = [COLORS["peach1"], COLORS["b8"]] + edgecolor = "#2f2f2f" + + bar_width = 0.35 + + # Obtain y; + y_sync = data[data["policy"] == "sync"][y_column] + y_default = data[data["policy"] == "default"][y_column] + + rects1 = ax.bar(x - bar_width / 2, y_sync, bar_width, label="sync", color=palette[0], edgecolor=edgecolor) + rects2 = ax.bar(x + bar_width / 2, y_default, bar_width, label="default", color=palette[1], edgecolor=edgecolor) + + ax.set_xticks(x) + ax.set_xticklabels(x_labels, fontsize=7, va="center") + + # ax.set_ylim((0, 1.1 * summary["memory_throughput"].max())) + ax.set_ylim(y_limit) + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(y_ticks)) + ax.set_yticklabels(labels=[y_tick_format(l) for l in ax.get_yticks()], ha="right", fontsize=6) + ax.grid(True, axis="y") + + # ax.annotate(title, fontsize=9, x=.02, y=0.95, ha="left") + plt.suptitle("Hardware metrics\nfor each benchmark and execution policy", fontsize=9, x=.01, y=0.97, ha="left") + ax.annotate(title, xy=(0, 1.05), fontsize=7, ha="left", xycoords="axes fraction")#, xycoords="data", xytext=(0, 100), textcoords="offset points") + autolabel(ax, rects1, rects2) + + # Add baseline annotations; + for i, b in enumerate(BENCHMARK_NAMES): + position = x[i] + serial_throughput = summary[(summary["benchmark"] == b) & (summary["policy"] == "sync")][y_column].iloc[0] + if i == 0: + ax.annotate(annotation_title, xy=(0, 0), fontsize=6, ha="right", va="center", xycoords="data", xytext=(-12, -22), textcoords="offset points") + ax.annotate(baseline_annotation_format(serial_throughput), xy=(position - bar_width, 0), fontsize=6, ha="left", va="center", xycoords="data", color=palette[0], xytext=(0, -22), textcoords="offset points") + + # Legend; + labels = [POLICIES_DICT[p] for p in POLICIES] + custom_lines = [Patch(facecolor=palette[i], edgecolor="#2f2f2f", label=l) + for i, l in enumerate(labels)] + leg = fig.legend(custom_lines, labels, bbox_to_anchor=(1, 0.99), fontsize=7, ncol=1) + leg._legend_box.align = "left" + leg.get_frame().set_facecolor('white') + + if __name__ == "__main__": files = os.listdir(os.path.join(DEFAULT_RES_DIR, INPUT_DATE)) @@ -167,28 +248,30 @@ def get_computation_time_with_overlap(data): # Create a single table; res = pd.concat(output_res, ignore_index=True) # Sort columns; - res = res[list(res.columns[-2:]) + [res.columns[2]] + [res.columns[0]] + [res.columns[3]] + [res.columns[1]] + list(res.columns[5:9])] + res = res[list(res.columns[-2:]) + [res.columns[2]] + [res.columns[0]] + [res.columns[3]] + [res.columns[1]] + list(res.columns[5:-2])] # For each benchmark and policy, compute the total computation time; summary_list = [] for (b, p), group in res.groupby(by=["benchmark", "policy"]): overlap_computation_time = get_computation_time_with_overlap(group) + + # Device memory; total_memory_accessed = group["dram_read_bytes"].sum() + group["dram_write_bytes"].sum() memory_throughput = total_memory_accessed / (overlap_computation_time / 1000) - summary_list += [[b, p, overlap_computation_time, total_memory_accessed, memory_throughput, memory_throughput / MAX_GPU_BANDWIDTH]] - summary = pd.DataFrame(summary_list, columns=["benchmark", "policy", "duration_ms", "dram_accessed_GB", "memory_throughput", "max_memory_throughput_perc"]) - - #%% Create barplot with memory throughput; + # L2 cache; + total_l2_accessed = group["total_l2_read_bytes"].sum() + group["total_l2_write_bytes"].sum() + l2_throughput = total_l2_accessed / (overlap_computation_time / 1000) + + # IPC; + total_instructions = group["inst_executed"].sum() + ipc = total_instructions / (GPU_CLOCK_HZ * (overlap_computation_time / 1000)) / GPU_NUM_SM + + summary_list += [[b, p, overlap_computation_time, total_memory_accessed, memory_throughput, memory_throughput / MAX_GPU_BANDWIDTH, l2_throughput, l2_throughput / MAX_L2_GPU_BANDWIDTH, ipc]] + + summary = pd.DataFrame(summary_list, columns=["benchmark", "policy", "duration_ms", "dram_accessed_GB", "memory_throughput", "max_memory_throughput_perc", "l2_throughput", "max_l2_throughput_perc", "ipc"]) - # Obtain x values for the plot; - x = np.arange(len(summary["benchmark"].unique())) - - # Obtain labels; - x_labels = [BENCHMARK_NAMES[l] for l in summary["benchmark"].unique()] - # Obtain y; - y_sync = summary[summary["policy"] == "sync"]["memory_throughput"] - y_default = summary[summary["policy"] == "default"]["memory_throughput"] + #%% Create barplot with memory throughput; sns.set_style("white", {"ytick.left": True}) plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] @@ -196,68 +279,30 @@ def get_computation_time_with_overlap(data): plt.rcParams['axes.labelpad'] = 9 plt.rcParams['axes.titlesize'] = 22 plt.rcParams['axes.labelsize'] = 14 - plt.rcParams['xtick.major.pad'] = 10 + plt.rcParams['xtick.major.pad'] = 5 - num_col = 1 + num_col = 3 - fig = plt.figure(figsize=(3 * num_col, 2.5)) - ax = fig.add_subplot() + fig, axes = plt.subplots(1, num_col, figsize=(1.9 * num_col, 2.3)) plt.subplots_adjust(top=0.75, - bottom=0.25, - left=0.15, + bottom=0.19, + left=0.1, right=.99, hspace=0.9, - wspace=0.0) - palette = [COLORS["peach1"], COLORS["b8"]] - edgecolor = "#2f2f2f" - # p = ["#FFEDAB", "#FFDB8C", "#FFC773", "#FFAF66"] - # p = ["#C8FCB6", "#96DE9B", "#66B784", "#469E7B"] - - bar_width = 0.35 + wspace=0.4) + + barplot(summary, axes[0], "Device memory throughput", + "memory_throughput", (0, 50), "Serial\nthroughput:", y_ticks=6, y_tick_format=lambda l: f"{int(l)} GB/s", baseline_annotation_format=lambda l: f"{int(l)}\nGB/s") + barplot(summary, axes[1], "L2 cache throughput", + "l2_throughput", (0, 250), "Serial\nthroughput:", y_ticks=6, y_tick_format=lambda l: f"{int(l)} GB/s", baseline_annotation_format=lambda l: f"{int(l)}\nGB/s") + barplot(summary, axes[2], "IPC", + "ipc", (0, 1.5), "Serial\nIPC:", y_ticks=7, y_tick_format=lambda l: f"{l:.2f}", baseline_annotation_format=lambda l: f"{l:.2f}") - rects1 = ax.bar(x - bar_width / 2, y_sync, bar_width, label="sync", color=palette[0], edgecolor=edgecolor) - rects2 = ax.bar(x + bar_width / 2, y_default, bar_width, label="default", color=palette[1], edgecolor=edgecolor) - - ax.set_xticks(x) - ax.set_xticklabels(x_labels, fontsize=8, va="center") - - # ax.set_ylim((0, 1.1 * summary["memory_throughput"].max())) - ax.set_ylim((0, 50)) - # Set the y ticks; - ax.yaxis.set_major_locator(plt.LinearLocator(6)) - ax.set_yticklabels(labels=[f"{int(l)} GB/s" for l in ax.get_yticks()], ha="right", fontsize=6) - ax.grid(True, axis="y") - - plt.suptitle("Device memory throughput\nfor each benchmark\nand execution policy", fontsize=9, x=.02, y=0.95, ha="left") - - def autolabel(rects1, rects2): - """Attach a text label above each bar in *rects*, displaying its height.""" - for i, rect in enumerate(rects2): - height1 = rects1[i].get_height() - height2 = rect.get_height() - ax.annotate('{:.2f}x'.format(height2 / height1), - xy=(rect.get_x() + rect.get_width() / 2, height2), - xytext=(0, 2), # 3 points vertical offset - textcoords="offset points", - ha='center', va='bottom', - fontsize=8) - - autolabel(rects1, rects2) - - # Add baseline annotations; - for i, b in enumerate(BENCHMARK_NAMES): - position = x[i] - serial_throughput = summary[(summary["benchmark"] == b) & (summary["policy"] == "sync")]["memory_throughput"].iloc[0] - ax.annotate(f"Serial\nthroughput: ", xy=(position, 0), fontsize=6, ha="center", xycoords="data", xytext=(0, -36), textcoords="offset points") - ax.annotate(f"{int(serial_throughput)} GB/s", xy=(position, 0), fontsize=6, ha="center", xycoords="data", color="#469E7B", xytext=(0, -43.5), textcoords="offset points") + save_plot(PLOT_DIR, "memory_throughput_{}.{}", OUTPUT_DATE) - # Legend; - labels = [POLICIES_DICT[p] for p in POLICIES] - custom_lines = [Patch(facecolor=palette[i], edgecolor="#2f2f2f", label=l) - for i, l in enumerate(labels)] - leg = fig.legend(custom_lines, labels, bbox_to_anchor=(1, 0.96), fontsize=8, ncol=1) - leg._legend_box.align = "left" - leg.get_frame().set_facecolor('white') + #%% + tmp = res[res["policy"] == "sync"].groupby(by=["benchmark", "policy", "name"]).mean() + tmp["ipc_fix"] = tmp["estimated_ipc"] / 8 + tmp["ipc_perc"] = ( tmp["ipc_fix"] - tmp["ipc"]) / tmp["ipc"] - save_plot(PLOT_DIR, "memory_throughput_{}.{}", OUTPUT_DATE) - \ No newline at end of file + print(np.median(tmp["ipc_perc"])) \ No newline at end of file From 1087fb6ccd95fb7ff18f057f17517a23cceb4197 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 5 Aug 2020 15:39:05 +0200 Subject: [PATCH 130/236] added dl benchmark and results --- data/nvprof_log/2020_07_20/summary.csv | 1 + projects/resources/cuda/Makefile | 13 +- projects/resources/cuda/b10.cuh | 99 ++++ projects/resources/cuda/b10_default.cu | 178 +++++++ projects/resources/cuda/b10_sync.cu | 160 ++++++ projects/resources/cuda/b9_default.cu | 404 +++++++++++++++ projects/resources/cuda/b9_sync.cu | 395 +++++++++++++++ projects/resources/cuda/utils.hpp | 2 +- .../python/benchmark/bench/bench_10.py | 384 +++++++++++++++ .../python/benchmark/bench/bench_9.py | 466 ++++++++++++++++++ .../python/benchmark/benchmark_main.py | 8 + .../benchmark/benchmark_nvprof_wrapper.py | 17 +- .../python/benchmark/benchmark_wrapper.py | 13 +- .../compute_transfer_computation_overlap.py | 4 +- .../python/plotting/plot_memory_throughput.py | 11 +- .../python/plotting/plot_speedup_baseline.py | 10 +- .../plotting/plot_speedup_grcuda_cuda.py | 18 +- .../plotting/plot_theoretical_performance.py | 15 +- .../plot_transfer_computation_overlap.py | 7 +- 19 files changed, 2162 insertions(+), 43 deletions(-) create mode 100644 projects/resources/cuda/b10.cuh create mode 100644 projects/resources/cuda/b10_default.cu create mode 100644 projects/resources/cuda/b10_sync.cu create mode 100644 projects/resources/cuda/b9_default.cu create mode 100644 projects/resources/cuda/b9_sync.cu create mode 100644 projects/resources/python/benchmark/bench/bench_10.py create mode 100644 projects/resources/python/benchmark/bench/bench_9.py diff --git a/data/nvprof_log/2020_07_20/summary.csv b/data/nvprof_log/2020_07_20/summary.csv index 20996202..2f2b7125 100644 --- a/data/nvprof_log/2020_07_20/summary.csv +++ b/data/nvprof_log/2020_07_20/summary.csv @@ -4,3 +4,4 @@ b5,0.24803521217460248,0.9309995299857262,0.31940070143967975,0.4084153016340686 b6,0.0022776189801614216,0.9661026728181651,0.3637018277212265,0.3651186673761415 b7,0.06038393891786274,0.46557339367676137,0.08448172861398016,0.12833553351558946 b8,0.00011424194033166917,0.08086681678156217,0.641453353108711,0.6406625201084443 +b10,0.014047476595909188,0.494838298287338,0.4775095858648788,0.477987934237355 diff --git a/projects/resources/cuda/Makefile b/projects/resources/cuda/Makefile index 0c996c33..29b4e08c 100644 --- a/projects/resources/cuda/Makefile +++ b/projects/resources/cuda/Makefile @@ -1,13 +1,15 @@ FLAGS = -std=c++11 -O3 -arch=sm_50 BIN_FOLDER=bin -.PHONY: all b1 b5 b6 b7 b8 +.PHONY: all b1 b5 b6 b7 b8 b9 b10 all: \ b1 \ b5 \ b6 \ b7 \ - b8 + b8 \ + b9 \ + b10 b1: b1* nvcc b1_default.cu $(FLAGS) -o $(BIN_FOLDER)/b1_default; @@ -29,3 +31,10 @@ b8: b8* nvcc b8_default.cu $(FLAGS) -o $(BIN_FOLDER)/b8_default; nvcc b8_sync.cu $(FLAGS) -o $(BIN_FOLDER)/b8_sync +b9: b9* + nvcc b9_default.cu $(FLAGS) -o $(BIN_FOLDER)/b9_default; + nvcc b9_sync.cu $(FLAGS) -o $(BIN_FOLDER)/b9_sync + +b10: b10* + nvcc b10_default.cu $(FLAGS) -o $(BIN_FOLDER)/b10_default; + nvcc b10_sync.cu $(FLAGS) -o $(BIN_FOLDER)/b10_sync diff --git a/projects/resources/cuda/b10.cuh b/projects/resources/cuda/b10.cuh new file mode 100644 index 00000000..e87861e4 --- /dev/null +++ b/projects/resources/cuda/b10.cuh @@ -0,0 +1,99 @@ +#pragma once + + +#define NUM_THREADS_PER_BLOCK_2D 8 +#define NUM_THREADS_PER_BLOCK 32 +#define WARP_SIZE 32 + + +extern "C" __global__ void conv2d(float *out, float *x, float *kernels, int N, int M, int L, int K, int k_out, int stride) { + extern __shared__ float kernel_local[]; + int radius = K / 2; + + for (int m = 0; m < k_out; m++) { + for (int i = threadIdx.x; i < K; i += blockDim.x) { + for (int j = threadIdx.y; j < K; j += blockDim.y) { + for (int l = 0; l < L; l++) { + kernel_local[l + L * (j + K * (i + K * m))] = kernels[l + L * (j + K * (i + K * m))]; + } + } + } + } + __syncthreads(); + + for (int m = 0; m < k_out; m++) { + for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < (int) ceilf((float) N / stride) - radius; i += blockDim.x * gridDim.x) { + int out_index = M * i / stride; + for (int j = blockIdx.y * blockDim.y + threadIdx.y; j < (int) ceilf((float) M / stride) - radius; j += blockDim.y * gridDim.y) { + float res = 0; + int i_f = i * stride + radius; + int j_f = j * stride + radius; + for (int k_i = -radius; k_i <= radius; k_i++) { + for (int k_j = -radius; k_j <= radius; k_j++) { + int kernel_index = (k_j + radius + K * (k_i + radius + K * m)); + for (int l = 0; l < L; l++) { + int ni = i_f + k_i; + int nj = j_f + k_j; + res += kernel_local[l + L * kernel_index] * x[((ni * M) + nj) * L + l]; + } + } + } + // Apply ReLU operator; + out[m + k_out * (j + out_index)] = max(res, 0.0); + } + } + } +} + +extern "C" __global__ void gap(float *out, float *x, int N, int M, int L) { + extern __shared__ float out_local[]; + for(int i = threadIdx.x; i < L; i += blockDim.x) { + out_local[i] = 0; + } + __syncthreads(); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + for(int j = blockIdx.y * blockDim.y + threadIdx.y; j < M; j += blockDim.y * gridDim.y) { + for (int l = 0; l < L; l++) { + atomicAdd(out_local + l, x[l + L * (j + M * i)]); + } + } + } + __syncthreads(); + for(int l = threadIdx.x; l < L; l += blockDim.x) { + atomicAdd(out + l, out_local[l] / (M * N)); + } +} + +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +extern "C" __global__ void dot_product(const float *x, const float *y, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] * y[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +extern "C" __global__ void concat(float *z, const float *x, const float *y, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + z[i] = x[i]; + z[i + n] = y[i]; + } +} + +inline void reset(float *x, float *y, float *x_cpu, float *y_cpu, int N, float *res) { + for (int i = 0; i < N; i++) { + x[i] = x_cpu[i]; + y[i] = y_cpu[i]; + } + *res = 0; +} + diff --git a/projects/resources/cuda/b10_default.cu b/projects/resources/cuda/b10_default.cu new file mode 100644 index 00000000..21244f94 --- /dev/null +++ b/projects/resources/cuda/b10_default.cu @@ -0,0 +1,178 @@ +#include +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" +#include "b10.cuh" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int K = 3; + int channels = 3; + int stride = 2; + int kn1 = 8; + int kn2 = 16; + + int block_size_1d = options.block_size_1d; + int block_size_2d = options.block_size_2d; + int num_blocks = 8; // options.num_blocks; + int skip_iterations = options.skip_iterations; + int err = 0; + + if (debug) { + std::cout << "running b10 default" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size_1d << std::endl; + std::cout << "block size 2d=" << block_size_2d << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; + } + + auto start = clock_type::now(); + float *x, *x1, *x2, *x3, *y, *y1, *y2, *y3, *kernel_1, *kernel_2, *kernel_3, *kernel_4, *z, *dense_weights, *res; + float *x_cpu = (float *) malloc(sizeof(float) * N * N * channels); + float *y_cpu = (float *) malloc(sizeof(float) * N * N * channels); + int x_len = N * N * channels; + int x1_len = (N / stride) * (N / stride) * kn1; + int x2_len = (N / (stride * stride)) * (N / (stride * stride)) * kn2; + int x3_len = kn2; + err = cudaMallocManaged(&x, sizeof(float) * x_len); + err = cudaMallocManaged(&x1, sizeof(float) * x1_len); + err = cudaMallocManaged(&x2, sizeof(float) * x2_len); + err = cudaMallocManaged(&x3, sizeof(float) * x3_len); + + err = cudaMallocManaged(&y, sizeof(float) * x_len); + err = cudaMallocManaged(&y1, sizeof(float) * x1_len); + err = cudaMallocManaged(&y2, sizeof(float) * x2_len); + err = cudaMallocManaged(&y3, sizeof(float) * x3_len); + + int k1_len = channels * K * K * kn1; + int k2_len = kn1 * K * K * kn2; + err = cudaMallocManaged(&kernel_1, sizeof(float) * k1_len); + err = cudaMallocManaged(&kernel_2, sizeof(float) * k2_len); + err = cudaMallocManaged(&kernel_3, sizeof(float) * k1_len); + err = cudaMallocManaged(&kernel_4, sizeof(float) * k2_len); + + int z_len = 2 * x2_len; + err = cudaMallocManaged(&z, sizeof(float) * z_len); + err = cudaMallocManaged(&dense_weights, sizeof(float) * z_len); + err = cudaMallocManaged(&res, sizeof(float)); + + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + start = clock_type::now(); + for (int i = 0; i < x_len; i++) { + x_cpu[i] = (float)(rand()) / (float)(RAND_MAX); + y_cpu[i] = (float)(rand()) / (float)(RAND_MAX); + } + for (int i = 0; i < k1_len; i++) { + kernel_1[i] = ((float)(rand()) / (float)(RAND_MAX)) * 2 - 1; + kernel_3[i] = ((float)(rand()) / (float)(RAND_MAX)) * 2 - 1; + } + for (int i = 0; i < k2_len; i++) { + kernel_2[i] = ((float)(rand()) / (float)(RAND_MAX)) * 2 - 1; + kernel_4[i] = ((float)(rand()) / (float)(RAND_MAX)) * 2 - 1; + } + + for (int i = 0; i < z_len; i++) { + dense_weights[i] = (((float)(rand()) / (float)(RAND_MAX)) * 2 - 1) / z_len; + } + + // Create streams; + cudaStream_t s1, s2; + err = cudaStreamCreate(&s1); + err = cudaStreamCreate(&s2); + if (err) std::cout << err << std::endl; + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + cudaStreamAttachMemAsync(s1, x, sizeof(float) * x_len); + cudaStreamAttachMemAsync(s1, x1, 0); + cudaStreamAttachMemAsync(s1, x2, 0); + // cudaStreamAttachMemAsync(s1, x3, 0); + cudaStreamAttachMemAsync(s1, kernel_1, 0); + cudaStreamAttachMemAsync(s1, kernel_2, 0); + cudaStreamAttachMemAsync(s2, y, sizeof(float) * x_len); + cudaStreamAttachMemAsync(s2, y1, 0); + // cudaStreamAttachMemAsync(s2, y2, 0); + // cudaStreamAttachMemAsync(s2, y3, 0); + cudaStreamAttachMemAsync(s2, kernel_3, 0); + cudaStreamAttachMemAsync(s2, kernel_4, 0); + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(x, y, x_cpu, y_cpu, x_len, res); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + dim3 block_size_2d_dim(block_size_2d, block_size_2d); + dim3 grid_size(num_blocks, num_blocks); + dim3 grid_size_2(num_blocks / 2, num_blocks / 2); + + conv2d<<>>(x1, x, kernel_1, N, N, channels, K, kn1, stride); + conv2d<<>>(y1, y, kernel_3, N, N, channels, K, kn1, stride); + + conv2d<<>>(x2, x1, kernel_2, N / stride, N / stride, kn1, K, kn2, stride); + conv2d<<>>(y2, y1, kernel_4, N / stride, N / stride, kn1, K, kn2, stride); + + // gap<<>>(x3, x2, N / (stride * stride), N / (stride * stride), kn2); + // gap<<>>(y3, y2, N / (stride * stride), N / (stride * stride), kn2); + + cudaEvent_t e1; + cudaEventCreate(&e1); + cudaEventRecord(e1, s2); + cudaStreamWaitEvent(s1, e1, 0); + + concat<<>>(z, x2, y2, x2_len); + + dot_product<<>>(z, dense_weights, res, x2_len); + cudaStreamSynchronize(s1); + cudaStreamSynchronize(s2); + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=" << *res << "; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << *res << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b10_sync.cu b/projects/resources/cuda/b10_sync.cu new file mode 100644 index 00000000..6fd1462a --- /dev/null +++ b/projects/resources/cuda/b10_sync.cu @@ -0,0 +1,160 @@ +#include +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" +#include "b10.cuh" + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int K = 3; + int channels = 3; + int stride = 2; + int kn1 = 8; + int kn2 = 16; + + int block_size_1d = options.block_size_1d; + int block_size_2d = options.block_size_2d; + int num_blocks = 8; // options.num_blocks; + int skip_iterations = options.skip_iterations; + int err = 0; + + if (debug) { + std::cout << "running b10 sync" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size_1d << std::endl; + std::cout << "block size 2d=" << block_size_2d << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; + } + + auto start = clock_type::now(); + float *x, *x1, *x2, *x3, *y, *y1, *y2, *y3, *kernel_1, *kernel_2, *kernel_3, *kernel_4, *z, *dense_weights, *res; + float *x_cpu = (float *) malloc(sizeof(float) * N * N * channels); + float *y_cpu = (float *) malloc(sizeof(float) * N * N * channels); + int x_len = N * N * channels; + int x1_len = (N / stride) * (N / stride) * kn1; + int x2_len = (N / (stride * stride)) * (N / (stride * stride)) * kn2; + int x3_len = kn2; + err = cudaMallocManaged(&x, sizeof(float) * x_len); + err = cudaMallocManaged(&x1, sizeof(float) * x1_len); + err = cudaMallocManaged(&x2, sizeof(float) * x2_len); + err = cudaMallocManaged(&x3, sizeof(float) * x3_len); + + err = cudaMallocManaged(&y, sizeof(float) * x_len); + err = cudaMallocManaged(&y1, sizeof(float) * x1_len); + err = cudaMallocManaged(&y2, sizeof(float) * x2_len); + err = cudaMallocManaged(&y3, sizeof(float) * x3_len); + + int k1_len = channels * K * K * kn1; + int k2_len = kn1 * K * K * kn2; + err = cudaMallocManaged(&kernel_1, sizeof(float) * k1_len); + err = cudaMallocManaged(&kernel_2, sizeof(float) * k2_len); + err = cudaMallocManaged(&kernel_3, sizeof(float) * k1_len); + err = cudaMallocManaged(&kernel_4, sizeof(float) * k2_len); + + int z_len = 2 * x2_len; + err = cudaMallocManaged(&z, sizeof(float) * z_len); + err = cudaMallocManaged(&dense_weights, sizeof(float) * z_len); + err = cudaMallocManaged(&res, sizeof(float)); + + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + start = clock_type::now(); + for (int i = 0; i < x_len; i++) { + x_cpu[i] = (float)(rand()) / (float)(RAND_MAX); + y_cpu[i] = (float)(rand()) / (float)(RAND_MAX); + } + for (int i = 0; i < k1_len; i++) { + kernel_1[i] = ((float)(rand()) / (float)(RAND_MAX)) * 2 - 1; + kernel_3[i] = ((float)(rand()) / (float)(RAND_MAX)) * 2 - 1; + } + for (int i = 0; i < k2_len; i++) { + kernel_2[i] = ((float)(rand()) / (float)(RAND_MAX)) * 2 - 1; + kernel_4[i] = ((float)(rand()) / (float)(RAND_MAX)) * 2 - 1; + } + + for (int i = 0; i < z_len; i++) { + dense_weights[i] = (((float)(rand()) / (float)(RAND_MAX)) * 2 - 1) / z_len; + } + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(x, y, x_cpu, y_cpu, x_len, res); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + + start = clock_type::now(); + + dim3 block_size_2d_dim(block_size_2d, block_size_2d); + dim3 grid_size(num_blocks, num_blocks); + dim3 grid_size_2(num_blocks / 2, num_blocks / 2); + + conv2d<<>>(x1, x, kernel_1, N, N, channels, K, kn1, stride); + cudaDeviceSynchronize(); + conv2d<<>>(y1, y, kernel_3, N, N, channels, K, kn1, stride); + cudaDeviceSynchronize(); + + conv2d<<>>(x2, x1, kernel_2, N / stride, N / stride, kn1, K, kn2, stride); + cudaDeviceSynchronize(); + conv2d<<>>(y2, y1, kernel_4, N / stride, N / stride, kn1, K, kn2, stride); + cudaDeviceSynchronize(); + + // gap<<>>(x3, x2, N / (stride * stride), N / (stride * stride), kn2); + // cudaDeviceSynchronize(); + // gap<<>>(y3, y2, N / (stride * stride), N / (stride * stride), kn2); + // cudaDeviceSynchronize(); + + concat<<>>(z, x2, y2, x2_len); + cudaDeviceSynchronize(); + + dot_product<<>>(z, dense_weights, res, x2_len); + cudaDeviceSynchronize(); + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=" << *res << "; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << *res << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b9_default.cu b/projects/resources/cuda/b9_default.cu new file mode 100644 index 00000000..01937715 --- /dev/null +++ b/projects/resources/cuda/b9_default.cu @@ -0,0 +1,404 @@ +#include +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" +#include +#include + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +#define NUM_THREADS_PER_BLOCK 32 +#define THREADS_PER_VECTOR 4 +#define MAX_NUM_VECTORS_PER_BLOCK (1024 / THREADS_PER_VECTOR) + +extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { + + for(int n = blockIdx.x * blockDim.x + threadIdx.x; n < num_rows; n += blockDim.x * gridDim.x) { + float sum = 0; + for (int i = ptr[n]; i < ptr[n + 1]; i++) { + sum += val[i] * vec[idx[i]]; + } + res[n] = sum; + } +} + +extern "C" __global__ void spmv2(int* cudaRowCounter, int* d_ptr, int* d_cols, float* d_val, float* d_vector, float* d_out, int N) { + int i; + int thread_per_vector = THREADS_PER_VECTOR; + float sum; + int row; + int rowStart, rowEnd; + int laneId = threadIdx.x % thread_per_vector; //lane index in the vector + int vectorId = threadIdx.x / thread_per_vector; //vector index in the thread block + int warpLaneId = threadIdx.x & 31; //lane index in the warp + int warpVectorId = warpLaneId / thread_per_vector; //vector index in the warp + + __shared__ volatile int space[MAX_NUM_VECTORS_PER_BLOCK][2]; + + // Get the row index + if (warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the value to other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff, row, 0) + warpVectorId; + + while (row < N) { + + // Use two threads to fetch the row offset + if (laneId < 2) { + space[vectorId][laneId] = d_ptr[row + laneId]; + } + rowStart = space[vectorId][0]; + rowEnd = space[vectorId][1]; + + sum = 0; + // Compute dot product + if (thread_per_vector == 32) { + + // Ensure aligned memory access + i = rowStart - (rowStart & (thread_per_vector - 1)) + laneId; + + // Process the unaligned part + if (i >= rowStart && i < rowEnd) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + + // Process the aligned part + for (i += thread_per_vector; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } else { + for (i = rowStart + laneId; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } + // Intra-vector reduction + for (i = thread_per_vector >> 1; i > 0; i >>= 1) { + sum += __shfl_down_sync(0xffffffff,sum, i); + } + + // Save the results + if (laneId == 0) { + d_out[row] = sum; + } + + // Get a new row index + if(warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the row index to the other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff,row, 0) + warpVectorId; + } +} + +// Compute d_out = y + alpha * A * d_vector; +extern "C" __global__ void spmv_full(int* cudaRowCounter, int* d_ptr, int* d_cols, float* d_val, float* d_vector, float* d_out, int N, float alpha, float* y) { + int i; + int thread_per_vector = THREADS_PER_VECTOR; + float sum; + int row; + int rowStart, rowEnd; + int laneId = threadIdx.x % thread_per_vector; //lane index in the vector + int vectorId = threadIdx.x / thread_per_vector; //vector index in the thread block + int warpLaneId = threadIdx.x & 31; //lane index in the warp + int warpVectorId = warpLaneId / thread_per_vector; //vector index in the warp + + __shared__ volatile int space[MAX_NUM_VECTORS_PER_BLOCK][2]; + + // Get the row index + if (warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the value to other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff, row, 0) + warpVectorId; + + while (row < N) { + + // Use two threads to fetch the row offset + if (laneId < 2) { + space[vectorId][laneId] = d_ptr[row + laneId]; + } + rowStart = space[vectorId][0]; + rowEnd = space[vectorId][1]; + + sum = 0; + // Compute dot product + if (thread_per_vector == 32) { + + // Ensure aligned memory access + i = rowStart - (rowStart & (thread_per_vector - 1)) + laneId; + + // Process the unaligned part + if (i >= rowStart && i < rowEnd) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + + // Process the aligned part + for (i += thread_per_vector; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } else { + for (i = rowStart + laneId; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } + // Intra-vector reduction + for (i = thread_per_vector >> 1; i > 0; i >>= 1) { + sum += __shfl_down_sync(0xffffffff,sum, i); + } + + // Save the results + if (laneId == 0) { + d_out[row] = y[row] + alpha * sum; + } + + // Get a new row index + if(warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the row index to the other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff,row, 0) + warpVectorId; + } +} + +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +extern "C" __global__ void vector_norm(const float *x, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] * x[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +extern "C" __global__ void dot_product(const float *x, const float *y, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] * y[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +// Compute y = val + alpha * x; +extern "C" __global__ void saxpy(float* y, float *val, float *x, float alpha, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = val[i] + alpha * x[i]; + } +} + +extern "C" __global__ void cpy(float *y, const float *x, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = x[i]; + } +} + +///////////////////////////// +///////////////////////////// + +void reset(float *x, float *t1, float *t2, int *row_cnt_1, int *row_cnt_2, int N) { + for (int i = 0; i < N; i++) { + x[i] = 1.0; + } + *t1 = 0.0; + *t2 = 0.0; + *row_cnt_1 = 0; + *row_cnt_2 = 0; +} + +void init(float *b, int N) { + for (int i = 0; i < N; i++) { + b[i] = (float)(rand()) / (float)(RAND_MAX); + } +} + +template +void random_coo(I* x, I *y, T *val, int N, int degree) { + // Create random matrix entries; + std::vector> t; + for (int i = 0; i < N; i++) { + std::set edges; + while (edges.size() < degree) { + I edge = (I) rand() % N; + if (i != edge) { + edges.insert(edge); + } + } + for (auto e = edges.begin(); e != edges.end(); e++) { + T tmp = (T)(rand()) / (T)(RAND_MAX); + auto tuple1 = std::make_tuple(i, *e, tmp); + auto tuple2 = std::make_tuple(*e, i, tmp); + t.push_back(tuple1); + t.push_back(tuple2); + } + } + int i = 0; + for (auto t_i = t.begin(); t_i != t.end(); t_i++, i++) { + x[i] = std::get<0>(*t_i); + y[i] = std::get<1>(*t_i); + val[i] = std::get<2>(*t_i); + } +} + + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int max_degree = 2; + int iterations = 10; + + int num_blocks = options.num_blocks; + int block_size_1d = options.block_size_1d; + int block_size_2d = options.block_size_2d; + int skip_iterations = options.skip_iterations; + int err = 0; + + if (debug) { + std::cout << "running b9 default" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size_1d << std::endl; + std::cout << "block size 2d=" << block_size_2d << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; + } + + auto start = clock_type::now(); + + int nnz = N * max_degree * 2; + + int *ptr, *idx, *rowCounter1, *rowCounter2; + float *x, *b, *val, *p, *r, *t1, *t2, *y; + + err = cudaMallocManaged(&ptr, sizeof(int) * (N + 1)); + err = cudaMallocManaged(&idx, sizeof(int) * nnz); + err = cudaMallocManaged(&val, sizeof(float) * nnz); + err = cudaMallocManaged(&rowCounter1, sizeof(int)); + err = cudaMallocManaged(&rowCounter2, sizeof(int)); + + err = cudaMallocManaged(&x, sizeof(float) * N); + err = cudaMallocManaged(&b, sizeof(float) * N); + err = cudaMallocManaged(&p, sizeof(float) * N); + err = cudaMallocManaged(&r, sizeof(float) * N); + err = cudaMallocManaged(&y, sizeof(float) * N); + err = cudaMallocManaged(&t1, sizeof(float)); + err = cudaMallocManaged(&t2, sizeof(float)); + + // Create streams; + cudaStream_t s1, s2; + err = cudaStreamCreate(&s1); + err = cudaStreamCreate(&s2); + if (debug && err) std::cout << err << std::endl; + + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + start = clock_type::now(); + + int *x_coo = (int*) malloc(nnz * sizeof(int)); + int *y_coo = (int*) malloc(nnz * sizeof(int)); + float *v_coo = (float*) malloc(nnz * sizeof(float)); + random_coo(x_coo, y_coo, v_coo, N, max_degree); + coo2csr(ptr, idx, val, x_coo, y_coo, v_coo, N, N, nnz); + + init(b, N); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(x, t1, t2, rowCounter1, rowCounter2, N); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + int nb = ceil(N / ((float) block_size_1d)); + + start = clock_type::now(); + + cudaStreamAttachMemAsync(s2, t1, 0); + + spmv_full<<>>(rowCounter1, ptr, idx, val, x, r, N, -1.0, b); + cpy<<>>(p, r, N); + cudaEvent_t e1; + cudaEventCreate(&e1); + cudaEventRecord(e1, s1); + cudaStreamWaitEvent(s2, e1, 0); + vector_norm<<>>(r, t1, N); + for (int iter = 0; iter < iterations; iter++) { + spmv2<<>>(rowCounter2, ptr, idx, val, p, y, N); + dot_product<<>>(p, y, t2, N); + + cudaStreamSynchronize(s1); + cudaStreamSynchronize(s2); + float alpha = *t1 / *t2; + float old_t1 = *t1; + *t1 = 0.0; + *rowCounter1 = 0; + *rowCounter2 = 0; + + saxpy<<>>(x, x, p, alpha, N); + saxpy<<>>(r, r, y, -1.0 * alpha, N); + vector_norm<<>>(r, t1, N); + cudaStreamSynchronize(s2); + float beta = *t1 / old_t1; + saxpy<<>>(p, r, p, beta, N); + } + cudaStreamSynchronize(s1); + + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < 10; j++) { + std::cout << x[j] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << 0.0 << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/b9_sync.cu b/projects/resources/cuda/b9_sync.cu new file mode 100644 index 00000000..8e0b5b17 --- /dev/null +++ b/projects/resources/cuda/b9_sync.cu @@ -0,0 +1,395 @@ +#include +#include +#include +#include +#include +#include +#include "utils.hpp" +#include "options.hpp" +#include +#include + +///////////////////////////// +///////////////////////////// + +namespace chrono = std::chrono; +using clock_type = chrono::high_resolution_clock; + +///////////////////////////// +///////////////////////////// + +#define NUM_THREADS_PER_BLOCK 32 +#define THREADS_PER_VECTOR 4 +#define MAX_NUM_VECTORS_PER_BLOCK (1024 / THREADS_PER_VECTOR) + +extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { + + for(int n = blockIdx.x * blockDim.x + threadIdx.x; n < num_rows; n += blockDim.x * gridDim.x) { + float sum = 0; + for (int i = ptr[n]; i < ptr[n + 1]; i++) { + sum += val[i] * vec[idx[i]]; + } + res[n] = sum; + } +} + +extern "C" __global__ void spmv2(int* cudaRowCounter, int* d_ptr, int* d_cols, float* d_val, float* d_vector, float* d_out, int N) { + int i; + int thread_per_vector = THREADS_PER_VECTOR; + float sum; + int row; + int rowStart, rowEnd; + int laneId = threadIdx.x % thread_per_vector; //lane index in the vector + int vectorId = threadIdx.x / thread_per_vector; //vector index in the thread block + int warpLaneId = threadIdx.x & 31; //lane index in the warp + int warpVectorId = warpLaneId / thread_per_vector; //vector index in the warp + + __shared__ volatile int space[MAX_NUM_VECTORS_PER_BLOCK][2]; + + // Get the row index + if (warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the value to other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff, row, 0) + warpVectorId; + + while (row < N) { + + // Use two threads to fetch the row offset + if (laneId < 2) { + space[vectorId][laneId] = d_ptr[row + laneId]; + } + rowStart = space[vectorId][0]; + rowEnd = space[vectorId][1]; + + sum = 0; + // Compute dot product + if (thread_per_vector == 32) { + + // Ensure aligned memory access + i = rowStart - (rowStart & (thread_per_vector - 1)) + laneId; + + // Process the unaligned part + if (i >= rowStart && i < rowEnd) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + + // Process the aligned part + for (i += thread_per_vector; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } else { + for (i = rowStart + laneId; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } + // Intra-vector reduction + for (i = thread_per_vector >> 1; i > 0; i >>= 1) { + sum += __shfl_down_sync(0xffffffff,sum, i); + } + + // Save the results + if (laneId == 0) { + d_out[row] = sum; + } + + // Get a new row index + if(warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the row index to the other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff,row, 0) + warpVectorId; + } +} + +// Compute d_out = y + alpha * A * d_vector; +extern "C" __global__ void spmv_full(int* cudaRowCounter, int* d_ptr, int* d_cols, float* d_val, float* d_vector, float* d_out, int N, float alpha, float* y) { + int i; + int thread_per_vector = THREADS_PER_VECTOR; + float sum; + int row; + int rowStart, rowEnd; + int laneId = threadIdx.x % thread_per_vector; //lane index in the vector + int vectorId = threadIdx.x / thread_per_vector; //vector index in the thread block + int warpLaneId = threadIdx.x & 31; //lane index in the warp + int warpVectorId = warpLaneId / thread_per_vector; //vector index in the warp + + __shared__ volatile int space[MAX_NUM_VECTORS_PER_BLOCK][2]; + + // Get the row index + if (warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the value to other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff, row, 0) + warpVectorId; + + while (row < N) { + + // Use two threads to fetch the row offset + if (laneId < 2) { + space[vectorId][laneId] = d_ptr[row + laneId]; + } + rowStart = space[vectorId][0]; + rowEnd = space[vectorId][1]; + + sum = 0; + // Compute dot product + if (thread_per_vector == 32) { + + // Ensure aligned memory access + i = rowStart - (rowStart & (thread_per_vector - 1)) + laneId; + + // Process the unaligned part + if (i >= rowStart && i < rowEnd) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + + // Process the aligned part + for (i += thread_per_vector; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } else { + for (i = rowStart + laneId; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } + // Intra-vector reduction + for (i = thread_per_vector >> 1; i > 0; i >>= 1) { + sum += __shfl_down_sync(0xffffffff,sum, i); + } + + // Save the results + if (laneId == 0) { + d_out[row] = y[row] + alpha * sum; + } + + // Get a new row index + if(warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the row index to the other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff,row, 0) + warpVectorId; + } +} + +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +extern "C" __global__ void vector_norm(const float *x, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] * x[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +extern "C" __global__ void dot_product(const float *x, const float *y, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] * y[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +// Compute y = val + alpha * x; +extern "C" __global__ void saxpy(float* y, float *val, float *x, float alpha, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = val[i] + alpha * x[i]; + } +} + +extern "C" __global__ void cpy(float *y, const float *x, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = x[i]; + } +} + +///////////////////////////// +///////////////////////////// + +void reset(float *x, float *t1, float *t2, int *row_cnt_1, int *row_cnt_2, int N) { + for (int i = 0; i < N; i++) { + x[i] = 1.0; + } + *t1 = 0.0; + *t2 = 0.0; + *row_cnt_1 = 0; + *row_cnt_2 = 0; +} + +void init(float *b, int N) { + for (int i = 0; i < N; i++) { + b[i] = (float)(rand()) / (float)(RAND_MAX); + } +} + +template +void random_coo(I* x, I *y, T *val, int N, int degree) { + // Create random matrix entries; + std::vector> t; + for (int i = 0; i < N; i++) { + std::set edges; + while (edges.size() < degree) { + I edge = (I) rand() % N; + if (i != edge) { + edges.insert(edge); + } + } + for (auto e = edges.begin(); e != edges.end(); e++) { + T tmp = (T)(rand()) / (T)(RAND_MAX); + auto tuple1 = std::make_tuple(i, *e, tmp); + auto tuple2 = std::make_tuple(*e, i, tmp); + t.push_back(tuple1); + t.push_back(tuple2); + } + } + int i = 0; + for (auto t_i = t.begin(); t_i != t.end(); t_i++, i++) { + x[i] = std::get<0>(*t_i); + y[i] = std::get<1>(*t_i); + val[i] = std::get<2>(*t_i); + } +} + + +///////////////////////////// +///////////////////////////// + +int main(int argc, char *argv[]) { + + srand(time(0)); + + Options options = Options(argc, argv); + int debug = options.debug; + + int num_executions = options.num_iter; + int N = options.N; + + int max_degree = 2; + int iterations = 10; + + int num_blocks = options.num_blocks; + int block_size_1d = options.block_size_1d; + int block_size_2d = options.block_size_2d; + int skip_iterations = options.skip_iterations; + int err = 0; + + if (debug) { + std::cout << "running b9 sync" << std::endl; + std::cout << "N=" << N << std::endl; + std::cout << "num executions=" << num_executions << std::endl; + std::cout << "block size 1d=" << block_size_1d << std::endl; + std::cout << "block size 2d=" << block_size_2d << std::endl; + std::cout << "num blocks=" << num_blocks << std::endl; + std::cout << "skip iteration time=" << skip_iterations << std::endl; + } + + auto start = clock_type::now(); + + int nnz = N * max_degree * 2; + + int *ptr, *idx, *rowCounter1, *rowCounter2; + float *x, *b, *val, *p, *r, *t1, *t2, *y; + + err = cudaMallocManaged(&ptr, sizeof(int) * (N + 1)); + err = cudaMallocManaged(&idx, sizeof(int) * nnz); + err = cudaMallocManaged(&val, sizeof(float) * nnz); + err = cudaMallocManaged(&rowCounter1, sizeof(int)); + err = cudaMallocManaged(&rowCounter2, sizeof(int)); + + err = cudaMallocManaged(&x, sizeof(float) * N); + err = cudaMallocManaged(&b, sizeof(float) * N); + err = cudaMallocManaged(&p, sizeof(float) * N); + err = cudaMallocManaged(&r, sizeof(float) * N); + err = cudaMallocManaged(&y, sizeof(float) * N); + err = cudaMallocManaged(&t1, sizeof(float)); + err = cudaMallocManaged(&t2, sizeof(float)); + + if (debug && err) std::cout << err << std::endl; + + // Initialze arrays; + start = clock_type::now(); + + int *x_coo = (int*) malloc(nnz * sizeof(int)); + int *y_coo = (int*) malloc(nnz * sizeof(int)); + float *v_coo = (float*) malloc(nnz * sizeof(float)); + random_coo(x_coo, y_coo, v_coo, N, max_degree); + coo2csr(ptr, idx, val, x_coo, y_coo, v_coo, N, N, nnz); + init(b, N); + + auto end = clock_type::now(); + if (debug) std::cout << "init=" << (float) chrono::duration_cast(end - start).count() / 1000 << " ms" << std::endl; + + // Print header; + if (!debug) std::cout << "num_iter,gpu_result,total_time_sec,overhead_sec,computation_sec" << std::endl; + + float tot = 0; + for (int i = 0; i < num_executions; i++) { + if (debug) std::cout << "\n-- iter=" << i << std::endl; + auto start_tmp = clock_type::now(); + reset(x, t1, t2, rowCounter1, rowCounter2, N); + auto end_tmp = clock_type::now(); + auto reset_time = chrono::duration_cast(end_tmp - start_tmp).count(); + if (debug) std::cout << " reset=" << (float) reset_time / 1000 << " ms" << std::endl; + int nb = ceil(N / ((float) block_size_1d)); + + start = clock_type::now(); + + spmv_full<<>>(rowCounter1, ptr, idx, val, x, r, N, -1.0, b); + // err = cudaDeviceSynchronize(); + cpy<<>>(p, r, N); + // err = cudaDeviceSynchronize(); + vector_norm<<>>(r, t1, N); + // err = cudaDeviceSynchronize(); + + for (int iter = 0; iter < iterations; iter++) { + spmv2<<>>(rowCounter2, ptr, idx, val, p, y, N); + // err = cudaDeviceSynchronize(); + dot_product<<>>(p, y, t2, N); + err = cudaDeviceSynchronize(); + float alpha = *t1 / *t2; + float old_t1 = *t1; + *t1 = 0.0; + *rowCounter1 = 0; + *rowCounter2 = 0; + saxpy<<>>(x, x, p, alpha, N); + // err = cudaDeviceSynchronize(); + saxpy<<>>(r, r, y, -1.0 * alpha, N); + // err = cudaDeviceSynchronize(); + vector_norm<<>>(r, t1, N); + err = cudaDeviceSynchronize(); + float beta = *t1 / old_t1; + saxpy<<>>(p, r, p, beta, N); + // err = cudaDeviceSynchronize(); + } + err = cudaDeviceSynchronize(); + end = clock_type::now(); + auto tmp = chrono::duration_cast(end - start).count(); + tot += tmp; + + if (debug) { + std::cout << " gpu result=["; + for (int j = 0; j < 10; j++) { + std::cout << x[j] << ", "; + } + std::cout << ", ...]; time=" << (float) tmp / 1000 << " ms" << std::endl; + } else { + std::cout << i << "," << 0.0 << "," << (float) (reset_time + tmp) / 1e6 << "," << (float) reset_time / 1e6 << "," << (float) tmp / 1e6 << std::endl; + } + } + + // Print; + cudaDeviceSynchronize(); + + if (debug) std::cout << "\nmean exec time=" << (float) tot / (1000 * num_executions) << " ms" << std::endl; +} diff --git a/projects/resources/cuda/utils.hpp b/projects/resources/cuda/utils.hpp index 88ff0189..498367f1 100644 --- a/projects/resources/cuda/utils.hpp +++ b/projects/resources/cuda/utils.hpp @@ -48,7 +48,7 @@ inline void customSort(I *row_indices, I *col_indices, T *values, I nnz) { template inline void coo2csr(I *csrRowPtr, I *csrColInd, T *csrVal, I *row_indices, - I* col_indices, I* values, I nrows, I ncols, I nnz) { + I* col_indices, T* values, I nrows, I ncols, I nnz) { I temp, row, col, dest, cumsum = 0; diff --git a/projects/resources/python/benchmark/bench/bench_10.py b/projects/resources/python/benchmark/bench/bench_10.py new file mode 100644 index 00000000..dcea3839 --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_10.py @@ -0,0 +1,384 @@ +# coding=utf-8 +import polyglot +from java.lang import System +import numpy as np +from random import random, randint, seed, sample, uniform + +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D, DEFAULT_BLOCK_SIZE_2D +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_THREADS_PER_BLOCK_2D = 8 +NUM_THREADS_PER_BLOCK = 32 +WARP_SIZE = 32 + +CONV2D = """ +extern "C" __global__ void conv2d(float *out, float *x, float *kernels, int N, int M, int L, int K, int k_out, int stride) { + extern __shared__ float kernel_local[]; + int radius = K / 2; + + for (int m = 0; m < k_out; m++) { + for (int i = threadIdx.x; i < K; i += blockDim.x) { + for (int j = threadIdx.y; j < K; j += blockDim.y) { + for (int l = 0; l < L; l++) { + kernel_local[l + L * (j + K * (i + K * m))] = kernels[l + L * (j + K * (i + K * m))]; + } + } + } + } + __syncthreads(); + + for (int m = 0; m < k_out; m++) { + for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < (int) ceilf((float) N / stride) - radius; i += blockDim.x * gridDim.x) { + int out_index = M * i / stride; + for (int j = blockIdx.y * blockDim.y + threadIdx.y; j < (int) ceilf((float) M / stride) - radius; j += blockDim.y * gridDim.y) { + float res = 0; + int i_f = i * stride + radius; + int j_f = j * stride + radius; + for (int k_i = -radius; k_i <= radius; k_i++) { + for (int k_j = -radius; k_j <= radius; k_j++) { + int kernel_index = (k_j + radius + K * (k_i + radius + K * m)); + for (int l = 0; l < L; l++) { + int ni = i_f + k_i; + int nj = j_f + k_j; + res += kernel_local[l + L * kernel_index] * x[((ni * M) + nj) * L + l]; + } + } + } + // Apply ReLU operator; + out[m + k_out * (j + out_index)] = max(res, 0.0); + } + } + } +} +""" + +GAP = """ +extern "C" __global__ void gap(float *out, float *x, int N, int M, int L) { + extern __shared__ float out_local[]; + for(int i = threadIdx.x; i < L; i += blockDim.x) { + out_local[i] = 0; + } + __syncthreads(); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + for(int j = blockIdx.y * blockDim.y + threadIdx.y; j < M; j += blockDim.y * gridDim.y) { + for (int l = 0; l < L; l++) { + atomicAdd(out_local + l, x[l + L * (j + M * i)]); + } + } + } + __syncthreads(); + for(int l = threadIdx.x; l < L; l += blockDim.x) { + atomicAdd(out + l, out_local[l] / (M * N)); + } +} +""" + +DOT_PRODUCT = """ +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +extern "C" __global__ void dot_product(const float *x, const float *y, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] * y[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} +""" + +CONCAT = """ +extern "C" __global__ void concat(float *z, const float *x, const float *y, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + z[i] = x[i]; + z[i + n] = y[i]; + } +} +""" + + +def sigmoid(x): + return 1 / (1 + np.exp(-x)) + +############################## +############################## + + +class Benchmark10(Benchmark): + """ + Compute a convolutional neural network that takes 2 images as inputs, computes their low-dimensional embeddings, + concatenate them and apply a dense classifier. It can represent, for example, a network that detects if 2 images contain the same object; + + CONV(x) ─> CONV(x1) ─> GAP(x2) ──┬─> CONCAT(x2, y2) ─> DENSE(z) + CONV(y) ─> CONV(y1) ─> GAP(y2) ──┘ + """ + + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b10", benchmark, nvprof_profile) + self.size = 0 + + self.x = None + self.y = None + self.x_cpu = None + self.y_cpu = None + + self.kernel_1 = None + self.kernel_2 = None + self.kernel_3 = None + self.kernel_4 = None + self.channels = 3 + self.K = 3 + self.kn1 = 8 + self.kn2 = 16 # 8 + self.stride = 2 # 4 + + self.x1 = None + self.x2 = None + self.x3 = None + self.y1 = None + self.y2 = None + self.y3 = None + self.z = None + self.res = None + self.dense_weights = None + + self.cpu_result = None + self.gpu_result = None + + self.num_blocks_per_processor = 8 # i.e. K * number of SM on the GTX960 + + self.block_size_1d = DEFAULT_BLOCK_SIZE_1D + self.block_size_2d = DEFAULT_BLOCK_SIZE_2D + + self.conv2d_kernel = None + self.gap_kernel = None + self.concat_kernel = None + self.dp_kernel = None + + @time_phase("allocation") + def alloc(self, size: int, block_size: dict = None) -> None: + self.size = size + self.block_size_1d = block_size["block_size_1d"] + self.block_size_2d = block_size["block_size_2d"] + + self.gpu_result = 0.0 + + # Allocate vectors; + self.x = polyglot.eval(language="grcuda", string=f"float[{size * size * self.channels}]") + self.x1 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride) * (size // self.stride) * self.kn1}]") + self.x2 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride**2) * (size // self.stride**2) * self.kn2}]") + self.x3 = polyglot.eval(language="grcuda", string=f"float[{self.kn2}]") + self.y = polyglot.eval(language="grcuda", string=f"float[{size * size * self.channels}]") + self.y1 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride) * (size // self.stride) * self.kn1}]") + self.y2 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride**2) * (size // self.stride**2) * self.kn2}]") + self.y3 = polyglot.eval(language="grcuda", string=f"float[{self.kn2}]") + self.kernel_1 = polyglot.eval(language="grcuda", string=f"float[{self.kn1 * self.K * self.K * self.channels}]") + self.kernel_2 = polyglot.eval(language="grcuda", string=f"float[{self.kn1 * self.K * self.K * self.kn2}]") + self.kernel_3 = polyglot.eval(language="grcuda", string=f"float[{self.kn1 * self.K * self.K * self.channels}]") + self.kernel_4 = polyglot.eval(language="grcuda", string=f"float[{self.kn1 * self.K * self.K * self.kn2}]") + + self.z = polyglot.eval(language="grcuda", string=f"float[{len(self.y2) * 2}]") + self.dense_weights = polyglot.eval(language="grcuda", string=f"float[{len(self.z)}]") + self.res = polyglot.eval(language="grcuda", string=f"float[1]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + self.conv2d_kernel = build_kernel(CONV2D, "conv2d", "pointer, pointer, const pointer, sint32, sint32, sint32, sint32, sint32, sint32") + self.gap_kernel = build_kernel(GAP, "gap", "pointer, pointer, sint32, sint32, sint32") + self.concat_kernel = build_kernel(CONCAT, "concat", "pointer, const pointer, const pointer, sint32") + self.dp_kernel = build_kernel(DOT_PRODUCT, "dot_product", "const pointer, const pointer, pointer, sint32") + + @time_phase("initialization") + def init(self): + + self.random_seed = 10 # randint(0, 10000000) + seed(self.random_seed) + + # Random weights; + for i in range(len(self.kernel_1)): + self.kernel_1[i] = uniform(-1, 1) + self.kernel_3[i] = uniform(-1, 1) + for i in range(len(self.kernel_2)): + self.kernel_2[i] = uniform(-1, 1) + self.kernel_4[i] = uniform(-1, 1) + + for i in range(len(self.dense_weights)): + self.dense_weights[i] = uniform(-1, 1) / len(self.dense_weights) + + # Create random images. Leave it for last so that we can re-create identical random weights from the same seed; + self.x_cpu = [0] * len(self.x) + self.y_cpu = [0] * len(self.y) + for i in range(len(self.x_cpu)): + self.x_cpu[i] = random() + self.y_cpu[i] = random() + + @time_phase("reset_result") + def reset_result(self) -> None: + self.gpu_result = 0.0 + self.res[0] = 0.0 + for i in range(len(self.x_cpu)): + self.x[i] = self.x_cpu[i] + self.y[i] = self.y_cpu[i] + + def execute(self) -> object: + + start_comp = System.nanoTime() + start = 0 + + a = self.num_blocks_per_processor / 2 + # Convolutions; + self.execute_phase("conv_x1", + self.conv2d_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * (self.K ** 2) * self.kn1 * self.channels), + self.x1, self.x, self.kernel_1, self.size, self.size, self.channels, self.K, self.kn1, self.stride) + self.execute_phase("conv_y1", + self.conv2d_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * (self.K ** 2) * self.kn1 * self.channels), + self.y1, self.y, self.kernel_3, self.size, self.size, self.channels, self.K, self.kn1, self.stride) + self.execute_phase("conv_x2", + self.conv2d_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * (self.K ** 2) * self.kn1 * self.kn2), + self.x2, self.x1, self.kernel_2, self.size // self.stride, self.size // self.stride, self.kn1, self.K, self.kn2, self.stride) + self.execute_phase("conv_y2", + self.conv2d_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * (self.K ** 2) * self.kn1 * self.kn2), + self.y2, self.y1, self.kernel_4, self.size // self.stride, self.size // self.stride, self.kn1, self.K, self.kn2, self.stride) + + # Global average pooling; + # self.execute_phase("gap_x", + # self.gap_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kn2), + # self.x3, self.x2, self.size // self.stride**2, self.size // self.stride**2, self.kn2) + # self.execute_phase("gap_y", + # self.gap_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * self.kn2), + # self.y3, self.y2, self.size // self.stride ** 2, self.size // self.stride ** 2, self.kn2) + + # Dense layer; + self.execute_phase("concat", + self.concat_kernel(self.num_blocks_per_processor, self.block_size_1d), + self.z, self.x2, self.y2, len(self.x2)) + self.execute_phase("dot_product", + self.dp_kernel(self.num_blocks_per_processor, self.block_size_1d), + self.z, self.dense_weights, self.res, len(self.z)) + + # Add a final sync step to measure the real computation time; + if self.time_phases: + start = System.nanoTime() + # self.gpu_result = sigmoid(self.res[0]) + self.gpu_result = self.res[0] + # self.gpu_result = [self.x1[i] for i in range(100)] + end = System.nanoTime() + if self.time_phases: + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + self.benchmark.add_computation_time((end - start_comp) / 1_000_000_000) + + self.benchmark.add_to_benchmark("gpu_result", self.gpu_result) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tgpu result: {self.gpu_result:.4f}") + # BenchmarkResult.log_message( + # f"\tgpu result: [" + ", ".join([f"{x:.2f}" for x in self.gpu_result[:100]]) + "...]") + + return self.gpu_result + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + + def relu(x): + return np.maximum(x, 0) + + def conv3d2(x, kernels, shape, K, k_out, stride=1, operator=relu): + N, M, L = shape + out = np.zeros((N // stride) * (M // stride) * k_out) + radius = K // 2 + + for m in range(k_out): + for i in range(0, int(np.ceil(N / stride)) - radius): + for j in range(0, int(np.ceil(M / stride)) - radius): + res = 0 + i_f = i * stride + radius + j_f = j * stride + radius + for k_i in range(-radius, radius + 1): + for k_j in range(-radius, radius + 1): + for l in range(L): + ni = i_f + k_i + nj = j_f + k_j + res += kernels[l + L * (k_j + radius + K * (k_i + radius + K * m))] * x[((ni * M) + nj) * L + l] + out[m + k_out * (j + M * i // stride)] = operator(res) + return out + + def gap2(x, shape): + N, M, L = shape + out = np.zeros(L) + for n in range(N): + for m in range(M): + for i in range(L): + out[i] += x[i + L * (m + M * n)] / (N * M) + return out + + def concat(x, y): + # x and y have the same length; + out = np.zeros(2 * len(x)) + for i in range(len(x)): + out[i] = x[i] + out[i + len(x)] = y[i] + return out + + # Recompute the CPU result only if necessary; + start = System.nanoTime() + if self.current_iter == 0 or reinit: + + # Initialize weights; + N = self.size + kernel_1 = np.zeros(len(self.kernel_1)) + kernel_2 = np.zeros(len(self.kernel_2)) + kernel_3 = np.zeros(len(self.kernel_3)) + kernel_4 = np.zeros(len(self.kernel_4)) + dense_weights = np.zeros(len(self.dense_weights)) + # Random weights; + for i in range(len(self.kernel_1)): + kernel_1[i] = self.kernel_1[i] + kernel_3[i] = self.kernel_3[i] + for i in range(len(self.kernel_2)): + kernel_2[i] = self.kernel_2[i] + kernel_4[i] = self.kernel_4[i] + + for i in range(len(self.dense_weights)): + dense_weights[i] = self.dense_weights[i] + + # First convolution (N,N,1) -> (N/stride,N/stride,kn1) + x_1 = conv3d2(np.array(self.x_cpu), kernel_1, (N, N, self.channels), self.K, self.kn1, stride=self.stride) + # Second convolution (N/stride,N/stride,kn1) -> (N/stride^2,N/stride^2,kn2) + x_2 = conv3d2(x_1, kernel_2, (N // self.stride, N // self.stride, self.kn1), self.K, self.kn2, stride=self.stride) + + # First convolution (N,N,1) -> (N/stride,N/stride,kn1) + y_1 = conv3d2(np.array(self.y_cpu), kernel_3, (N, N, self.channels), self.K, self.kn1, stride=self.stride) + # Second convolution (N/stride,N/stride,kn1) -> (N/stride^2,N/stride^2,kn2) + y_2 = conv3d2(y_1, kernel_4, (N // self.stride, N // self.stride, self.kn1), self.K, self.kn2, stride=self.stride) + + # Global average pooling 2D; + # x_3 = gap2(x_2, (N // (self.stride * self.stride), N // (self.stride * self.stride), self.kn2)) + # y_3 = gap2(y_2, (N // (self.stride * self.stride), N // (self.stride * self.stride), self.kn2)) + + # Concatenate; + out = concat(x_2, y_2) + + # Final dense layer; + self.cpu_result = out.dot(dense_weights[:len(out)]) + # self.cpu_result = x_1[:100] + + cpu_time = (System.nanoTime() - start) / 1_000_000_000 + + # Compare GPU and CPU results; + difference = np.abs(self.cpu_result - gpu_result) + + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", str(difference)) + if self.benchmark.debug: + # BenchmarkResult.log_message( + # f"\tcpu result: [" + ", ".join([f"{x:.2f}" for x in self.cpu_result[:100]]) + "...]"+ + # f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") + BenchmarkResult.log_message(f"\tcpu result: {self.cpu_result:.4f}; " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") diff --git a/projects/resources/python/benchmark/bench/bench_9.py b/projects/resources/python/benchmark/bench/bench_9.py new file mode 100644 index 00000000..4ca89e43 --- /dev/null +++ b/projects/resources/python/benchmark/bench/bench_9.py @@ -0,0 +1,466 @@ +# coding=utf-8 +import polyglot +from java.lang import System +import numpy as np +from random import random, randint, seed, sample + +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D +from benchmark_result import BenchmarkResult + +############################## +############################## + +NUM_THREADS_PER_BLOCK = 32 +THREADS_PER_VECTOR = 4 +MAX_NUM_VECTORS_PER_BLOCK = 1024 / THREADS_PER_VECTOR + +SPMV_KERNEL = """ +extern "C" __global__ void spmv(const int *ptr, const int *idx, const int *val, const float *vec, float *res, int num_rows, int num_nnz) { + + for(int n = blockIdx.x * blockDim.x + threadIdx.x; n < num_rows; n += blockDim.x * gridDim.x) { + float sum = 0; + for (int i = ptr[n]; i < ptr[n + 1]; i++) { + sum += val[i] * vec[idx[i]]; + } + res[n] = sum; + } +} + +extern "C" __global__ void spmv2(int* cudaRowCounter, int* d_ptr, int* d_cols, float* d_val, float* d_vector, float* d_out, int N) { + int i; + int thread_per_vector = %d; + float sum; + int row; + int rowStart, rowEnd; + int laneId = threadIdx.x %% thread_per_vector; //lane index in the vector + int vectorId = threadIdx.x / thread_per_vector; //vector index in the thread block + int warpLaneId = threadIdx.x & 31; //lane index in the warp + int warpVectorId = warpLaneId / thread_per_vector; //vector index in the warp + + __shared__ volatile int space[%d][2]; + + // Get the row index + if (warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the value to other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff, row, 0) + warpVectorId; + + while (row < N) { + + // Use two threads to fetch the row offset + if (laneId < 2) { + space[vectorId][laneId] = d_ptr[row + laneId]; + } + rowStart = space[vectorId][0]; + rowEnd = space[vectorId][1]; + + sum = 0; + // Compute dot product + if (thread_per_vector == 32) { + + // Ensure aligned memory access + i = rowStart - (rowStart & (thread_per_vector - 1)) + laneId; + + // Process the unaligned part + if (i >= rowStart && i < rowEnd) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + + // Process the aligned part + for (i += thread_per_vector; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } else { + for (i = rowStart + laneId; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } + // Intra-vector reduction + for (i = thread_per_vector >> 1; i > 0; i >>= 1) { + sum += __shfl_down_sync(0xffffffff,sum, i); + } + + // Save the results + if (laneId == 0) { + d_out[row] = sum; + } + + // Get a new row index + if(warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the row index to the other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff,row, 0) + warpVectorId; + } +} + +// Compute d_out = y + alpha * A * d_vector; +extern "C" __global__ void spmv_full(int* cudaRowCounter, int* d_ptr, int* d_cols, float* d_val, float* d_vector, float* d_out, int N, float alpha, float* y) { + int i; + int thread_per_vector = %d; + float sum; + int row; + int rowStart, rowEnd; + int laneId = threadIdx.x %% thread_per_vector; //lane index in the vector + int vectorId = threadIdx.x / thread_per_vector; //vector index in the thread block + int warpLaneId = threadIdx.x & 31; //lane index in the warp + int warpVectorId = warpLaneId / thread_per_vector; //vector index in the warp + + __shared__ volatile int space[%d][2]; + + // Get the row index + if (warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the value to other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff, row, 0) + warpVectorId; + + while (row < N) { + + // Use two threads to fetch the row offset + if (laneId < 2) { + space[vectorId][laneId] = d_ptr[row + laneId]; + } + rowStart = space[vectorId][0]; + rowEnd = space[vectorId][1]; + + sum = 0; + // Compute dot product + if (thread_per_vector == 32) { + + // Ensure aligned memory access + i = rowStart - (rowStart & (thread_per_vector - 1)) + laneId; + + // Process the unaligned part + if (i >= rowStart && i < rowEnd) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + + // Process the aligned part + for (i += thread_per_vector; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } else { + for (i = rowStart + laneId; i < rowEnd; i += thread_per_vector) { + sum += d_val[i] * d_vector[d_cols[i]]; + } + } + // Intra-vector reduction + for (i = thread_per_vector >> 1; i > 0; i >>= 1) { + sum += __shfl_down_sync(0xffffffff,sum, i); + } + + // Save the results + if (laneId == 0) { + d_out[row] = y[row] + alpha * sum; + } + + // Get a new row index + if(warpLaneId == 0) { + row = atomicAdd(cudaRowCounter, 32 / thread_per_vector); + } + // Broadcast the row index to the other threads in the same warp and compute the row index of each vector + row = __shfl_sync(0xffffffff,row, 0) + warpVectorId; + } +} +""" % (THREADS_PER_VECTOR, MAX_NUM_VECTORS_PER_BLOCK, THREADS_PER_VECTOR, MAX_NUM_VECTORS_PER_BLOCK) + +SUM_KERNEL = """ +__inline__ __device__ float warp_reduce(float val) { + int warp_size = 32; + for (int offset = warp_size / 2; offset > 0; offset /= 2) + val += __shfl_down_sync(0xFFFFFFFF, val, offset); + return val; +} + +extern "C" __global__ void vector_norm(const float *x, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] * x[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} + +extern "C" __global__ void dot_product(const float *x, const float *y, float* z, int N) { + int warp_size = 32; + float sum = float(0); + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < N; i += blockDim.x * gridDim.x) { + sum += x[i] * y[i]; + } + sum = warp_reduce(sum); // Obtain the sum of values in the current warp; + if ((threadIdx.x & (warp_size - 1)) == 0) // Same as (threadIdx.x % warp_size) == 0 but faster + atomicAdd(z, sum); // The first thread in the warp updates the output; +} +""" + +SAXPY_KERNEL = """ +// Compute y = val + alpha * x; +extern "C" __global__ void saxpy(float* y, float *val, float *x, float alpha, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = val[i] + alpha * x[i]; + } +} + +extern "C" __global__ void cpy(float *y, const float *x, int n) { + for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; i += blockDim.x * gridDim.x) { + y[i] = x[i]; + } +} +""" + +############################## +############################## + + +class Benchmark9(Benchmark): + """ + Compute the conjugate gradient algorithm on a sparse symmetric matrix. + """ + + def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): + super().__init__("b9", benchmark, nvprof_profile) + self.size = 0 + self.num_nnz = 0 + self.max_degree = 3 # Each row has 3 nnz entries (not counting symmetric entries); + self.num_iterations = 4 + self.ptr = None + self.idx = None + self.val = None + + self.x = None + self.b = None + self.p = None + self.r = None + self.t1 = None + self.t2 = None + + self.ptr_cpu = None + self.idx_cpu = None + self.val_cpu = None + self.b_cpu = None + + self.cpu_result = None + self.gpu_result = None + + self.num_blocks_size = 32 + self.block_size = None + + self.vspmv_kernel = None + self.spmv_kernel = None + self.norm_kernel = None + self.saxpy_kernel = None + + self.row_cnt_1 = None + self.row_cnt_2 = None + self.row_cnt_3 = None + + @time_phase("allocation") + def alloc(self, size: int, block_size: dict = None) -> None: + self.size = size + self.block_size = block_size["block_size_1d"] + + self.gpu_result = np.zeros(self.size) + + # Create a random symmetric COO matrix; + self.random_seed = randint(0, 10000000) + seed(self.random_seed) + + # Create a random COO symmetric matrix; + t = [(0,0,0)] * self.size * self.max_degree * 2 + for i in range(self.size): + # Create max_degree random edges; + edges = sample(range(0, self.size), self.max_degree) + for j, e in enumerate(edges): + while i == e: + e = randint(0, self.size - 1) + tmp = random() + t[i * self.max_degree + j] = (i, e, tmp) + t[i * self.max_degree + j + self.size * self.max_degree] = (e, i, tmp) + + x, self.idx_cpu, self.val_cpu = zip(*sorted(t, key=lambda l: (l[0], l[1]))) + self.num_nnz = len(self.idx_cpu) + self.ptr_cpu = [0] * (self.size + 1) + for i, x_i in enumerate(x): + self.ptr_cpu[x_i + 1] += 1 + for i in range(len(self.ptr_cpu) - 1): + self.ptr_cpu[i + 1] += self.ptr_cpu[i] + + self.b_cpu = [0] * self.size + + # Allocate vectors; + self.ptr = polyglot.eval(language="grcuda", string=f"int[{self.size + 1}]") + self.idx = polyglot.eval(language="grcuda", string=f"int[{self.num_nnz}]") + self.val = polyglot.eval(language="grcuda", string=f"float[{self.num_nnz}]") + + self.x = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.p = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.r = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.b = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.y = polyglot.eval(language="grcuda", string=f"float[{size}]") + self.t1 = polyglot.eval(language="grcuda", string=f"float[1]") + self.t2 = polyglot.eval(language="grcuda", string=f"float[1]") + + self.row_cnt_1 = polyglot.eval(language="grcuda", string=f"int[1]") + self.row_cnt_2 = polyglot.eval(language="grcuda", string=f"int[1]") + self.row_cnt_3 = polyglot.eval(language="grcuda", string=f"int[1]") + + # Build the kernels; + build_kernel = polyglot.eval(language="grcuda", string="buildkernel") + self.spmv_kernel = build_kernel(SPMV_KERNEL, "spmv2", "pointer, pointer, pointer, pointer, pointer, pointer, sint32") + self.spmv_full_kernel = build_kernel(SPMV_KERNEL, "spmv_full", "pointer, pointer, pointer, pointer, pointer, pointer, sint32, float, pointer") + self.norm_kernel = build_kernel(SUM_KERNEL, "vector_norm", "const pointer, pointer, sint32") + self.dp_kernel = build_kernel(SUM_KERNEL, "dot_product", "const pointer, const pointer, pointer, sint32") + self.saxpy_kernel = build_kernel(SAXPY_KERNEL, "saxpy", "pointer, const pointer, const pointer, float, sint32") + self.cpy_kernel = build_kernel(SAXPY_KERNEL, "cpy", "pointer, const pointer, sint32") + + @time_phase("initialization") + def init(self): + for i in range(len(self.ptr_cpu)): + self.ptr[i] = self.ptr_cpu[i] + for i in range(len(self.idx_cpu)): + self.idx[i] = self.idx_cpu[i] + self.val[i] = self.val_cpu[i] + for i in range(len(self.b)): + self.b_cpu[i] = random() + self.b[i] = self.b_cpu[i] + + @time_phase("reset_result") + def reset_result(self) -> None: + seed(self.random_seed) + # Random initial solution; + for i in range(self.size): + self.x[i] = 1.0 + self.t1[0] = 0.0 + self.t2[0] = 0.0 + self.row_cnt_1[0] = 0 + self.row_cnt_2[0] = 0 + + def execute(self) -> object: + num_blocks_spmv = int(np.ceil(self.size / self.block_size)) + start_comp = System.nanoTime() + start = 0 + + # Initialization phase; + # r = b - A * x + self.execute_phase("spmv_init", self.spmv_full_kernel(num_blocks_spmv, self.block_size, 4 * self.block_size), + self.row_cnt_1, self.ptr, self.idx, self.val, self.x, self.r, self.size, -1, self.b) + # p = r + self.execute_phase("cpy_init", self.cpy_kernel(self.num_blocks_size, self.block_size), self.p, self.r, self.size) + # t1 = r^t * r + self.execute_phase("norm_init", self.norm_kernel(self.num_blocks_size, self.block_size), self.r, self.t1, self.size) + + for i in range(self.num_iterations): + # t2 = p^t * A * p + self.execute_phase(f"spmv_{i}", self.spmv_kernel(num_blocks_spmv, self.block_size, 4 * self.block_size), + self.row_cnt_2, self.ptr, self.idx, self.val, self.p, self.y, self.size) + self.t2[0] = 0 + self.execute_phase(f"dp_{i}", self.dp_kernel(self.num_blocks_size, self.block_size), self.p, self.y, self.t2, self.size) + + if self.time_phases: + start = System.nanoTime() + alpha = self.t1[0] / self.t2[0] + old_r_norm_squared = self.t1[0] + self.t1[0] = 0 + self.row_cnt_1[0] = 0.0 + self.row_cnt_2[0] = 0.0 + if self.time_phases: + end = System.nanoTime() + self.benchmark.add_phase({"name": f"alpha_{i}", "time_sec": (end - start) / 1_000_000_000}) + + # Update x: x = x + alpha * p + self.execute_phase(f"saxpy_x_{i}", self.saxpy_kernel(self.num_blocks_size, self.block_size), + self.x, self.x, self.p, alpha, self.size) + # r = r - alpha * y + self.execute_phase(f"saxpy_r_{i}", self.saxpy_kernel(self.num_blocks_size, self.block_size), + self.r, self.r, self.y, -1 * alpha, self.size) + # t1 = r^t * r + self.execute_phase(f"norm_{i}", self.norm_kernel(self.num_blocks_size, self.block_size), self.r, self.t1, self.size) + + if self.time_phases: + start = System.nanoTime() + beta = self.t1[0] / old_r_norm_squared + if self.time_phases: + end = System.nanoTime() + self.benchmark.add_phase({"name": f"beta_{i}", "time_sec": (end - start) / 1_000_000_000}) + + self.execute_phase(f"saxpy_p_{i}", self.saxpy_kernel(self.num_blocks_size, self.block_size), + self.p, self.r, self.p, beta, self.size) + + # Add a final sync step to measure the real computation time; + if self.time_phases: + start = System.nanoTime() + tmp1 = self.x[0] + end = System.nanoTime() + if self.time_phases: + self.benchmark.add_phase({"name": "sync", "time_sec": (end - start) / 1_000_000_000}) + self.benchmark.add_computation_time((end - start_comp) / 1_000_000_000) + # Compute GPU result; + for i in range(self.size): + self.gpu_result[i] = self.x[i] + + self.benchmark.add_to_benchmark("gpu_result", 0) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tgpu result: [" + ", ".join([f"{x:.4f}" for x in self.gpu_result[:10]]) + "...]") + + return self.gpu_result + + def cpu_validation(self, gpu_result: object, reinit: bool) -> None: + + def spmv(ptr, idx, val, vec): + res = np.zeros(len(ptr) - 1) + for i in range(len(ptr) - 1): + curr_sum = 0 + start = int(ptr[i]) + end = int(ptr[i + 1]) + for j in range(start, end): + curr_sum += val[j] * vec[idx[j]] + res[i] = curr_sum + return res + + # Recompute the CPU result only if necessary; + start = System.nanoTime() + if self.current_iter == 0 or reinit: + # Re-initialize the random number generator with the same seed as the GPU to generate the same values; + seed(self.random_seed) + # Initialize the support device arrays; + N = self.size + + x = np.ones(N) + # r = b - A * x + r = np.array(self.b_cpu) - np.array(spmv(self.ptr_cpu, self.idx_cpu, self.val_cpu, x)) + p = r.copy() + t1 = r.T.dot(r) + + # Main iteration; + for i in range(self.num_iterations): + y = spmv(self.ptr_cpu, self.idx_cpu, self.val_cpu, p) + t2 = p.dot(y) + alpha = t1 / t2 + t1_old = t1 + x += alpha * p + r -= alpha * y + t1 = r.T.dot(r) + beta = t1 / t1_old + p = r + beta * p + + self.cpu_result = x + + cpu_time = System.nanoTime() - start + + # Compare GPU and CPU results; + difference = 0 + for i in range(self.size): + difference += np.abs(self.cpu_result[i] - gpu_result[i]) + + self.benchmark.add_to_benchmark("cpu_time_sec", cpu_time) + self.benchmark.add_to_benchmark("cpu_gpu_res_difference", str(difference)) + if self.benchmark.debug: + BenchmarkResult.log_message(f"\tcpu result: [" + ", ".join([f"{x:.4f}" for x in self.cpu_result[:10]]) + + "...]; " + + f"difference: {difference:.4f}, time: {cpu_time:.4f} sec") + + diff --git a/projects/resources/python/benchmark/benchmark_main.py b/projects/resources/python/benchmark/benchmark_main.py index f9b54e17..7aff57a7 100644 --- a/projects/resources/python/benchmark/benchmark_main.py +++ b/projects/resources/python/benchmark/benchmark_main.py @@ -9,6 +9,8 @@ from bench.bench_6 import Benchmark6 from bench.bench_72 import Benchmark7 from bench.bench_8 import Benchmark8 +from bench.bench_9 import Benchmark9 +from bench.bench_10 import Benchmark10 from benchmark_result import BenchmarkResult ############################## @@ -24,6 +26,8 @@ "b6": Benchmark6, "b7": Benchmark7, "b8": Benchmark8, + "b9": Benchmark9, + "b10": Benchmark10, } num_elem = { @@ -35,6 +39,8 @@ "b6": [100], "b7": [100], "b8": [100], + "b9": [100], + "b10": [100], } policies = { @@ -46,6 +52,8 @@ "b6": ["default"], "b7": ["default"], "b8": ["default"], + "b9": ["default"], + "b10": ["default"], } ############################## diff --git a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py index c9dc2667..89c684ac 100644 --- a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py @@ -14,12 +14,12 @@ # Benchmark settings; benchmarks = [ - "b1", - # "b4", - "b5", - "b6", - "b7", - "b8", + # "b1", + # "b5", + # "b6", + # "b7", + # "b8", + "b10", ] num_elem = { @@ -29,6 +29,7 @@ "b6": [800000], "b7": [15_000_000], "b8": [4800], + "b10": [2500], } exec_policies = ["default", "sync"] @@ -46,6 +47,7 @@ "b6": 32, "b7": 32, "b8": 128, + "b10": 1024, } block_sizes_2d_dict = { @@ -55,6 +57,7 @@ "b6": 8, "b7": 8, "b8": 8, + "b10": 8, } ############################## @@ -78,7 +81,7 @@ def execute_grcuda_benchmark(benchmark, size, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, num_iter, debug, time_phases): block_size = (block_sizes_1d_dict[b], block_sizes_2d_dict[b]) - for m in [True]: #[True, False]: + for m in [True, False]: if debug: BenchmarkResult.log_message("") BenchmarkResult.log_message("") diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index ef67ac58..6eceab7f 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -14,12 +14,12 @@ # Benchmark settings; benchmarks = [ - "b1", - # "b4", - "b5", - "b6", - "b7", - "b8", + # "b1", + # "b5", + # "b6", + # "b7", + # "b8", + "b10", ] num_elem = { @@ -29,6 +29,7 @@ "b6": [20000, 50000, 200000, 500000, 800000], "b7": [2_000_000, 5_000_000, 7_500_000, 10_000_000, 15_000_000], "b8": [800, 1600, 2400, 4000, 4800], + "b10": [500, 1000, 1500, 2000, 2500], } exec_policies = ["default", "sync"] diff --git a/projects/resources/python/plotting/compute_transfer_computation_overlap.py b/projects/resources/python/plotting/compute_transfer_computation_overlap.py index f2e4ef5a..3bbbb7bb 100755 --- a/projects/resources/python/plotting/compute_transfer_computation_overlap.py +++ b/projects/resources/python/plotting/compute_transfer_computation_overlap.py @@ -14,7 +14,7 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" INPUT_DATE = "2020_07_20" -OUTPUT_DATE = "2020_07_20" +OUTPUT_DATE = "2020_08_05" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} @@ -24,6 +24,7 @@ "b6": "b6_1989.csv", "b7": "b7_2663.csv", "b8": "b8_10958.csv", + "b10": "b10_6538.csv", } SKIP_SUMMARY_ROWS = { @@ -32,6 +33,7 @@ "b6": 0, "b7": 0, "b8": 0, + "b10": 0, } NVPROF_HEADER = ["start_ms", "duration_ms", "Grid X", "Grid Y", "Grid Z", "Block X", "Block Y", "Block Z", diff --git a/projects/resources/python/plotting/plot_memory_throughput.py b/projects/resources/python/plotting/plot_memory_throughput.py index 10782bc0..34a6ff56 100755 --- a/projects/resources/python/plotting/plot_memory_throughput.py +++ b/projects/resources/python/plotting/plot_memory_throughput.py @@ -25,8 +25,8 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" -INPUT_DATE = "2020_07_28" -OUTPUT_DATE = "2020_07_282" +INPUT_DATE = "2020_08_05" +OUTPUT_DATE = "2020_08_05" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = { @@ -34,7 +34,8 @@ "b5": "B&S", "b6": "ML", "b7": "HITS", - "b8": "IMG" + "b8": "IMG", + "b10": "DL" } POLICIES = ["sync", "default"] POLICIES_DICT = {"default": "DAG Scheduling", "sync": "Serial Scheduling"} @@ -252,7 +253,7 @@ def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_t # For each benchmark and policy, compute the total computation time; summary_list = [] - for (b, p), group in res.groupby(by=["benchmark", "policy"]): + for (b, p), group in res.groupby(by=["benchmark", "policy"], sort=False): overlap_computation_time = get_computation_time_with_overlap(group) # Device memory; @@ -283,7 +284,7 @@ def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_t num_col = 3 - fig, axes = plt.subplots(1, num_col, figsize=(1.9 * num_col, 2.3)) + fig, axes = plt.subplots(1, num_col, figsize=(2.2 * num_col, 2.5)) plt.subplots_adjust(top=0.75, bottom=0.19, left=0.1, diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 2463a343..4a638934 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,11 +21,11 @@ from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot -INPUT_DATE = "2020_07_15_15_13_52_grcuda" -OUTPUT_DATE = "2020_07_15" +INPUT_DATE = "2020_08_04_21_03_21_grcuda" +OUTPUT_DATE = "2020_08_05" PLOT_DIR = "../../../../data/plots" -BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} +BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} def build_exec_time_plot(data, gridspec, x, y): @@ -193,7 +193,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): plt.rcParams['axes.labelsize'] = 14 # Lists of benchmarks and block sizes; - benchmark_list = sorted(data["benchmark"].unique()) + benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) num_col = len(benchmark_list) @@ -230,7 +230,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): plt.rcParams['axes.labelsize'] = 14 # Lists of benchmarks and block sizes; - benchmark_list = sorted(data["benchmark"].unique()) + benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] num_col = len(benchmark_list) num_row = 1 fig = plt.figure(figsize=(2.6 * num_col, 4.1 * num_row)) diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index b4e84810..82a3d2b0 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -26,12 +26,12 @@ ############################## -INPUT_DATE_GRCUDA = "2020_07_15_15_13_52_grcuda" -INPUT_DATE_CUDA = "2020_07_15_22_29_46_cuda" -OUTPUT_DATE = "2020_07_15" +INPUT_DATE_GRCUDA = "2020_08_04_21_03_21_grcuda" +INPUT_DATE_CUDA = "2020_08_05_14_04_56_cuda" +OUTPUT_DATE = "2020_08_05" PLOT_DIR = "../../../../data/plots" -BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} +BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} ############################## ############################## @@ -240,7 +240,7 @@ def ridgeplot(data): data.loc[group.index, "normalized_time_cuda"] = group["computation_sec_cuda"].values / median_baseline data.loc[group.index, "normalized_time_grcuda"] = group["computation_sec_grcuda"].values / median_baseline - benchmarks = data["benchmark"].unique() + benchmarks = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] block_sizes = data["block_size_str"].unique() sizes = data["size"].unique() @@ -268,7 +268,9 @@ def major_formatter(x, pos): "b5": [0.95, 1.05], "b6": [0.95, 1.05], "b7": [0.99, 0.99], - "b8": [0.87, 1.13]} + "b8": [0.87, 1.13], + "b10": [0.87, 1.13], + } # offsets = { # "b1": [0.85, 1.15], # "b5": [0.95, 1.05], @@ -337,7 +339,7 @@ def major_formatter(x, pos): plt.rcParams['axes.labelsize'] = 14 # Lists of benchmarks and block sizes; - benchmark_list = sorted(data["benchmark"].unique()) + benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) num_col = len(benchmark_list) num_row = len(block_size_list) @@ -373,7 +375,7 @@ def major_formatter(x, pos): plt.rcParams['axes.labelsize'] = 14 # Lists of benchmarks and block sizes; - benchmark_list = sorted(data["benchmark"].unique()) + benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] policy_list = sorted(data["exec_policy"].unique()) num_col = len(benchmark_list) num_row = len(policy_list) diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index 35ebc820..7300de45 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -27,20 +27,21 @@ DEFAULT_RES_DIR = "../../../../data/results" -INPUT_DATE_GRCUDA = "2020_07_16_10_59_36_grcuda" -OUTPUT_DATE = "2020_07_16" +INPUT_DATE_GRCUDA = "2020_08_04_21_30_43_grcuda" +OUTPUT_DATE = "2020_08_05" PLOT_DIR = "../../../../data/plots" B5_ITER = 10 B7_ITER = 5 -BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} +BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} BENCHMARK_PHASES = { "b1": ["square_1", "square_2", "reduce"], "b5": [y for x in [[f"bs_{i}"] for i in range(B5_ITER)] for y in x], "b6": ["rr_1", "rr_2", "rr_3", "nb_1", "nb_2", "nb_3", "nb_4", "softmax_1", "softmax_2", "argmax"], "b7": [y for x in [[f"spmv_a_{i}", f"spmv_h_{i}", f"sum_a_{i}", f"sum_h_{i}", f"divide_a_{i}", f"divide_h_{i}", f"norm_reset_{i}"] for i in range(B7_ITER)] for y in x], "b8": ["blur_small", "blur_large", "blur_unsharpen", "sobel_small", "sobel_large", "maximum", "minimum", "extend", "unsharpen", "combine", "combine_2"], + "b10": ["conv_x1", "conv_x2", "conv_y1", "conv_y2", "concat", "dot_product"], } ############################## @@ -79,12 +80,16 @@ def theoretical_speed_b8(data): combine = data["combine"] + np.maximum(data["blur_unsharpen"] + data["unsharpen"], data["blur_large"] + data["sobel_large"] + extend) return data["combine_2"] + np.maximum(data["blur_small"] + data["sobel_small"], combine) +def theoretical_speed_b10(data): + return np.maximum(data["conv_x1"] + data["conv_x2"], data["conv_y1"] + data["conv_y2"]) + data["concat"] + data["dot_product"] + THEORETICAL_SPEED_FUNCTIONS = { "b1": theoretical_speed_b1, "b5": theoretical_speed_b5, "b6": theoretical_speed_b6, "b7": theoretical_speed_b7, "b8": theoretical_speed_b8, + "b10": theoretical_speed_b10, } ############################## @@ -295,7 +300,7 @@ def build_theoretical_time_plot_compact(data, gridspec, x, y, baseline_labels=No plt.rcParams['axes.labelsize'] = 14 # Lists of benchmarks and block sizes; - benchmark_list = sorted(data["benchmark"].unique()) + benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) num_col = len(benchmark_list) num_row = len(block_size_list) @@ -331,7 +336,7 @@ def build_theoretical_time_plot_compact(data, gridspec, x, y, baseline_labels=No plt.rcParams['axes.labelsize'] = 14 # Lists of benchmarks and block sizes; - benchmark_list = sorted(data["benchmark"].unique()) + benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] policy_list = sorted(data["exec_policy"].unique()) num_col = len(benchmark_list) num_row = len(policy_list) diff --git a/projects/resources/python/plotting/plot_transfer_computation_overlap.py b/projects/resources/python/plotting/plot_transfer_computation_overlap.py index 9229be0a..8018d52d 100755 --- a/projects/resources/python/plotting/plot_transfer_computation_overlap.py +++ b/projects/resources/python/plotting/plot_transfer_computation_overlap.py @@ -22,10 +22,10 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" INPUT_DATE = "2020_07_20" -OUTPUT_DATE = "2020_07_20" +OUTPUT_DATE = "2020_08_05" PLOT_DIR = "../../../../data/plots" -BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images"} +BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} LABEL_DICT = {"ct_overlap_perc": "CT", "tc_overlap_perc": "TC", "cc_overlap_perc": "CC", "total_overlap_perc": "TOT", "fake_perc": ""} LABEL_LEGEND_DICT = {"ct_overlap_perc": "CT, computation w.r.t transfer", @@ -40,6 +40,7 @@ "b6": 1.25, "b7": 1.14, "b8": 1.30, + "b10": 1.40, } if __name__ == "__main__": @@ -118,7 +119,7 @@ def get_x_label_pos(i): else: return base_pos for i, b in enumerate(BENCHMARK_NAMES): - ax.annotate(f"{BENCHMARK_NAMES[b]}", xy=(get_x_label_pos(i), -0.25), fontsize=10, ha="center", xycoords="axes fraction") + ax.annotate(f"{BENCHMARK_NAMES[b]}", xy=(get_x_label_pos(i), -0.28), fontsize=10, ha="center", xycoords="axes fraction") ax.annotate(f"Speedup: ", xy=(get_x_label_pos(i) - 0.02, -0.4), fontsize=8, ha="center", xycoords="axes fraction") ax.annotate(f"{SPEEDUPS[b]:.2f}x", xy=(get_x_label_pos(i) + 0.045, -0.4), fontsize=8, ha="center", xycoords="axes fraction", color="#469E7B") From 61309068c6c455c48ad6c95429d235242ef94cda Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 5 Aug 2020 22:13:45 +0200 Subject: [PATCH 131/236] updated dl benchmark --- RESULTS.md | 14 +-- data/nvprof_log/2020_07_20/summary.csv | 2 +- projects/resources/cuda/b10.cuh | 35 ++++++-- projects/resources/cuda/b10_default.cu | 27 ++++-- projects/resources/cuda/b10_sync.cu | 31 +++++-- .../python/benchmark/bench/bench_10.py | 90 ++++++++++++++++--- .../benchmark/benchmark_nvprof_wrapper.py | 2 +- .../python/benchmark/benchmark_wrapper.py | 2 +- .../compute_transfer_computation_overlap.py | 2 +- .../python/plotting/plot_memory_throughput.py | 4 +- .../python/plotting/plot_speedup_baseline.py | 4 +- .../plotting/plot_speedup_grcuda_cuda.py | 8 +- .../plotting/plot_theoretical_performance.py | 8 +- .../plot_transfer_computation_overlap.py | 4 +- 14 files changed, 179 insertions(+), 54 deletions(-) diff --git a/RESULTS.md b/RESULTS.md index 01851b67..9bf1f114 100644 --- a/RESULTS.md +++ b/RESULTS.md @@ -160,7 +160,7 @@ SHARPEN(image,blur3) ─> UNSHARPEN(image,blur3,sharpened) ─────── ## Plots -![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_1_row_2020_07_15.png) +![Speedup w.r.t. serial, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_08_052/speedup_baseline_1_row_2020_08_052.png) In general, **DAG scheduling allows better GPU resource usage**: in many benchmarks (such as `bench_1` and `bench_5`) we observe how overlapping data-transfer and computation enables faster total execution time. In other cases (`bench_6` and `bench_7`) speedups are also provided by computation overlap. DAG schedling provides **speedups from 10% to 50%**, while being completely transparent to the programmer. @@ -174,16 +174,16 @@ As rule of thumb, **DAG scheduling is more robust to kernel configuration**: in In the case of serial synchronous scheduling, using small blocks results in underutilization of the GPU resources, while using DAG scheduling provides better resource utilization by scheduling multiple kernels in parallel. This is an extremely useful advantage of DAG scheduling, as it means that programmers have to spend less time profiling their code to find the optimal kernel configuration. -![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_2020_07_15.png) +![Speedup w.r.t. serial, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_08_052/speedup_baseline_2020_08_052.png) Performance of serial and DAG GrCUDA scheduling has been compared to the same benchmarks implemented directly in C++ and CUDA. The experimental setup and the kernels are exactly the same. In the case of CUDA asynchronous kernel execution, dependencies and synchronization points have been computed by hand, instead of automatically. This provides a **comparison of how the overhead introduced by GrCUDA impacts the total execution time** compared to lower-level kernel scheduling. In all cases, the gap between CUDA and GrCUDA is minimal, and converges to 0 as the data-set size increases. It can be safely stated that in any realistic computation using serial GrCUDA scheduling will not decrease performance. The only situation with a visible difference is `bench_8`, when processing very small images (`800x800` pixels), as the computation lasts only for a couple of milliseconds. -![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_grcuda_cuda_compact_2020_07_15.png) +![Relative exec. time w.r.t. CUDA, summary](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_08_052/speedup_baseline_grcuda_cuda_compact_2020_08_052.png) -![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_15/speedup_baseline_grcuda_cuda_2020_07_15.png) +![Relative exec. time w.r.t. CUDA, extended](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_08_052/speedup_baseline_grcuda_cuda_2020_08_052.png) These results are further reaffirmed by looking at the execution time distributions (for example, using the largest data-sets and `block_size=256`, to evaluate an average case). In a couple of cases (e.g `bench_1`) it can be seen how the CUDA implementation might be sligthly faster (around 5%), although the same is true for GrCUDA in `bench_8`, while other benchmarks show very similar distributions. @@ -199,11 +199,11 @@ DAG scheduling always provides execution times closer to the theoretical optimum In many benchmarks we are very close to the theoretical optimum, showing how DAG scheduling provides better GPU resource utilization and transfer-computation overlap. Not surprisingly, the only case where results are significantly lower than the optimum is `bench_5`, as it is composed of many independent computations that could in principle run in parallel: this is clearly not possible in practice, although DAG scheduling proves once again to be better than serial execution. -![Relative exec. time w.r.t. theoretical minimum time](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_16/speedup_theoretical_time_compact_2020_07_16.png) +![Relative exec. time w.r.t. theoretical minimum time](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_08_052/speedup_theoretical_time_compact_2020_08_052.png) ### Performance analysis -![Overlap amount](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_07_20/overlap_2020_07_20.png) +![Overlap amount](https://github.com/AlbertoParravicini/grcuda/blob/execution-model-sync/data/plots/2020_08_052/overlap_2020_08_052.png) For each benchmark, we can measure how much **overlap** is present in the computation. We measure 4 different types of overlap: @@ -222,7 +222,7 @@ Measures are taken for the largest data-size in the evaluation (for each benchma the computation lasts much longer than the data-transfer, and part of the computation cannot be overlapped. In all likelihood, a more optimized kernel computation would result in higher **CT** overlap, and better speedup. - + Using `nvprof` we measure the total amount of bytes read/written by each kernel, and analyse how the GPU memory throughput is affected by space-sharing. Note that `nvprof` affects the kernel execution and limits the execution of concurrent kernels due to the high overhead introduced by collecting memory access metrics for each kernel. diff --git a/data/nvprof_log/2020_07_20/summary.csv b/data/nvprof_log/2020_07_20/summary.csv index 2f2b7125..d0be9ed7 100644 --- a/data/nvprof_log/2020_07_20/summary.csv +++ b/data/nvprof_log/2020_07_20/summary.csv @@ -4,4 +4,4 @@ b5,0.24803521217460248,0.9309995299857262,0.31940070143967975,0.4084153016340686 b6,0.0022776189801614216,0.9661026728181651,0.3637018277212265,0.3651186673761415 b7,0.06038393891786274,0.46557339367676137,0.08448172861398016,0.12833553351558946 b8,0.00011424194033166917,0.08086681678156217,0.641453353108711,0.6406625201084443 -b10,0.014047476595909188,0.494838298287338,0.4775095858648788,0.477987934237355 +b10,0.06050546343404414,0.5065950688252165,0.3695414009569465,0.3841640211415351 diff --git a/projects/resources/cuda/b10.cuh b/projects/resources/cuda/b10.cuh index e87861e4..6e4683c3 100644 --- a/projects/resources/cuda/b10.cuh +++ b/projects/resources/cuda/b10.cuh @@ -4,7 +4,7 @@ #define NUM_THREADS_PER_BLOCK_2D 8 #define NUM_THREADS_PER_BLOCK 32 #define WARP_SIZE 32 - +#define NUM_BLOCKS 16 extern "C" __global__ void conv2d(float *out, float *x, float *kernels, int N, int M, int L, int K, int k_out, int stride) { extern __shared__ float kernel_local[]; @@ -21,10 +21,12 @@ extern "C" __global__ void conv2d(float *out, float *x, float *kernels, int N, i } __syncthreads(); - for (int m = 0; m < k_out; m++) { - for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < (int) ceilf((float) N / stride) - radius; i += blockDim.x * gridDim.x) { - int out_index = M * i / stride; - for (int j = blockIdx.y * blockDim.y + threadIdx.y; j < (int) ceilf((float) M / stride) - radius; j += blockDim.y * gridDim.y) { + + for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < (int) ceilf((float) N / stride) - radius; i += blockDim.x * gridDim.x) { + int out_index = M * i / stride; + for (int j = blockIdx.y * blockDim.y + threadIdx.y; j < (int) ceilf((float) M / stride) - radius; j += blockDim.y * gridDim.y) { + for (int m = 0; m < k_out; m++) { + // for (int m = blockIdx.z * blockDim.z + threadIdx.z; m < k_out; m += blockDim.z * gridDim.z) { float res = 0; int i_f = i * stride + radius; int j_f = j * stride + radius; @@ -45,6 +47,29 @@ extern "C" __global__ void conv2d(float *out, float *x, float *kernels, int N, i } } +extern "C" __global__ void mean_pooling(float *out, float *x, int N, int M, int L, int K, int stride) { + int radius = K / 2; + for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < (int) ceilf((float) N / stride) - radius; i += blockDim.x * gridDim.x) { + int out_index = M * i / stride; + int i_f = i * stride + radius; + for (int j = blockIdx.y * blockDim.y + threadIdx.y; j < (int) ceilf((float) M / stride) - radius; j += blockDim.y * gridDim.y) { + int j_f = j * stride + radius; + for (int l = blockIdx.z * blockDim.z + threadIdx.z; l < L; l += blockDim.z * gridDim.z) { + float res = 0; + for (int k_i = -radius; k_i <= radius; k_i++) { + int ni = i_f + k_i; + for (int k_j = -radius; k_j <= radius; k_j++) { + int nj = j_f + k_j; + res += x[((ni * M) + nj) * L + l]; + } + } + // Apply mean operator; + out[l + L * (j + out_index)] = res / (K * K); + } + } + } +} + extern "C" __global__ void gap(float *out, float *x, int N, int M, int L) { extern __shared__ float out_local[]; for(int i = threadIdx.x; i < L; i += blockDim.x) { diff --git a/projects/resources/cuda/b10_default.cu b/projects/resources/cuda/b10_default.cu index 21244f94..e0705437 100644 --- a/projects/resources/cuda/b10_default.cu +++ b/projects/resources/cuda/b10_default.cu @@ -28,14 +28,15 @@ int main(int argc, char *argv[]) { int N = options.N; int K = 3; - int channels = 3; + int channels = 1; int stride = 2; int kn1 = 8; int kn2 = 16; + int pooling_diameter = 5; int block_size_1d = options.block_size_1d; int block_size_2d = options.block_size_2d; - int num_blocks = 8; // options.num_blocks; + int num_blocks = NUM_BLOCKS; // options.num_blocks; int skip_iterations = options.skip_iterations; int err = 0; @@ -51,11 +52,14 @@ int main(int argc, char *argv[]) { auto start = clock_type::now(); float *x, *x1, *x2, *x3, *y, *y1, *y2, *y3, *kernel_1, *kernel_2, *kernel_3, *kernel_4, *z, *dense_weights, *res; + float *x11, *y11; float *x_cpu = (float *) malloc(sizeof(float) * N * N * channels); float *y_cpu = (float *) malloc(sizeof(float) * N * N * channels); int x_len = N * N * channels; int x1_len = (N / stride) * (N / stride) * kn1; - int x2_len = (N / (stride * stride)) * (N / (stride * stride)) * kn2; + int pooled_len = x1_len / (pooling_diameter * pooling_diameter); + int x2_len = ((N / stride) / pooling_diameter / stride) * ((N / stride) / pooling_diameter / stride) * kn2; + // int x2_len = (N / (stride * stride)) * (N / (stride * stride)) * kn2; int x3_len = kn2; err = cudaMallocManaged(&x, sizeof(float) * x_len); err = cudaMallocManaged(&x1, sizeof(float) * x1_len); @@ -78,6 +82,10 @@ int main(int argc, char *argv[]) { err = cudaMallocManaged(&z, sizeof(float) * z_len); err = cudaMallocManaged(&dense_weights, sizeof(float) * z_len); err = cudaMallocManaged(&res, sizeof(float)); + + + err = cudaMallocManaged(&x11, sizeof(float) * pooled_len); + err = cudaMallocManaged(&y11, sizeof(float) * pooled_len); if (debug && err) std::cout << err << std::endl; @@ -140,11 +148,20 @@ int main(int argc, char *argv[]) { dim3 grid_size(num_blocks, num_blocks); dim3 grid_size_2(num_blocks / 2, num_blocks / 2); + dim3 block_size_3d_dim(block_size_2d / 2, block_size_2d / 2, block_size_2d / 2); + dim3 grid_size_3(num_blocks / 2, num_blocks / 2, num_blocks / 2); + conv2d<<>>(x1, x, kernel_1, N, N, channels, K, kn1, stride); conv2d<<>>(y1, y, kernel_3, N, N, channels, K, kn1, stride); - conv2d<<>>(x2, x1, kernel_2, N / stride, N / stride, kn1, K, kn2, stride); - conv2d<<>>(y2, y1, kernel_4, N / stride, N / stride, kn1, K, kn2, stride); + mean_pooling<<>>(x11, x1, N / stride, N / stride, kn1, pooling_diameter, pooling_diameter); + mean_pooling<<>>(y11, y1, N / stride, N / stride, kn1, pooling_diameter, pooling_diameter); + + conv2d<<>>(x2, x11, kernel_2, N / stride / pooling_diameter, N / stride / pooling_diameter, kn1, K, kn2, stride); + conv2d<<>>(y2, y11, kernel_4, N / stride / pooling_diameter, N / stride / pooling_diameter, kn1, K, kn2, stride); + + // conv2d<<>>(x2, x1, kernel_2, N / stride, N / stride, kn1, K, kn2, stride); + // conv2d<<>>(y2, y1, kernel_4, N / stride, N / stride, kn1, K, kn2, stride); // gap<<>>(x3, x2, N / (stride * stride), N / (stride * stride), kn2); // gap<<>>(y3, y2, N / (stride * stride), N / (stride * stride), kn2); diff --git a/projects/resources/cuda/b10_sync.cu b/projects/resources/cuda/b10_sync.cu index 6fd1462a..d1d2c5fc 100644 --- a/projects/resources/cuda/b10_sync.cu +++ b/projects/resources/cuda/b10_sync.cu @@ -28,14 +28,15 @@ int main(int argc, char *argv[]) { int N = options.N; int K = 3; - int channels = 3; + int channels = 1; int stride = 2; int kn1 = 8; int kn2 = 16; + int pooling_diameter = 5; int block_size_1d = options.block_size_1d; int block_size_2d = options.block_size_2d; - int num_blocks = 8; // options.num_blocks; + int num_blocks = NUM_BLOCKS; // options.num_blocks; int skip_iterations = options.skip_iterations; int err = 0; @@ -51,11 +52,14 @@ int main(int argc, char *argv[]) { auto start = clock_type::now(); float *x, *x1, *x2, *x3, *y, *y1, *y2, *y3, *kernel_1, *kernel_2, *kernel_3, *kernel_4, *z, *dense_weights, *res; + float *x11, *y11; float *x_cpu = (float *) malloc(sizeof(float) * N * N * channels); float *y_cpu = (float *) malloc(sizeof(float) * N * N * channels); int x_len = N * N * channels; int x1_len = (N / stride) * (N / stride) * kn1; - int x2_len = (N / (stride * stride)) * (N / (stride * stride)) * kn2; + int pooled_len = x1_len / (pooling_diameter * pooling_diameter); + int x2_len = ((N / stride) / pooling_diameter / stride) * ((N / stride) / pooling_diameter / stride) * kn2; + // int x2_len = (N / (stride * stride)) * (N / (stride * stride)) * kn2; int x3_len = kn2; err = cudaMallocManaged(&x, sizeof(float) * x_len); err = cudaMallocManaged(&x1, sizeof(float) * x1_len); @@ -78,6 +82,10 @@ int main(int argc, char *argv[]) { err = cudaMallocManaged(&z, sizeof(float) * z_len); err = cudaMallocManaged(&dense_weights, sizeof(float) * z_len); err = cudaMallocManaged(&res, sizeof(float)); + + + err = cudaMallocManaged(&x11, sizeof(float) * pooled_len); + err = cudaMallocManaged(&y11, sizeof(float) * pooled_len); if (debug && err) std::cout << err << std::endl; @@ -121,15 +129,28 @@ int main(int argc, char *argv[]) { dim3 grid_size(num_blocks, num_blocks); dim3 grid_size_2(num_blocks / 2, num_blocks / 2); + dim3 block_size_3d_dim(block_size_2d / 2, block_size_2d / 2, block_size_2d / 2); + dim3 grid_size_3(num_blocks / 2, num_blocks / 2, num_blocks / 2); + conv2d<<>>(x1, x, kernel_1, N, N, channels, K, kn1, stride); cudaDeviceSynchronize(); conv2d<<>>(y1, y, kernel_3, N, N, channels, K, kn1, stride); cudaDeviceSynchronize(); - conv2d<<>>(x2, x1, kernel_2, N / stride, N / stride, kn1, K, kn2, stride); + mean_pooling<<>>(x11, x1, N / stride, N / stride, kn1, pooling_diameter, pooling_diameter); cudaDeviceSynchronize(); - conv2d<<>>(y2, y1, kernel_4, N / stride, N / stride, kn1, K, kn2, stride); + mean_pooling<<>>(y11, y1, N / stride, N / stride, kn1, pooling_diameter, pooling_diameter); + cudaDeviceSynchronize(); + + conv2d<<>>(x2, x11, kernel_2, N / stride / pooling_diameter, N / stride / pooling_diameter, kn1, K, kn2, stride); cudaDeviceSynchronize(); + conv2d<<>>(y2, y11, kernel_4, N / stride / pooling_diameter, N / stride / pooling_diameter, kn1, K, kn2, stride); + cudaDeviceSynchronize(); + + // conv2d<<>>(x2, x1, kernel_2, N / stride, N / stride, kn1, K, kn2, stride); + // cudaDeviceSynchronize(); + // conv2d<<>>(y2, y1, kernel_4, N / stride, N / stride, kn1, K, kn2, stride); + // cudaDeviceSynchronize(); // gap<<>>(x3, x2, N / (stride * stride), N / (stride * stride), kn2); // cudaDeviceSynchronize(); diff --git a/projects/resources/python/benchmark/bench/bench_10.py b/projects/resources/python/benchmark/bench/bench_10.py index dcea3839..f9460aa3 100644 --- a/projects/resources/python/benchmark/bench/bench_10.py +++ b/projects/resources/python/benchmark/bench/bench_10.py @@ -30,10 +30,12 @@ } __syncthreads(); - for (int m = 0; m < k_out; m++) { - for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < (int) ceilf((float) N / stride) - radius; i += blockDim.x * gridDim.x) { - int out_index = M * i / stride; - for (int j = blockIdx.y * blockDim.y + threadIdx.y; j < (int) ceilf((float) M / stride) - radius; j += blockDim.y * gridDim.y) { + + for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < (int) ceilf((float) N / stride) - radius; i += blockDim.x * gridDim.x) { + int out_index = M * i / stride; + for (int j = blockIdx.y * blockDim.y + threadIdx.y; j < (int) ceilf((float) M / stride) - radius; j += blockDim.y * gridDim.y) { + for (int m = 0; m < k_out; m++) { + // for (int m = blockIdx.z * blockDim.z + threadIdx.z; m < k_out; m += blockDim.z * gridDim.z) { float res = 0; int i_f = i * stride + radius; int j_f = j * stride + radius; @@ -55,6 +57,31 @@ } """ +POOLING = """ +extern "C" __global__ void mean_pooling(float *out, float *x, int N, int M, int L, int K, int stride) { + int radius = K / 2; + for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < (int) ceilf((float) N / stride) - radius; i += blockDim.x * gridDim.x) { + int out_index = M * i / stride; + int i_f = i * stride + radius; + for (int j = blockIdx.y * blockDim.y + threadIdx.y; j < (int) ceilf((float) M / stride) - radius; j += blockDim.y * gridDim.y) { + int j_f = j * stride + radius; + for (int l = blockIdx.z * blockDim.z + threadIdx.z; l < L; l += blockDim.z * gridDim.z) { + float res = 0; + for (int k_i = -radius; k_i <= radius; k_i++) { + int ni = i_f + k_i; + for (int k_j = -radius; k_j <= radius; k_j++) { + int nj = j_f + k_j; + res += x[((ni * M) + nj) * L + l]; + } + } + // Apply mean operator; + out[l + L * (j + out_index)] = res / (K * K); + } + } + } +} +""" + GAP = """ extern "C" __global__ void gap(float *out, float *x, int N, int M, int L) { extern __shared__ float out_local[]; @@ -135,14 +162,17 @@ def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): self.kernel_2 = None self.kernel_3 = None self.kernel_4 = None - self.channels = 3 + self.channels = 1 self.K = 3 self.kn1 = 8 - self.kn2 = 16 # 8 - self.stride = 2 # 4 + self.kn2 = 16 + self.stride = 2 + self.pooling = 5 self.x1 = None self.x2 = None + self.x11 = None + self.y11 = None self.x3 = None self.y1 = None self.y2 = None @@ -154,7 +184,7 @@ def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): self.cpu_result = None self.gpu_result = None - self.num_blocks_per_processor = 8 # i.e. K * number of SM on the GTX960 + self.num_blocks_per_processor = 16 # i.e. 2 * number of SM on the GTX960 self.block_size_1d = DEFAULT_BLOCK_SIZE_1D self.block_size_2d = DEFAULT_BLOCK_SIZE_2D @@ -163,6 +193,7 @@ def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): self.gap_kernel = None self.concat_kernel = None self.dp_kernel = None + self.pooling_kernel = None @time_phase("allocation") def alloc(self, size: int, block_size: dict = None) -> None: @@ -175,11 +206,13 @@ def alloc(self, size: int, block_size: dict = None) -> None: # Allocate vectors; self.x = polyglot.eval(language="grcuda", string=f"float[{size * size * self.channels}]") self.x1 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride) * (size // self.stride) * self.kn1}]") - self.x2 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride**2) * (size // self.stride**2) * self.kn2}]") + self.x11 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride // self.pooling) * (size // self.stride // self.pooling) * self.kn1}]") + self.x2 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride // self.pooling // self.stride) * (size // self.stride // self.pooling // self.stride) * self.kn2}]") self.x3 = polyglot.eval(language="grcuda", string=f"float[{self.kn2}]") self.y = polyglot.eval(language="grcuda", string=f"float[{size * size * self.channels}]") self.y1 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride) * (size // self.stride) * self.kn1}]") - self.y2 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride**2) * (size // self.stride**2) * self.kn2}]") + self.y11 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride // self.pooling) * (size // self.stride // self.pooling) * self.kn1}]") + self.y2 = polyglot.eval(language="grcuda", string=f"float[{(size // self.stride // self.pooling // self.stride) * (size // self.stride // self.pooling // self.stride) * self.kn2}]") self.y3 = polyglot.eval(language="grcuda", string=f"float[{self.kn2}]") self.kernel_1 = polyglot.eval(language="grcuda", string=f"float[{self.kn1 * self.K * self.K * self.channels}]") self.kernel_2 = polyglot.eval(language="grcuda", string=f"float[{self.kn1 * self.K * self.K * self.kn2}]") @@ -193,6 +226,7 @@ def alloc(self, size: int, block_size: dict = None) -> None: # Build the kernels; build_kernel = polyglot.eval(language="grcuda", string="buildkernel") self.conv2d_kernel = build_kernel(CONV2D, "conv2d", "pointer, pointer, const pointer, sint32, sint32, sint32, sint32, sint32, sint32") + self.pooling_kernel = build_kernel(POOLING, "mean_pooling", "pointer, const pointer, sint32, sint32, sint32, sint32, sint32") self.gap_kernel = build_kernel(GAP, "gap", "pointer, pointer, sint32, sint32, sint32") self.concat_kernel = build_kernel(CONCAT, "concat", "pointer, const pointer, const pointer, sint32") self.dp_kernel = build_kernel(DOT_PRODUCT, "dot_product", "const pointer, const pointer, pointer, sint32") @@ -242,12 +276,20 @@ def execute(self) -> object: self.execute_phase("conv_y1", self.conv2d_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * (self.K ** 2) * self.kn1 * self.channels), self.y1, self.y, self.kernel_3, self.size, self.size, self.channels, self.K, self.kn1, self.stride) + # Pooling; + self.execute_phase("pool_x1", + self.pooling_kernel((a / 2, a / 2, a / 2), (self.block_size_2d / 2, self.block_size_2d / 2, self.block_size_2d / 2)), + self.x11, self.x1, self.size // self.stride, self.size // self.stride, self.kn1, self.pooling, self.pooling) + self.execute_phase("pool_y1", + self.pooling_kernel((a / 2, a / 2, a / 2), (self.block_size_2d / 2, self.block_size_2d / 2, self.block_size_2d / 2)), + self.y11, self.y1, self.size // self.stride, self.size // self.stride, self.kn1, self.pooling, self.pooling) + # Other convolutions; self.execute_phase("conv_x2", self.conv2d_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * (self.K ** 2) * self.kn1 * self.kn2), - self.x2, self.x1, self.kernel_2, self.size // self.stride, self.size // self.stride, self.kn1, self.K, self.kn2, self.stride) + self.x2, self.x11, self.kernel_2, self.size // self.stride // self.pooling, self.size // self.stride // self.pooling, self.kn1, self.K, self.kn2, self.stride) self.execute_phase("conv_y2", self.conv2d_kernel((a, a), (self.block_size_2d, self.block_size_2d), 4 * (self.K ** 2) * self.kn1 * self.kn2), - self.y2, self.y1, self.kernel_4, self.size // self.stride, self.size // self.stride, self.kn1, self.K, self.kn2, self.stride) + self.y2, self.y11, self.kernel_4, self.size // self.stride // self.pooling, self.size // self.stride // self.pooling, self.kn1, self.K, self.kn2, self.stride) # Global average pooling; # self.execute_phase("gap_x", @@ -309,6 +351,24 @@ def conv3d2(x, kernels, shape, K, k_out, stride=1, operator=relu): out[m + k_out * (j + M * i // stride)] = operator(res) return out + def pooling(x, shape, K, stride): + N, M, L = shape + out = np.zeros((N // pooling, M // pooling, L)) + radius = K // 2 + for i in range(0, int(np.ceil(N / stride)) - radius): + for j in range(0, int(np.ceil(M / stride)) - radius): + for l in range(L): + res = 0 + i_f = i * stride + radius + j_f = j * stride + radius + for k_i in range(-radius, radius + 1): + for k_j in range(-radius, radius + 1): + ni = i_f + k_i + nj = j_f + k_j + res += x[((ni * M) + nj) * L + l] + out[l + L * (j + M * i // stride)] = res / K**2 + return out + def gap2(x, shape): N, M, L = shape out = np.zeros(L) @@ -350,13 +410,15 @@ def concat(x, y): # First convolution (N,N,1) -> (N/stride,N/stride,kn1) x_1 = conv3d2(np.array(self.x_cpu), kernel_1, (N, N, self.channels), self.K, self.kn1, stride=self.stride) + x_11 = pooling(x_1, (N // self.stride, N // self.stride, self.kn1), self.pooling, self.pooling) # Second convolution (N/stride,N/stride,kn1) -> (N/stride^2,N/stride^2,kn2) - x_2 = conv3d2(x_1, kernel_2, (N // self.stride, N // self.stride, self.kn1), self.K, self.kn2, stride=self.stride) + x_2 = conv3d2(x_11, kernel_2, (N // self.stride // self.pooling, N // self.stride // self.pooling, self.kn1), self.K, self.kn2, stride=self.stride) # First convolution (N,N,1) -> (N/stride,N/stride,kn1) y_1 = conv3d2(np.array(self.y_cpu), kernel_3, (N, N, self.channels), self.K, self.kn1, stride=self.stride) + y_11 = pooling(y_1, (N // self.stride, N // self.stride, self.kn1), self.pooling, self.pooling) # Second convolution (N/stride,N/stride,kn1) -> (N/stride^2,N/stride^2,kn2) - y_2 = conv3d2(y_1, kernel_4, (N // self.stride, N // self.stride, self.kn1), self.K, self.kn2, stride=self.stride) + y_2 = conv3d2(y_11, kernel_4, (N // self.stride // self.pooling, N // self.stride // self.pooling, self.kn1), self.K, self.kn2, stride=self.stride) # Global average pooling 2D; # x_3 = gap2(x_2, (N // (self.stride * self.stride), N // (self.stride * self.stride), self.kn2)) diff --git a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py index 89c684ac..357f89af 100644 --- a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py @@ -29,7 +29,7 @@ "b6": [800000], "b7": [15_000_000], "b8": [4800], - "b10": [2500], + "b10": [6000], } exec_policies = ["default", "sync"] diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 6eceab7f..01937b5c 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -29,7 +29,7 @@ "b6": [20000, 50000, 200000, 500000, 800000], "b7": [2_000_000, 5_000_000, 7_500_000, 10_000_000, 15_000_000], "b8": [800, 1600, 2400, 4000, 4800], - "b10": [500, 1000, 1500, 2000, 2500], + "b10": [2000, 3000, 4000, 5000, 6000], } exec_policies = ["default", "sync"] diff --git a/projects/resources/python/plotting/compute_transfer_computation_overlap.py b/projects/resources/python/plotting/compute_transfer_computation_overlap.py index 3bbbb7bb..d291e5f2 100755 --- a/projects/resources/python/plotting/compute_transfer_computation_overlap.py +++ b/projects/resources/python/plotting/compute_transfer_computation_overlap.py @@ -24,7 +24,7 @@ "b6": "b6_1989.csv", "b7": "b7_2663.csv", "b8": "b8_10958.csv", - "b10": "b10_6538.csv", + "b10": "b10_7753.csv", } SKIP_SUMMARY_ROWS = { diff --git a/projects/resources/python/plotting/plot_memory_throughput.py b/projects/resources/python/plotting/plot_memory_throughput.py index 34a6ff56..0ca370a7 100755 --- a/projects/resources/python/plotting/plot_memory_throughput.py +++ b/projects/resources/python/plotting/plot_memory_throughput.py @@ -26,7 +26,7 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" INPUT_DATE = "2020_08_05" -OUTPUT_DATE = "2020_08_05" +OUTPUT_DATE = "2020_08_052" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = { @@ -297,7 +297,7 @@ def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_t barplot(summary, axes[1], "L2 cache throughput", "l2_throughput", (0, 250), "Serial\nthroughput:", y_ticks=6, y_tick_format=lambda l: f"{int(l)} GB/s", baseline_annotation_format=lambda l: f"{int(l)}\nGB/s") barplot(summary, axes[2], "IPC", - "ipc", (0, 1.5), "Serial\nIPC:", y_ticks=7, y_tick_format=lambda l: f"{l:.2f}", baseline_annotation_format=lambda l: f"{l:.2f}") + "ipc", (0, 1.75), "Serial\nIPC:", y_ticks=8, y_tick_format=lambda l: f"{l:.2f}", baseline_annotation_format=lambda l: f"{l:.2f}") save_plot(PLOT_DIR, "memory_throughput_{}.{}", OUTPUT_DATE) diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 4a638934..7d3c0c5b 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -21,8 +21,8 @@ from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot -INPUT_DATE = "2020_08_04_21_03_21_grcuda" -OUTPUT_DATE = "2020_08_05" +INPUT_DATE = "2020_08_05_21_02_55_grcuda" +OUTPUT_DATE = "2020_08_052" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 82a3d2b0..813cad10 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -26,9 +26,9 @@ ############################## -INPUT_DATE_GRCUDA = "2020_08_04_21_03_21_grcuda" -INPUT_DATE_CUDA = "2020_08_05_14_04_56_cuda" -OUTPUT_DATE = "2020_08_05" +INPUT_DATE_GRCUDA = "2020_08_05_21_02_55_grcuda" +INPUT_DATE_CUDA = "2020_08_05_20_13_22_cuda" +OUTPUT_DATE = "2020_08_052" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} @@ -232,7 +232,7 @@ def ridgeplot(data): data["normalized_time_grcuda"] = 1 # grouped_data = data.groupby(["benchmark", "size", "block_size_str"], as_index=False) - grouped_data = data.groupby(["benchmark"], as_index=False) + grouped_data = data.groupby(["benchmark"], as_index=False, sort=False) for group_key, group in grouped_data: # Compute the median baseline computation time; median_baseline = np.median(group["computation_sec_cuda"]) diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index 7300de45..831ba9a1 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -27,8 +27,8 @@ DEFAULT_RES_DIR = "../../../../data/results" -INPUT_DATE_GRCUDA = "2020_08_04_21_30_43_grcuda" -OUTPUT_DATE = "2020_08_05" +INPUT_DATE_GRCUDA = "2020_08_05_21_36_01_grcuda" +OUTPUT_DATE = "2020_08_052" PLOT_DIR = "../../../../data/plots" B5_ITER = 10 @@ -41,7 +41,7 @@ "b6": ["rr_1", "rr_2", "rr_3", "nb_1", "nb_2", "nb_3", "nb_4", "softmax_1", "softmax_2", "argmax"], "b7": [y for x in [[f"spmv_a_{i}", f"spmv_h_{i}", f"sum_a_{i}", f"sum_h_{i}", f"divide_a_{i}", f"divide_h_{i}", f"norm_reset_{i}"] for i in range(B7_ITER)] for y in x], "b8": ["blur_small", "blur_large", "blur_unsharpen", "sobel_small", "sobel_large", "maximum", "minimum", "extend", "unsharpen", "combine", "combine_2"], - "b10": ["conv_x1", "conv_x2", "conv_y1", "conv_y2", "concat", "dot_product"], + "b10": ["conv_x1", "pool_x1", "conv_x2", "conv_y1", "pool_y1", "conv_y2", "concat", "dot_product"], } ############################## @@ -81,7 +81,7 @@ def theoretical_speed_b8(data): return data["combine_2"] + np.maximum(data["blur_small"] + data["sobel_small"], combine) def theoretical_speed_b10(data): - return np.maximum(data["conv_x1"] + data["conv_x2"], data["conv_y1"] + data["conv_y2"]) + data["concat"] + data["dot_product"] + return np.maximum(data["conv_x1"] + data["pool_x1"] + data["conv_x2"], data["conv_y1"] + data["pool_y1"] + data["conv_y2"]) + data["concat"] + data["dot_product"] THEORETICAL_SPEED_FUNCTIONS = { "b1": theoretical_speed_b1, diff --git a/projects/resources/python/plotting/plot_transfer_computation_overlap.py b/projects/resources/python/plotting/plot_transfer_computation_overlap.py index 8018d52d..86099fec 100755 --- a/projects/resources/python/plotting/plot_transfer_computation_overlap.py +++ b/projects/resources/python/plotting/plot_transfer_computation_overlap.py @@ -22,7 +22,7 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" INPUT_DATE = "2020_07_20" -OUTPUT_DATE = "2020_08_05" +OUTPUT_DATE = "2020_08_052" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} @@ -40,7 +40,7 @@ "b6": 1.25, "b7": 1.14, "b8": 1.30, - "b10": 1.40, + "b10": 1.34, } if __name__ == "__main__": From 1a6666ef1420c2ae518db970a60a5799aa5aef11 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 12 Aug 2020 11:31:54 +0200 Subject: [PATCH 132/236] addign plots for paper --- .../python/benchmark/bench/bench_10.py | 1 - .../python/plotting/plot_speedup_baseline.py | 120 +++++++- .../plotting/plot_speedup_grcuda_cuda.py | 291 ++++++++++++++---- 3 files changed, 357 insertions(+), 55 deletions(-) diff --git a/projects/resources/python/benchmark/bench/bench_10.py b/projects/resources/python/benchmark/bench/bench_10.py index f9460aa3..760a8d99 100644 --- a/projects/resources/python/benchmark/bench/bench_10.py +++ b/projects/resources/python/benchmark/bench/bench_10.py @@ -218,7 +218,6 @@ def alloc(self, size: int, block_size: dict = None) -> None: self.kernel_2 = polyglot.eval(language="grcuda", string=f"float[{self.kn1 * self.K * self.K * self.kn2}]") self.kernel_3 = polyglot.eval(language="grcuda", string=f"float[{self.kn1 * self.K * self.K * self.channels}]") self.kernel_4 = polyglot.eval(language="grcuda", string=f"float[{self.kn1 * self.K * self.K * self.kn2}]") - self.z = polyglot.eval(language="grcuda", string=f"float[{len(self.y2) * 2}]") self.dense_weights = polyglot.eval(language="grcuda", string=f"float[{len(self.z)}]") self.res = polyglot.eval(language="grcuda", string=f"float[1]") diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 7d3c0c5b..8b3a63bc 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -22,7 +22,7 @@ INPUT_DATE = "2020_08_05_21_02_55_grcuda" -OUTPUT_DATE = "2020_08_052" +OUTPUT_DATE = "2020_08_11" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} @@ -177,6 +177,87 @@ def build_exec_time_plot_1_row(data, gridspec, y): leg._legend_box.align = "left" return ax + + +def build_exec_time_plot_2_row(data, gridspec, i, j): + + data["size_str"] = data["size"].astype(str) + + palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"], COLORS["b4"]] + markers = ["o", "X", "D", "P"] + + # Add a lineplot with the exec times; + ax = fig.add_subplot(gridspec[i, j]) + ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) + ax = sns.lineplot(x="size_str", y="computation_speedup", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, + err_style="bars", linewidth=2, legend=None, sort=False, ci=None, zorder=2) + print(data.groupby(["size_str", "block_size_str"])["computation_speedup"].apply(gmean)) + data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["computation_speedup"].apply(gmean).reset_index() + order = data["block_size_str"].unique() + ax = sns.scatterplot(x="size_str", y="computation_speedup", hue="block_size_str", data=data_averaged, palette=palette, ax=ax, edgecolor="#0f0f0f", + size_norm=30, legend=False, zorder=3, ci=None, markers=markers, style="block_size_str", hue_order=order, style_order=order, linewidth=0.05) + + labels = sorted(data["size"].unique()) + labels_str = [str(x) for x in labels] + + # Top y-lim is depends on the benchmark, and is multiple of 1.5; + max_y_val = np.max(data.groupby(["block_size_str", "size_str"])["computation_speedup"].median()) + fixed_max_y_val = np.ceil(max_y_val / 1.5) * 1.5 + + ax.set_ylim((0.9, fixed_max_y_val)) + + # Add a horizontal line to denote speedup = 1x; + ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + + # Set the x ticks; + ax.set_xticks(labels_str) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) + ax.tick_params(labelcolor="black") + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(7)) + if j == 0: + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=10) + else: + ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # Hide tick markers; + for tic in ax.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + ax.set_ylabel(None) + ax.set_xlabel(None) + + # Add benchmark name and baseline execution time annotations; + ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.05), fontsize=12, ha="center", xycoords="axes fraction") + + # Turn off tick lines; + ax.xaxis.grid(False) + + # Add baseline execution time annotations (median of execution time across blocks); + ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.27), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + for l_i, l in enumerate(labels): + baseline_median = np.median(data[data["size"] == int(l)]["baseline_time_sec"]) + ax.annotate(f"{int(1000 * baseline_median)}", xy=(l_i, -0.37), fontsize=9, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + + # Legend; + if i == 0 and j == 0: + legend_labels = [f"1D={x.split(',')[0]}" for x in data["block_size_str"].unique()] + custom_lines = [ + lines.Line2D([], [], color="white", marker=markers[i], markersize=10, label=legend_labels[i], markerfacecolor=palette[i], markeredgecolor="#2f2f2f") + for i in range(len(legend_labels))] + # Add fake entries to have a comment about 2d and 3d sizes; + # custom_lines += [Rectangle((0, 0), 1, 1, fc="w", fill=False, edgecolor='none', linewidth=0)] * 2 + # legend_labels += ["", ""] + # # Re-sort labels by transposing them; + # custom_lines = np.array(custom_lines).reshape((-1, 2)).T.reshape(-1) + # legend_labels = np.array(legend_labels).reshape((-1, 2)).T.reshape(-1) + + leg = fig.legend(custom_lines, legend_labels, + bbox_to_anchor=(0.99, 1), fontsize=10, ncol=len(legend_labels), handletextpad=0.1, columnspacing=0.2) + leg.set_title("Block size:\n2D=8x8, 3D=4x4x4", prop={"size": 10}) + leg._legend_box.align = "left" + + return ax if __name__ == "__main__": @@ -253,4 +334,41 @@ def build_exec_time_plot_1_row(data, gridspec, y): save_plot(PLOT_DIR, "speedup_baseline_1_row_{}.{}", OUTPUT_DATE) + + #%% Similar plot, but formatted for 1-column on a paper; + + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams['axes.titlepad'] = 20 + plt.rcParams['axes.labelpad'] = 10 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + + # Lists of benchmarks and block sizes; + benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] + num_row = 2 + num_col = len(benchmark_list) // num_row + fig = plt.figure(figsize=(2.2 * num_col, 2.7 * num_row)) + gs = gridspec.GridSpec(num_row, num_col) + plt.subplots_adjust(top=0.82, + bottom=0.15, + left=0.08, + right=0.98, + hspace=0.55, + wspace=0.15) + + exec_time_axes = [] + speedups = [] + for b_i, b in enumerate(benchmark_list): + i = b_i // num_col + j = b_i % num_col + curr_res = data[data["benchmark"] == b].reset_index(drop=True) + speedups += [curr_res.groupby(["size", "block_size_str"])["computation_speedup"].apply(gmean)] + exec_time_axes += [build_exec_time_plot_2_row(curr_res, gs, i, j)] + + plt.annotate("Input number of elements", xy=(0.5, 0.02), fontsize=14, ha="center", va="center", xycoords="figure fraction") + # plt.annotate("Speedup over\nserial scheduling", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Parallel scheduler speedup\nover serial scheduler", fontsize=16, x=.02, y=0.99, ha="left") + + save_plot(PLOT_DIR, "speedup_baseline_2_row_{}.{}", OUTPUT_DATE) \ No newline at end of file diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 813cad10..6572b0bc 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -18,7 +18,7 @@ import os from load_data import load_data, load_data_cuda, join_tables -from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot +from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot, update_width, add_labels, get_upper_ci_size import matplotlib.ticker as ticker @@ -28,7 +28,7 @@ INPUT_DATE_GRCUDA = "2020_08_05_21_02_55_grcuda" INPUT_DATE_CUDA = "2020_08_05_20_13_22_cuda" -OUTPUT_DATE = "2020_08_052" +OUTPUT_DATE = "2020_08_11" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} @@ -110,7 +110,7 @@ def build_exec_time_plot_grcuda_cuda(data, gridspec, x, y): # Legend; if y == 0 and x == 0: - legend_labels = ["DAG Scheduling", "Serial Scheduling"] + legend_labels = ["Paraller Scheduler", "Serial Scheduler"] custom_lines = [ lines.Line2D([], [], color="white", marker=markers[i], markersize=10, label=legend_labels[i], markerfacecolor=palette[i], markeredgecolor="#2f2f2f") for i in range(len(legend_labels))] @@ -128,7 +128,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): data["size_str"] = data["size"].astype(str) - legend_labels = ["DAG Scheduling", "Serial Scheduling"] + legend_labels = ["Paraller Scheduler", "Serial Scheduler"] palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"], COLORS["b4"]][:len(data["block_size_str"].unique())] markers = ["o", "X", "D", "P"][:len(data["block_size_str"].unique())] @@ -171,7 +171,7 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): # Add policy annotation; if y == 0: - ax.annotate(f"{legend_labels[x]}", xy=(-0.15, 1.25), fontsize=14, ha="left", xycoords="axes fraction") + ax.annotate(f"{legend_labels[x % 2]}", xy=(-0.15, 1.25), fontsize=14, ha="left", xycoords="axes fraction") ax.set_ylabel(None) ax.set_xlabel(None) @@ -203,6 +203,85 @@ def build_exec_time_plot_grcuda_cuda_compact(data, gridspec, x, y): return ax +def build_exec_time_plot_grcuda_cuda_2rows(data, gridspec, x, y): + + data["size_str"] = data["size"].astype(str) + + legend_labels = ["Paraller Scheduler", "Serial Scheduler"] + + palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"], COLORS["b4"]][:len(data["block_size_str"].unique())] + markers = ["o", "X", "D", "P"][:len(data["block_size_str"].unique())] + order = data["block_size_str"].unique() + + # Add a lineplot with the exec times; + ax = fig.add_subplot(gridspec[x, y]) + ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) + + ax = sns.lineplot(x="size_str", y="grcuda_cuda_speedup", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, + err_style="bars", linewidth=2, legend=None, sort=False, ci=None, hue_order=order, zorder=2) + data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["grcuda_cuda_speedup"].apply(gmean).reset_index() + + ax = sns.scatterplot(x="size_str", y="grcuda_cuda_speedup", hue="block_size_str", data=data_averaged, palette=palette, ax=ax, edgecolor="#0f0f0f", + size_norm=30, legend=False, zorder=3, ci=None, markers=markers, style="block_size_str", hue_order=order, style_order=order, linewidth=0.05) + + labels = sorted(data["size"].unique()) + labels_str = [str(x) for x in labels] + + # Set the same y limits in each plot; + ax.set_ylim((0.0, 1.5)) + + # Add a horizontal line to denote speedup = 1x; + ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + + # Set the x ticks; + ax.set_xticks(labels_str) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) + ax.tick_params(labelcolor="black") + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(4)) + if y == 0: + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=8) + else: + ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # Hide tick markers; + for tic in ax.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + # Add policy annotation; + if y == 0 and x % 2 == 0: + ax.annotate(f"{legend_labels[x // 2]}", xy=(-0.3, -1.4), fontsize=14, ha="center", xycoords="axes fraction", rotation=90) + + ax.set_ylabel(None) + ax.set_xlabel(None) + + # Add benchmark name and baseline execution time annotations; + ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.1), fontsize=10, ha="center", xycoords="axes fraction") + + # Turn off tick lines; + ax.xaxis.grid(False) + + # Add baseline execution time annotations (median of execution time across blocks); + ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.48), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + for i, l in enumerate(labels): + baseline_median = np.median(data[data["size"] == int(l)]["baseline_time_sec_cuda"]) + ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.69), fontsize=9, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + + # Legend; + if x == 0 and y== 0: + legend_labels = [f"1D={x.split(',')[0]}" for x in data["block_size_str"].unique()] + custom_lines = [ + lines.Line2D([], [], color="white", marker=markers[i], markersize=10, label=legend_labels[i], markerfacecolor=palette[i], markeredgecolor="#2f2f2f") + for i in range(len(legend_labels))] + leg = fig.legend(custom_lines, legend_labels, + bbox_to_anchor=(0.99, 1), fontsize=10, ncol=2, handletextpad=0.1, columnspacing=0.2) + leg.set_title("Block size:\n2D=8x8, 3D=4x4x4", prop={"size": 10}) + leg._legend_box.align = "left" + + return ax + + + def ridgeplot(data): # Plotting setup; sns.set(font_scale=1.4) @@ -321,7 +400,7 @@ def major_formatter(x, pos): # Main plot title; g.fig.suptitle("Exec. Time Distribution,\nCUDA vs GrCUDA", ha="left", x=0.05, y=0.95, fontsize=18) - return g + return g ############################## ############################## @@ -331,76 +410,182 @@ def major_formatter(x, pos): data_cuda = load_data_cuda(INPUT_DATE_CUDA, skip_iter=3) data = join_tables(data_grcuda, data_cuda) - sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - plt.rcParams["font.family"] = ["Latin Modern Roman"] - plt.rcParams['axes.titlepad'] = 20 - plt.rcParams['axes.labelpad'] = 10 - plt.rcParams['axes.titlesize'] = 22 - plt.rcParams['axes.labelsize'] = 14 - - # Lists of benchmarks and block sizes; - benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] - block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) - num_col = len(benchmark_list) - num_row = len(block_size_list) - fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) - gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.8, - bottom=0.15, - left=0.2, - right=0.90, - hspace=1.1, - wspace=0.15) + # sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + # plt.rcParams["font.family"] = ["Latin Modern Roman"] + # plt.rcParams['axes.titlepad'] = 20 + # plt.rcParams['axes.labelpad'] = 10 + # plt.rcParams['axes.titlesize'] = 22 + # plt.rcParams['axes.labelsize'] = 14 + + # # Lists of benchmarks and block sizes; + # benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] + # block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) + # num_col = len(benchmark_list) + # num_row = len(block_size_list) + # fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) + # gs = gridspec.GridSpec(num_row, num_col) + # plt.subplots_adjust(top=0.8, + # bottom=0.15, + # left=0.2, + # right=0.90, + # hspace=1.1, + # wspace=0.15) - exec_time_axes = [] - for b_i, b in enumerate(benchmark_list): - for block_size_i, block_size in enumerate(block_size_list): - curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) - exec_time_axes += [build_exec_time_plot_grcuda_cuda(curr_res, gs, block_size_i, b_i)] + # exec_time_axes = [] + # for b_i, b in enumerate(benchmark_list): + # for block_size_i, block_size in enumerate(block_size_list): + # curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) + # exec_time_axes += [build_exec_time_plot_grcuda_cuda(curr_res, gs, block_size_i, b_i)] - plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") - plt.annotate("Speedup", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + # plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") + # plt.annotate("Speedup", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") + # plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") - save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_{}.{}", OUTPUT_DATE) + # save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_{}.{}", OUTPUT_DATE) #%% Similar plot, but all block sizes are on 1 row; + # sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + # plt.rcParams["font.family"] = ["Latin Modern Roman"] + # plt.rcParams['axes.titlepad'] = 20 + # plt.rcParams['axes.labelpad'] = 10 + # plt.rcParams['axes.titlesize'] = 22 + # plt.rcParams['axes.labelsize'] = 14 + + # # Lists of benchmarks and block sizes; + # benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] + # policy_list = sorted(data["exec_policy"].unique()) + # num_col = len(benchmark_list) + # num_row = len(policy_list) + # fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) + # gs = gridspec.GridSpec(num_row, num_col) + # plt.subplots_adjust(top=0.8, + # bottom=0.14, + # left=0.1, + # right=0.95, + # hspace=0.8, + # wspace=0.15) + + # exec_time_axes = [] + # for b_i, b in enumerate(benchmark_list): + # for p_i, p in enumerate(policy_list): + # curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) + # exec_time_axes += [build_exec_time_plot_grcuda_cuda_compact(curr_res, gs, p_i, b_i)] + + # plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") + # plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") + # plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + + # save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_compact_{}.{}", OUTPUT_DATE) + + + #%% Similar plot, but the plot fits on 1 row of a paper; sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) plt.rcParams["font.family"] = ["Latin Modern Roman"] plt.rcParams['axes.titlepad'] = 20 plt.rcParams['axes.labelpad'] = 10 plt.rcParams['axes.titlesize'] = 22 plt.rcParams['axes.labelsize'] = 14 + plt.rcParams['xtick.major.pad'] = 4 # Lists of benchmarks and block sizes; benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] - policy_list = sorted(data["exec_policy"].unique()) - num_col = len(benchmark_list) - num_row = len(policy_list) - fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) + policy_list = list(reversed(sorted(data["exec_policy"].unique()))) + num_col = len(benchmark_list) // 2 + num_row = len(policy_list) * 2 + fig = plt.figure(figsize=(2.2 * num_col, 1.8 * num_row)) gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.8, - bottom=0.14, - left=0.1, - right=0.95, - hspace=0.8, + plt.subplots_adjust(top=0.84, + bottom=0.12, + left=0.10, + right=0.98, + hspace=1.1, wspace=0.15) exec_time_axes = [] - for b_i, b in enumerate(benchmark_list): - for p_i, p in enumerate(policy_list): + for p_i, p in enumerate(policy_list): + for b_i, b in enumerate(benchmark_list): + index_tot = (len(benchmark_list) * p_i + b_i) + j = index_tot % num_col + i = index_tot // num_col curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) - exec_time_axes += [build_exec_time_plot_grcuda_cuda_compact(curr_res, gs, p_i, b_i)] + exec_time_axes += [build_exec_time_plot_grcuda_cuda_2rows(curr_res, gs, i, j)] - plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") - plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Speedup of GrCUDA w.r.t. CUDA", fontsize=25, x=.05, y=0.99, ha="left") + plt.annotate("Input number of elements", xy=(0.5, 0.02), fontsize=14, ha="center", va="center", xycoords="figure fraction") + # plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") + plt.suptitle("Speedup of GrCUDA scheduling w.r.t.\nhand-optimized CUDA scheduling", fontsize=16, x=.05, y=0.99, ha="left") - save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_compact_{}.{}", OUTPUT_DATE) + save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_2rows_{}.{}", OUTPUT_DATE) #%% Ridge plot with distributions; - g = ridgeplot(data) - save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_ridgeplot_{}.{}", OUTPUT_DATE) \ No newline at end of file + # g = ridgeplot(data) + # save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_ridgeplot_{}.{}", OUTPUT_DATE) + + + #%% Summary plot with CUDA speedups; + + # BENCHMARK_NAMES = {"mean": "Geomean", "b1": "Vector\nSquares", "b5": "B&S", "b6": "ML\nEnsemble", "b7": "HITS", "b8": "Images", "b10": "DL"} + + # sns.set_style("white", {"ytick.left": True}) + # plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] + # plt.rcParams['axes.titlepad'] = 25 + # plt.rcParams['axes.labelpad'] = 5 + # plt.rcParams['axes.titlesize'] = 22 + # plt.rcParams['axes.labelsize'] = 14 + # plt.rcParams['xtick.major.pad'] = 8 + + # cuda_summary = data_cuda[data_cuda["exec_policy"] == "default"].groupby(["benchmark", "block_size_str", "size"], sort=False)["computation_speedup"].apply(gmean).reset_index(drop=False) + # cuda_summary = cuda_summary.sort_values(by=["benchmark"], key=lambda x: x.apply(lambda y: int(y[1:]))) + + # num_col = 1 + # fig = plt.figure(figsize=(3.8 * num_col, 2)) + # gs = gridspec.GridSpec(1, 1) + # plt.subplots_adjust(top=0.78, + # bottom=0.15, + # left=0.14, + # right=.99, + # hspace=0.9, + # wspace=0.05) + + # palettes = ["#C8FCB6"] * len(cuda_summary["benchmark"].unique()) + ["#96DE9B"] + + # # Add geomean; + # gmean_res = pd.DataFrame(cuda_summary.groupby(["benchmark"], as_index=False).agg(gmean)) + # gmean_res["benchmark"] = "mean" + # res = pd.concat([cuda_summary, gmean_res]) + + # ax = fig.add_subplot(gs[0, 0]) + # ax0 = ax + + # ax = sns.barplot(x="benchmark", y="computation_speedup", data=res, palette=palettes, capsize=.05, errwidth=0.8, ax=ax, edgecolor="#2f2f2f", estimator=gmean) + + # ax.set_ylabel("Speedup", fontsize=11) + # ax.set_xlabel("") + # ax.set_ylim((0.8, 1.6)) + # labels = ax.get_xticklabels() + # for j, l in enumerate(labels): + # l.set_text(BENCHMARK_NAMES[l._text]) + # ax.set_xticklabels(labels, ha="center", va="center") + # ax.tick_params(axis='x', which='major', labelsize=8, rotation=0) + + # ax.yaxis.set_major_formatter(ticker.StrMethodFormatter("{x:.1f}x")) + # ax.yaxis.set_major_locator(plt.LinearLocator(6)) + # ax.tick_params(axis='y', which='major', labelsize=8) + # ax.grid(True, axis="y") + + # update_width(ax, 0.5) + + # # Speedup labels; + # offsets = [] + # for b in res["benchmark"].unique(): + # offsets += [get_upper_ci_size(res.loc[res["benchmark"] == b, "computation_speedup"], ci=0.6)] + # offsets = [o + 0.02 if not np.isnan(o) else 0.2 for o in offsets] + # # offsets[1] = 0.12 + # offsets[-1] = 0.1 + # add_labels(ax, vertical_offsets=offsets, rotation=0, fontsize=8, skip_zero=False) + + # plt.suptitle("Achievable speedup in CUDA with hand-tuned\nGPU data transfer and execution overlap", fontsize=11, x=.01, y=0.99, ha="left") + + # save_plot(PLOT_DIR, "cuda_speedup__{}.{}", OUTPUT_DATE) \ No newline at end of file From 59437499c57eb0fb41fc0277dbed9cb156c65534 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 12 Aug 2020 13:49:09 +0200 Subject: [PATCH 133/236] updated plots --- .../python/plotting/plot_memory_throughput.py | 29 +-- .../python/plotting/plot_speedup_baseline.py | 4 +- .../plotting/plot_speedup_grcuda_cuda.py | 11 +- .../plotting/plot_theoretical_performance.py | 218 ++++++++++++++---- .../plot_transfer_computation_overlap.py | 20 +- 5 files changed, 207 insertions(+), 75 deletions(-) diff --git a/projects/resources/python/plotting/plot_memory_throughput.py b/projects/resources/python/plotting/plot_memory_throughput.py index 0ca370a7..8670a6f2 100755 --- a/projects/resources/python/plotting/plot_memory_throughput.py +++ b/projects/resources/python/plotting/plot_memory_throughput.py @@ -26,7 +26,7 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" INPUT_DATE = "2020_08_05" -OUTPUT_DATE = "2020_08_052" +OUTPUT_DATE = "2020_08_11" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = { @@ -203,18 +203,18 @@ def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_t rects2 = ax.bar(x + bar_width / 2, y_default, bar_width, label="default", color=palette[1], edgecolor=edgecolor) ax.set_xticks(x) - ax.set_xticklabels(x_labels, fontsize=7, va="center") + ax.set_xticklabels(x_labels, fontsize=8, va="center") # ax.set_ylim((0, 1.1 * summary["memory_throughput"].max())) ax.set_ylim(y_limit) # Set the y ticks; ax.yaxis.set_major_locator(plt.LinearLocator(y_ticks)) - ax.set_yticklabels(labels=[y_tick_format(l) for l in ax.get_yticks()], ha="right", fontsize=6) + ax.set_yticklabels(labels=[y_tick_format(l) for l in ax.get_yticks()], ha="right", fontsize=8) ax.grid(True, axis="y") # ax.annotate(title, fontsize=9, x=.02, y=0.95, ha="left") - plt.suptitle("Hardware metrics\nfor each benchmark and execution policy", fontsize=9, x=.01, y=0.97, ha="left") - ax.annotate(title, xy=(0, 1.05), fontsize=7, ha="left", xycoords="axes fraction")#, xycoords="data", xytext=(0, 100), textcoords="offset points") + plt.suptitle("Hardware metrics\nfor each benchmark and execution policy", fontsize=14, x=.01, y=0.97, ha="left") + ax.annotate(title, xy=(0, 1.08), fontsize=10, ha="left", xycoords="axes fraction")#, xycoords="data", xytext=(0, 100), textcoords="offset points") autolabel(ax, rects1, rects2) # Add baseline annotations; @@ -222,14 +222,15 @@ def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_t position = x[i] serial_throughput = summary[(summary["benchmark"] == b) & (summary["policy"] == "sync")][y_column].iloc[0] if i == 0: - ax.annotate(annotation_title, xy=(0, 0), fontsize=6, ha="right", va="center", xycoords="data", xytext=(-12, -22), textcoords="offset points") - ax.annotate(baseline_annotation_format(serial_throughput), xy=(position - bar_width, 0), fontsize=6, ha="left", va="center", xycoords="data", color=palette[0], xytext=(0, -22), textcoords="offset points") + ax.annotate(annotation_title, xy=(0, 0), fontsize=9, ha="left", va="center", xycoords="data", xytext=(-32, -20), textcoords="offset points") + print((position - bar_width, -0.1)) + ax.annotate(baseline_annotation_format(serial_throughput), xy=(position - bar_width, 0), fontsize=9, ha="center", va="center", xycoords="data", color=palette[0], xytext=(7, -30), textcoords="offset points") # Legend; labels = [POLICIES_DICT[p] for p in POLICIES] custom_lines = [Patch(facecolor=palette[i], edgecolor="#2f2f2f", label=l) for i, l in enumerate(labels)] - leg = fig.legend(custom_lines, labels, bbox_to_anchor=(1, 0.99), fontsize=7, ncol=1) + leg = fig.legend(custom_lines, labels, bbox_to_anchor=(1, 1), fontsize=10, ncol=1) leg._legend_box.align = "left" leg.get_frame().set_facecolor('white') @@ -284,20 +285,20 @@ def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_t num_col = 3 - fig, axes = plt.subplots(1, num_col, figsize=(2.2 * num_col, 2.5)) - plt.subplots_adjust(top=0.75, + fig, axes = plt.subplots(1, num_col, figsize=(2.4 * num_col, 2.8)) + plt.subplots_adjust(top=0.70, bottom=0.19, - left=0.1, + left=0.09, right=.99, hspace=0.9, wspace=0.4) barplot(summary, axes[0], "Device memory throughput", - "memory_throughput", (0, 50), "Serial\nthroughput:", y_ticks=6, y_tick_format=lambda l: f"{int(l)} GB/s", baseline_annotation_format=lambda l: f"{int(l)}\nGB/s") + "memory_throughput", (0, 50), "Serial throughput (GB/s):", y_ticks=6, y_tick_format=lambda l: f"{int(l)} GB/s", baseline_annotation_format=lambda l: f"{int(l)}") barplot(summary, axes[1], "L2 cache throughput", - "l2_throughput", (0, 250), "Serial\nthroughput:", y_ticks=6, y_tick_format=lambda l: f"{int(l)} GB/s", baseline_annotation_format=lambda l: f"{int(l)}\nGB/s") + "l2_throughput", (0, 250), "Serial throughput (GB/s):", y_ticks=6, y_tick_format=lambda l: f"{int(l)} GB/s", baseline_annotation_format=lambda l: f"{int(l)}") barplot(summary, axes[2], "IPC", - "ipc", (0, 1.75), "Serial\nIPC:", y_ticks=8, y_tick_format=lambda l: f"{l:.2f}", baseline_annotation_format=lambda l: f"{l:.2f}") + "ipc", (0, 1.75), "Serial IPC:", y_ticks=8, y_tick_format=lambda l: f"{l:.2f}", baseline_annotation_format=lambda l: f"{l:.2f}") save_plot(PLOT_DIR, "memory_throughput_{}.{}", OUTPUT_DATE) diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 8b3a63bc..b08325ad 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -134,7 +134,7 @@ def build_exec_time_plot_1_row(data, gridspec, y): # Set the x ticks; ax.set_xticks(labels_str) - ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=8) ax.tick_params(labelcolor="black") # Set the y ticks; ax.yaxis.set_major_locator(plt.LinearLocator(8)) @@ -234,7 +234,7 @@ def build_exec_time_plot_2_row(data, gridspec, i, j): ax.xaxis.grid(False) # Add baseline execution time annotations (median of execution time across blocks); - ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.27), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.27), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["peach1"]) for l_i, l in enumerate(labels): baseline_median = np.median(data[data["size"] == int(l)]["baseline_time_sec"]) ax.annotate(f"{int(1000 * baseline_median)}", xy=(l_i, -0.37), fontsize=9, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 6572b0bc..5e3d04ff 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -235,12 +235,12 @@ def build_exec_time_plot_grcuda_cuda_2rows(data, gridspec, x, y): # Set the x ticks; ax.set_xticks(labels_str) - ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=9) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=8) ax.tick_params(labelcolor="black") # Set the y ticks; ax.yaxis.set_major_locator(plt.LinearLocator(4)) if y == 0: - ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=8) + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=9) else: ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) # Hide tick markers; @@ -262,10 +262,10 @@ def build_exec_time_plot_grcuda_cuda_2rows(data, gridspec, x, y): ax.xaxis.grid(False) # Add baseline execution time annotations (median of execution time across blocks); - ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.48), fontsize=9, ha="left", xycoords="axes fraction", color=COLORS["r4"]) + ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.42), fontsize=8, ha="left", xycoords="axes fraction", color=COLORS["peach1"]) for i, l in enumerate(labels): baseline_median = np.median(data[data["size"] == int(l)]["baseline_time_sec_cuda"]) - ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.69), fontsize=9, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.57), fontsize=8, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) # Legend; if x == 0 and y== 0: @@ -516,6 +516,9 @@ def major_formatter(x, pos): # plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") plt.suptitle("Speedup of GrCUDA scheduling w.r.t.\nhand-optimized CUDA scheduling", fontsize=16, x=.05, y=0.99, ha="left") + l1 = lines.Line2D([0.01, 0.99], [0.465, 0.465], transform=fig.transFigure, figure=fig, color="#2f2f2f", linestyle="--", linewidth=1) + fig.lines.extend([l1]) + save_plot(PLOT_DIR, "speedup_baseline_grcuda_cuda_2rows_{}.{}", OUTPUT_DATE) diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index 831ba9a1..83ed037a 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -28,7 +28,7 @@ DEFAULT_RES_DIR = "../../../../data/results" INPUT_DATE_GRCUDA = "2020_08_05_21_36_01_grcuda" -OUTPUT_DATE = "2020_08_052" +OUTPUT_DATE = "2020_08_11" PLOT_DIR = "../../../../data/plots" B5_ITER = 10 @@ -261,6 +261,84 @@ def build_theoretical_time_plot_compact(data, gridspec, x, y, baseline_labels=No return ax + +def build_theoretical_time_plot_2rows(data, gridspec, x, y, baseline_labels=None): + + data["size_str"] = data["size"].astype(str) + + legend_labels = ["DAG Scheduling", "Serial Scheduling"] + + palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"], COLORS["b4"]][:len(data["block_size_str"].unique())] + markers = ["o", "X", "D", "P"][:len(data["block_size_str"].unique())] + + # Add a lineplot with the exec times; + ax = fig.add_subplot(gridspec[x, y]) + ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) + + ax = sns.lineplot(x="size_str", y="speedup_wrt_theoretical", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, + err_style="bars", linewidth=2, legend=None, sort=False, ci=None, zorder=2) + data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["speedup_wrt_theoretical"].apply(gmean).reset_index() + order = data["block_size_str"].unique() + ax = sns.scatterplot(x="size_str", y="speedup_wrt_theoretical", hue="block_size_str", data=data_averaged, palette=palette, ax=ax, edgecolor="#0f0f0f", + size_norm=30, legend=False, zorder=3, ci=None, markers=markers, style="block_size_str", hue_order=order, style_order=order, linewidth=0.05) + + labels = sorted(data["size"].unique()) + labels_str = [str(x) for x in labels] + + # Set the same y limits in each plot; + ax.set_ylim((0, 1)) + + # Add a horizontal line to denote speedup = 1x; + # ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + + # Set the x ticks; + ax.set_xticks(labels_str) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=8) + ax.tick_params(labelcolor="black") + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(5)) + if y == 0: + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=9) + else: + ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # Hide tick markers; + for tic in ax.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + # Add policy annotation; + if y == 0 and x % 2 == 0: + ax.annotate(f"{legend_labels[x // 2]}", xy=(-0.3, -1.4), fontsize=14, ha="center", xycoords="axes fraction", rotation=90) + + ax.set_ylabel(None) + ax.set_xlabel(None) + + # Add benchmark name and baseline execution time annotations; + ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.1), fontsize=10, ha="center", xycoords="axes fraction") + + # Turn off tick lines; + ax.xaxis.grid(False) + + # Add baseline execution time annotations (median of execution time across blocks); + if baseline_labels: + ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.34), fontsize=8, ha="left", xycoords="axes fraction", color=COLORS["peach1"]) + for i, l in enumerate(labels): + baseline_median = baseline_labels[i] + ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.48), fontsize=8, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + + # Legend; + if x == 0 and y== 0: + legend_labels = [f"1D={x.split(',')[0]}" for x in data["block_size_str"].unique()] + custom_lines = [ + lines.Line2D([], [], color="white", marker=markers[i], markersize=10, label=legend_labels[i], markerfacecolor=palette[i], markeredgecolor="#2f2f2f") + for i in range(len(legend_labels))] + leg = fig.legend(custom_lines, legend_labels, + bbox_to_anchor=(0.99, 1), fontsize=10, ncol=2, handletextpad=0.1, columnspacing=0.2) + leg.set_title("Block size:\n2D=8x8, 3D=4x4x4", prop={"size": 10}) + leg._legend_box.align = "left" + + return ax + ############################## ############################## @@ -292,76 +370,126 @@ def build_theoretical_time_plot_compact(data, gridspec, x, y, baseline_labels=No #%% - sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - plt.rcParams["font.family"] = ["Latin Modern Roman"] - plt.rcParams['axes.titlepad'] = 20 - plt.rcParams['axes.labelpad'] = 10 - plt.rcParams['axes.titlesize'] = 22 - plt.rcParams['axes.labelsize'] = 14 - - # Lists of benchmarks and block sizes; - benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] - block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) - num_col = len(benchmark_list) - num_row = len(block_size_list) - fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) - gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.85, - bottom=0.15, - left=0.2, - right=0.90, - hspace=1.2, - wspace=0.15) + # sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + # plt.rcParams["font.family"] = ["Latin Modern Roman"] + # plt.rcParams['axes.titlepad'] = 20 + # plt.rcParams['axes.labelpad'] = 10 + # plt.rcParams['axes.titlesize'] = 22 + # plt.rcParams['axes.labelsize'] = 14 + + # # Lists of benchmarks and block sizes; + # benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] + # block_size_list = sorted(data["block_size_str"].unique(), key=lambda x: [int(y) for y in x.split(",")]) + # num_col = len(benchmark_list) + # num_row = len(block_size_list) + # fig = plt.figure(figsize=(2.5 * num_col, 4 * num_row)) + # gs = gridspec.GridSpec(num_row, num_col) + # plt.subplots_adjust(top=0.85, + # bottom=0.15, + # left=0.2, + # right=0.90, + # hspace=1.2, + # wspace=0.15) - exec_time_axes = [] - for b_i, b in enumerate(benchmark_list): - for block_size_i, block_size in enumerate(block_size_list): - curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) - exec_time_axes += [build_theoretical_time_plot(curr_res, gs, block_size_i, b_i)] + # exec_time_axes = [] + # for b_i, b in enumerate(benchmark_list): + # for block_size_i, block_size in enumerate(block_size_list): + # curr_res = data[(data["benchmark"] == b) & (data["block_size_str"] == block_size)].reset_index(drop=True) + # exec_time_axes += [build_theoretical_time_plot(curr_res, gs, block_size_i, b_i)] - plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") - plt.annotate("Speedup", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Speedup w.r.t\nminimum theoretical time", fontsize=25, x=.05, y=0.99, ha="left") + # plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=20, ha="center", va="center", xycoords="figure fraction") + # plt.annotate("Speedup", xy=(0.02, 0.5), fontsize=20, ha="center", va="center", rotation=90, xycoords="figure fraction") + # plt.suptitle("Speedup w.r.t\nminimum theoretical time", fontsize=25, x=.05, y=0.99, ha="left") - save_plot(PLOT_DIR, "speedup_theoretical_time_{}.{}", OUTPUT_DATE) + # save_plot(PLOT_DIR, "speedup_theoretical_time_{}.{}", OUTPUT_DATE) #%% Similar plot, but all block sizes are on 1 row; + # sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + # plt.rcParams["font.family"] = ["Latin Modern Roman"] + # plt.rcParams['axes.titlepad'] = 20 + # plt.rcParams['axes.labelpad'] = 10 + # plt.rcParams['axes.titlesize'] = 22 + # plt.rcParams['axes.labelsize'] = 14 + + # # Lists of benchmarks and block sizes; + # benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] + # policy_list = sorted(data["exec_policy"].unique()) + # num_col = len(benchmark_list) + # num_row = len(policy_list) + # fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) + # gs = gridspec.GridSpec(num_row, num_col) + # plt.subplots_adjust(top=0.8, + # bottom=0.14, + # left=0.1, + # right=0.95, + # hspace=0.8, + # wspace=0.15) + + # exec_time_axes = [] + # for b_i, b in enumerate(benchmark_list): + # baselines = [] + # tmp_data = data[(data["exec_policy"] == "sync") & (data["benchmark"] == b)] + # labels = sorted(tmp_data["size"].unique()) + # for i, l in enumerate(labels): + # baselines += [np.median(tmp_data[tmp_data["size"] == int(l)]["theoretical_time_sec"])] + # for p_i, p in enumerate(policy_list): + # curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) + # exec_time_axes += [build_theoretical_time_plot_compact(curr_res, gs, p_i, b_i, baseline_labels=baselines)] + + # plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") + # plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") + # plt.suptitle("Speedup w.r.t\nminimum theoretical time", fontsize=25, x=.05, y=0.99, ha="left") + + # save_plot(PLOT_DIR, "speedup_theoretical_time_compact_{}.{}", OUTPUT_DATE) + + #%% Similar plot, but formatted for 1-column on a paper; + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) plt.rcParams["font.family"] = ["Latin Modern Roman"] plt.rcParams['axes.titlepad'] = 20 plt.rcParams['axes.labelpad'] = 10 plt.rcParams['axes.titlesize'] = 22 plt.rcParams['axes.labelsize'] = 14 + plt.rcParams['xtick.major.pad'] = 4 # Lists of benchmarks and block sizes; benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] - policy_list = sorted(data["exec_policy"].unique()) - num_col = len(benchmark_list) - num_row = len(policy_list) - fig = plt.figure(figsize=(2.7 * num_col, 3.9 * num_row)) + policy_list = list(reversed(sorted(data["exec_policy"].unique()))) + num_col = len(benchmark_list) // 2 + num_row = len(policy_list) * 2 + fig = plt.figure(figsize=(2.2 * num_col, 2 * num_row)) gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.8, - bottom=0.14, - left=0.1, - right=0.95, - hspace=0.8, + plt.subplots_adjust(top=0.85, + bottom=0.10, + left=0.10, + right=0.98, + hspace=0.9, wspace=0.15) exec_time_axes = [] + baselines_dict = {} for b_i, b in enumerate(benchmark_list): baselines = [] tmp_data = data[(data["exec_policy"] == "sync") & (data["benchmark"] == b)] labels = sorted(tmp_data["size"].unique()) for i, l in enumerate(labels): baselines += [np.median(tmp_data[tmp_data["size"] == int(l)]["theoretical_time_sec"])] - for p_i, p in enumerate(policy_list): + baselines_dict[b] = baselines + + for p_i, p in enumerate(policy_list): + for b_i, b in enumerate(benchmark_list): + index_tot = (len(benchmark_list) * p_i + b_i) + j = index_tot % num_col + i = index_tot // num_col curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) - exec_time_axes += [build_theoretical_time_plot_compact(curr_res, gs, p_i, b_i, baseline_labels=baselines)] + exec_time_axes += [build_theoretical_time_plot_2rows(curr_res, gs, i, j, baseline_labels=baselines_dict[b])] - plt.annotate("Input number of elements", xy=(0.5, 0.03), fontsize=14, ha="center", va="center", xycoords="figure fraction") - plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Speedup w.r.t\nminimum theoretical time", fontsize=25, x=.05, y=0.99, ha="left") + plt.annotate("Input number of elements", xy=(0.5, 0.02), fontsize=14, ha="center", va="center", xycoords="figure fraction") + plt.suptitle("Speedup of scheduling policies w.r.t\nminimum theoretical time", fontsize=16, x=.02, y=0.99, ha="left") - save_plot(PLOT_DIR, "speedup_theoretical_time_compact_{}.{}", OUTPUT_DATE) \ No newline at end of file + l1 = lines.Line2D([0.01, 0.99], [0.46, 0.46], transform=fig.transFigure, figure=fig, color="#2f2f2f", linestyle="--", linewidth=1) + fig.lines.extend([l1]) + + save_plot(PLOT_DIR, "speedup_theoretical_time_2rows_{}.{}", OUTPUT_DATE) \ No newline at end of file diff --git a/projects/resources/python/plotting/plot_transfer_computation_overlap.py b/projects/resources/python/plotting/plot_transfer_computation_overlap.py index 86099fec..d384fe88 100755 --- a/projects/resources/python/plotting/plot_transfer_computation_overlap.py +++ b/projects/resources/python/plotting/plot_transfer_computation_overlap.py @@ -22,7 +22,7 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" INPUT_DATE = "2020_07_20" -OUTPUT_DATE = "2020_08_052" +OUTPUT_DATE = "2020_08_11" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} @@ -77,9 +77,9 @@ # fig = plt.figure(figsize=(1.2 * num_col, 3)) # gs = gridspec.GridSpec(1, num_col) - fig = plt.figure(figsize=(1.2 * num_col, 2.5)) + fig = plt.figure(figsize=(1.2 * num_col, 2.8)) ax = fig.add_subplot() - plt.subplots_adjust(top=0.75, + plt.subplots_adjust(top=0.72, bottom=0.25, left=0.08, right=.99, @@ -99,13 +99,13 @@ ax.bar(x, white_bars, bar_width, color="0.8", edgecolor=edgecolor_white_bars, alpha=0.5) ax.bar(x, y, bar_width, color=palette, edgecolor=edgecolor) ax.set_xticks(x) - ax.set_xticklabels(x_labels, fontsize=8) + ax.set_xticklabels(x_labels, fontsize=9) ax.set_xlim((0 - bar_width / 2 - 0.2, len(x) - 1 + bar_width / 2 + 0.2)) ax.set_ylim((0, 1)) # Set the y ticks; ax.yaxis.set_major_locator(plt.LinearLocator(6)) - ax.set_yticklabels(labels=[f"{int(l * 100)}%" for l in ax.get_yticks()], ha="right", fontsize=9) + ax.set_yticklabels(labels=[f"{int(l * 100)}%" for l in ax.get_yticks()], ha="right", fontsize=11) ax.grid(True, axis="y") # Add benchmark name; @@ -119,19 +119,19 @@ def get_x_label_pos(i): else: return base_pos for i, b in enumerate(BENCHMARK_NAMES): - ax.annotate(f"{BENCHMARK_NAMES[b]}", xy=(get_x_label_pos(i), -0.28), fontsize=10, ha="center", xycoords="axes fraction") - ax.annotate(f"Speedup: ", xy=(get_x_label_pos(i) - 0.02, -0.4), fontsize=8, ha="center", xycoords="axes fraction") - ax.annotate(f"{SPEEDUPS[b]:.2f}x", xy=(get_x_label_pos(i) + 0.045, -0.4), fontsize=8, ha="center", xycoords="axes fraction", color="#469E7B") + ax.annotate(f"{BENCHMARK_NAMES[b]}", xy=(get_x_label_pos(i), -0.28), fontsize=12, ha="center", xycoords="axes fraction") + ax.annotate(f"Speedup: ", xy=(get_x_label_pos(i) - 0.02, -0.43), fontsize=10, ha="center", xycoords="axes fraction") + ax.annotate(f"{SPEEDUPS[b]:.2f}x", xy=(get_x_label_pos(i) + 0.045, -0.43), fontsize=10, ha="center", xycoords="axes fraction", color="#469E7B") # Legend; labels = [LABEL_LEGEND_DICT[l] for l in list(LABEL_DICT.keys())[:-1]] custom_lines = [Patch(facecolor=palette[i], edgecolor="#2f2f2f", label=l) for i, l in enumerate(labels)] - leg = fig.legend(custom_lines, labels, bbox_to_anchor=(0.98, 1), fontsize=8, ncol=1) + leg = fig.legend(custom_lines, labels, bbox_to_anchor=(1, 1), fontsize=10, ncol=1) leg.set_title("Type of overlap") leg._legend_box.align = "left" leg.get_frame().set_facecolor('white') - plt.suptitle("Amount of overlap for each benchmark", fontsize=12, x=.05, y=0.95, ha="left") + plt.suptitle("Amount of transfer and computaton\noverlap for each benchmark", fontsize=16, x=.05, y=0.95, ha="left") save_plot(PLOT_DIR, "overlap_{}.{}", OUTPUT_DATE) \ No newline at end of file From d381972554408c7bb4272c80506962b93c6f7a09 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 12 Aug 2020 14:03:05 +0200 Subject: [PATCH 134/236] updated plots --- projects/resources/python/plotting/plot_memory_throughput.py | 2 +- .../resources/python/plotting/plot_theoretical_performance.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/resources/python/plotting/plot_memory_throughput.py b/projects/resources/python/plotting/plot_memory_throughput.py index 8670a6f2..b47f790c 100755 --- a/projects/resources/python/plotting/plot_memory_throughput.py +++ b/projects/resources/python/plotting/plot_memory_throughput.py @@ -38,7 +38,7 @@ "b10": "DL" } POLICIES = ["sync", "default"] -POLICIES_DICT = {"default": "DAG Scheduling", "sync": "Serial Scheduling"} +POLICIES_DICT = {"default": "Parallel Scheduler", "sync": "Serial Scheduler"} NVPROF_HEADER_NOMETRIC = ["start_ms", "duration_ms", "Grid X", "Grid Y", "Grid Z", "Block X", "Block Y", "Block Z", "Registers Per Thread"," Static SMem", "Dynamic SMem", "Device", "Context", "Stream", diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index 83ed037a..81d2020e 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -266,7 +266,7 @@ def build_theoretical_time_plot_2rows(data, gridspec, x, y, baseline_labels=None data["size_str"] = data["size"].astype(str) - legend_labels = ["DAG Scheduling", "Serial Scheduling"] + legend_labels = ["Serial Scheduler", "Parallel Scheduler"] palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"], COLORS["b4"]][:len(data["block_size_str"].unique())] markers = ["o", "X", "D", "P"][:len(data["block_size_str"].unique())] From 5e33e3329f76b52c86af74a5f1641ec595fe8b1e Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 13 Aug 2020 17:38:31 +0200 Subject: [PATCH 135/236] updated plots --- projects/resources/cuda/b8_default.cu | 6 ++--- projects/resources/cuda/b8_sync.cu | 6 ++--- .../python/benchmark/benchmark_wrapper.py | 24 +++++++++---------- .../python/plotting/plot_speedup_baseline.py | 13 +++++----- .../plotting/plot_speedup_grcuda_cuda.py | 2 +- .../plotting/plot_theoretical_performance.py | 2 +- .../resources/python/plotting/plot_utils.py | 12 +++++++++- 7 files changed, 38 insertions(+), 27 deletions(-) diff --git a/projects/resources/cuda/b8_default.cu b/projects/resources/cuda/b8_default.cu index 22e4e401..a58f5a60 100644 --- a/projects/resources/cuda/b8_default.cu +++ b/projects/resources/cuda/b8_default.cu @@ -249,9 +249,9 @@ int main(int argc, char *argv[]) { err = cudaMallocManaged(&blurred_large, sizeof(float) * N * N); err = cudaMallocManaged(&blurred_unsharpen, sizeof(float) * N * N); - err = cudaMallocManaged(&kernel_small, sizeof(float) * N * N); - err = cudaMallocManaged(&kernel_large, sizeof(float) * N * N); - err = cudaMallocManaged(&kernel_unsharpen, sizeof(float) * N * N); + err = cudaMallocManaged(&kernel_small, sizeof(float) * kernel_small_diameter * kernel_small_diameter); + err = cudaMallocManaged(&kernel_large, sizeof(float) * kernel_large_diameter * kernel_large_diameter); + err = cudaMallocManaged(&kernel_unsharpen, sizeof(float) * kernel_unsharpen_diameter * kernel_unsharpen_diameter); err = cudaMallocManaged(&maximum, sizeof(float)); err = cudaMallocManaged(&minimum, sizeof(float)); diff --git a/projects/resources/cuda/b8_sync.cu b/projects/resources/cuda/b8_sync.cu index 7b7e935f..e0f77555 100644 --- a/projects/resources/cuda/b8_sync.cu +++ b/projects/resources/cuda/b8_sync.cu @@ -249,9 +249,9 @@ int main(int argc, char *argv[]) { err = cudaMallocManaged(&blurred_large, sizeof(float) * N * N); err = cudaMallocManaged(&blurred_unsharpen, sizeof(float) * N * N); - err = cudaMallocManaged(&kernel_small, sizeof(float) * N * N); - err = cudaMallocManaged(&kernel_large, sizeof(float) * N * N); - err = cudaMallocManaged(&kernel_unsharpen, sizeof(float) * N * N); + err = cudaMallocManaged(&kernel_small, sizeof(float) * kernel_small_diameter * kernel_small_diameter); + err = cudaMallocManaged(&kernel_large, sizeof(float) * kernel_large_diameter * kernel_large_diameter); + err = cudaMallocManaged(&kernel_unsharpen, sizeof(float) * kernel_unsharpen_diameter * kernel_unsharpen_diameter); err = cudaMallocManaged(&maximum, sizeof(float)); err = cudaMallocManaged(&minimum, sizeof(float)); diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 01937b5c..977cbda0 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -14,22 +14,22 @@ # Benchmark settings; benchmarks = [ - # "b1", - # "b5", - # "b6", - # "b7", - # "b8", + "b1", + "b5", + "b6", + "b7", + "b8", "b10", ] num_elem = { - "b1": [10_000_000, 20_000_000, 40_000_000, 60_000_000, 80_000_000], - "b4": [2000000, 5000000, 10000000, 20000000, 40000000], - "b5": [2_000_000, 4_000_000, 6_000_000, 8_000_000, 10_000_000], - "b6": [20000, 50000, 200000, 500000, 800000], - "b7": [2_000_000, 5_000_000, 7_500_000, 10_000_000, 15_000_000], - "b8": [800, 1600, 2400, 4000, 4800], - "b10": [2000, 3000, 4000, 5000, 6000], + "b1": [20_000_000, 60_000_000, 80_000_000, 100_000_000, 120_000_000], # [10_000_000, 20_000_000, 40_000_000, 60_000_000, 80_000_000], + "b4": [3_000_000, 5000000, 10000000, 20000000, 40_000_000], + "b5": [2_000_000, 6_000_000, 8_000_000, 10_000_000, 12_000_000], #[2_000_000, 4_000_000, 6_000_000, 8_000_000, 10_000_000], + "b6": [200_000, 500_000, 800_000, 1_000_000, 1_200_000], # [20000, 50000, 200000, 500000, 800_000], + "b7": [4_000_000, 7_000_000, 10_000_000, 15_000_000, 20_000_000], # [2_000_000, 5_000_000, 7_500_000, 10_000_000, 15_000_000], + "b8": [1600, 2400, 3200, 4000, 4800], # [800, 1600, 2400, 4000, 4800], + "b10": [3000, 4000, 5000, 6000, 7000], # [2000, 3000, 4000, 5000, 6000], } exec_policies = ["default", "sync"] diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index b08325ad..346aed48 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -18,11 +18,11 @@ import os from load_data import load_data -from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot +from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot, remove_outliers_df_grouped -INPUT_DATE = "2020_08_05_21_02_55_grcuda" -OUTPUT_DATE = "2020_08_11" +INPUT_DATE = "2020_08_13_16_41_16_grcuda" +OUTPUT_DATE = "2020_08_12" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} @@ -267,7 +267,7 @@ def build_exec_time_plot_2_row(data, gridspec, i, j): data = data[data["exec_policy"] != "sync"] sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] plt.rcParams['axes.titlepad'] = 20 plt.rcParams['axes.labelpad'] = 10 plt.rcParams['axes.titlesize'] = 22 @@ -304,7 +304,7 @@ def build_exec_time_plot_2_row(data, gridspec, i, j): sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] plt.rcParams['axes.titlepad'] = 20 plt.rcParams['axes.labelpad'] = 10 plt.rcParams['axes.titlesize'] = 22 @@ -338,7 +338,7 @@ def build_exec_time_plot_2_row(data, gridspec, i, j): #%% Similar plot, but formatted for 1-column on a paper; sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] plt.rcParams['axes.titlepad'] = 20 plt.rcParams['axes.labelpad'] = 10 plt.rcParams['axes.titlesize'] = 22 @@ -363,6 +363,7 @@ def build_exec_time_plot_2_row(data, gridspec, i, j): i = b_i // num_col j = b_i % num_col curr_res = data[data["benchmark"] == b].reset_index(drop=True) + curr_res = remove_outliers_df_grouped(curr_res, column="computation_speedup", group=["block_size_str", "size"]) speedups += [curr_res.groupby(["size", "block_size_str"])["computation_speedup"].apply(gmean)] exec_time_axes += [build_exec_time_plot_2_row(curr_res, gs, i, j)] diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 5e3d04ff..f206bb73 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -482,7 +482,7 @@ def major_formatter(x, pos): #%% Similar plot, but the plot fits on 1 row of a paper; sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] plt.rcParams['axes.titlepad'] = 20 plt.rcParams['axes.labelpad'] = 10 plt.rcParams['axes.titlesize'] = 22 diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index 81d2020e..0695cf55 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -447,7 +447,7 @@ def build_theoretical_time_plot_2rows(data, gridspec, x, y, baseline_labels=None #%% Similar plot, but formatted for 1-column on a paper; sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) - plt.rcParams["font.family"] = ["Latin Modern Roman"] + plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] plt.rcParams['axes.titlepad'] = 20 plt.rcParams['axes.labelpad'] = 10 plt.rcParams['axes.titlesize'] = 22 diff --git a/projects/resources/python/plotting/plot_utils.py b/projects/resources/python/plotting/plot_utils.py index 61abac97..e2e5e256 100755 --- a/projects/resources/python/plotting/plot_utils.py +++ b/projects/resources/python/plotting/plot_utils.py @@ -110,7 +110,7 @@ def remove_outliers(data, sigmas: int=3): Filter a sequence of data by keeping only values within "sigma" standard deviations from the mean. This is a simple way to filter outliers, it is more useful for visualizations than for sound statistical analyses; """ - return data[st.zscore(data) < sigmas] + return data[np.abs(st.zscore(data)) < sigmas] def remove_outliers_df(data: pd.DataFrame, column: str, reset_index: bool = True, drop_index: bool = True, sigmas: int = 3) -> pd.DataFrame: @@ -132,6 +132,16 @@ def remove_outliers_df(data: pd.DataFrame, column: str, reset_index: bool = True return res +def remove_outliers_df_grouped(data: pd.DataFrame, column: str, group: list, reset_index: bool = True, drop_index: bool = True, sigmas: int = 3) -> pd.DataFrame: + """ + Same as "remove_outliers_df", but also filter values after divided by group; + """ + filtered = [] + for i, g in data.groupby(group, sort=False): + filtered += [remove_outliers_df(g, column, reset_index, drop_index, sigmas)] + return pd.concat(filtered) + + def compute_speedup(X: pd.DataFrame, col_slow: str, col_fast: str, col_speedup: str) -> None: """ Add a column to a dataframe that represents a speedup, From 465432d849733bb9095f9cdc685a347a941d112e Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 15 Aug 2020 14:03:41 +0200 Subject: [PATCH 136/236] updated plots --- .../benchmark/benchmark_nvprof_wrapper.py | 20 +-- .../python/plotting/plot_memory_throughput.py | 2 +- .../plotting/plot_speedup_grcuda_cuda.py | 119 +++++++++--------- .../plotting/plot_theoretical_performance.py | 15 +-- .../plot_transfer_computation_overlap.py | 10 +- 5 files changed, 85 insertions(+), 81 deletions(-) diff --git a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py index 357f89af..c2634dfc 100644 --- a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py @@ -14,22 +14,22 @@ # Benchmark settings; benchmarks = [ - # "b1", - # "b5", - # "b6", - # "b7", - # "b8", + "b1", + "b5", + "b6", + "b7", + "b8", "b10", ] num_elem = { - "b1": [80_000_000], + "b1": [120_000_000], "b4": [40000000], - "b5": [10_000_000], - "b6": [800000], - "b7": [15_000_000], + "b5": [12_000_000], + "b6": [1_000_000], + "b7": [20_000_000], "b8": [4800], - "b10": [6000], + "b10": [7000], } exec_policies = ["default", "sync"] diff --git a/projects/resources/python/plotting/plot_memory_throughput.py b/projects/resources/python/plotting/plot_memory_throughput.py index b47f790c..75ae7f7c 100755 --- a/projects/resources/python/plotting/plot_memory_throughput.py +++ b/projects/resources/python/plotting/plot_memory_throughput.py @@ -26,7 +26,7 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" INPUT_DATE = "2020_08_05" -OUTPUT_DATE = "2020_08_11" +OUTPUT_DATE = "2020_08_12" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = { diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index f206bb73..f9db79a7 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -18,7 +18,7 @@ import os from load_data import load_data, load_data_cuda, join_tables -from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot, update_width, add_labels, get_upper_ci_size +from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot, update_width, add_labels, get_upper_ci_size, remove_outliers_df_grouped import matplotlib.ticker as ticker @@ -26,9 +26,9 @@ ############################## -INPUT_DATE_GRCUDA = "2020_08_05_21_02_55_grcuda" -INPUT_DATE_CUDA = "2020_08_05_20_13_22_cuda" -OUTPUT_DATE = "2020_08_11" +INPUT_DATE_GRCUDA = "2020_08_13_16_41_16_grcuda" +INPUT_DATE_CUDA = "2020_08_13_17_37_35_cuda" +OUTPUT_DATE = "2020_08_12" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} @@ -510,6 +510,7 @@ def major_formatter(x, pos): j = index_tot % num_col i = index_tot // num_col curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) + curr_res = remove_outliers_df_grouped(curr_res, column="grcuda_cuda_speedup", group=["block_size_str", "size"]) exec_time_axes += [build_exec_time_plot_grcuda_cuda_2rows(curr_res, gs, i, j)] plt.annotate("Input number of elements", xy=(0.5, 0.02), fontsize=14, ha="center", va="center", xycoords="figure fraction") @@ -529,66 +530,68 @@ def major_formatter(x, pos): #%% Summary plot with CUDA speedups; - # BENCHMARK_NAMES = {"mean": "Geomean", "b1": "Vector\nSquares", "b5": "B&S", "b6": "ML\nEnsemble", "b7": "HITS", "b8": "Images", "b10": "DL"} + BENCHMARK_NAMES = {"mean": "Geomean", "b1": "Vector\nSquares", "b5": "B&S", "b6": "ML\nEnsemble", "b7": "HITS", "b8": "Images", "b10": "DL"} - # sns.set_style("white", {"ytick.left": True}) - # plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] - # plt.rcParams['axes.titlepad'] = 25 - # plt.rcParams['axes.labelpad'] = 5 - # plt.rcParams['axes.titlesize'] = 22 - # plt.rcParams['axes.labelsize'] = 14 - # plt.rcParams['xtick.major.pad'] = 8 + sns.set_style("white", {"ytick.left": True}) + plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] + plt.rcParams['axes.titlepad'] = 25 + plt.rcParams['axes.labelpad'] = 5 + plt.rcParams['axes.titlesize'] = 22 + plt.rcParams['axes.labelsize'] = 14 + plt.rcParams['xtick.major.pad'] = 8 - # cuda_summary = data_cuda[data_cuda["exec_policy"] == "default"].groupby(["benchmark", "block_size_str", "size"], sort=False)["computation_speedup"].apply(gmean).reset_index(drop=False) - # cuda_summary = cuda_summary.sort_values(by=["benchmark"], key=lambda x: x.apply(lambda y: int(y[1:]))) - # num_col = 1 - # fig = plt.figure(figsize=(3.8 * num_col, 2)) - # gs = gridspec.GridSpec(1, 1) - # plt.subplots_adjust(top=0.78, - # bottom=0.15, - # left=0.14, - # right=.99, - # hspace=0.9, - # wspace=0.05) + data_cuda_2 = remove_outliers_df_grouped(data_cuda, column="computation_speedup", group=["benchmark", "exec_policy", "block_size_str", "size"]) + cuda_summary = data_cuda_2[data_cuda_2["exec_policy"] == "default"].groupby(["benchmark", "block_size_str", "size"], sort=False)["computation_speedup"].apply(gmean).reset_index(drop=False) + cuda_summary = cuda_summary.sort_values(by=["benchmark"], key=lambda x: x.apply(lambda y: int(y[1:]))) + + num_col = 1 + fig = plt.figure(figsize=(3.8 * num_col, 2)) + gs = gridspec.GridSpec(1, 1) + plt.subplots_adjust(top=0.78, + bottom=0.15, + left=0.14, + right=.99, + hspace=0.9, + wspace=0.05) - # palettes = ["#C8FCB6"] * len(cuda_summary["benchmark"].unique()) + ["#96DE9B"] + palettes = ["#C8FCB6"] * len(cuda_summary["benchmark"].unique()) + ["#96DE9B"] - # # Add geomean; - # gmean_res = pd.DataFrame(cuda_summary.groupby(["benchmark"], as_index=False).agg(gmean)) - # gmean_res["benchmark"] = "mean" - # res = pd.concat([cuda_summary, gmean_res]) + # Add geomean; + gmean_res = pd.DataFrame(cuda_summary.groupby(["benchmark"], as_index=False).agg(gmean)) + gmean_res["benchmark"] = "mean" + res = pd.concat([cuda_summary, gmean_res]) - # ax = fig.add_subplot(gs[0, 0]) - # ax0 = ax + ax = fig.add_subplot(gs[0, 0]) + ax0 = ax - # ax = sns.barplot(x="benchmark", y="computation_speedup", data=res, palette=palettes, capsize=.05, errwidth=0.8, ax=ax, edgecolor="#2f2f2f", estimator=gmean) + ax = sns.barplot(x="benchmark", y="computation_speedup", data=res, palette=palettes, capsize=.05, errwidth=0.8, ax=ax, edgecolor="#2f2f2f", estimator=gmean) - # ax.set_ylabel("Speedup", fontsize=11) - # ax.set_xlabel("") - # ax.set_ylim((0.8, 1.6)) - # labels = ax.get_xticklabels() - # for j, l in enumerate(labels): - # l.set_text(BENCHMARK_NAMES[l._text]) - # ax.set_xticklabels(labels, ha="center", va="center") - # ax.tick_params(axis='x', which='major', labelsize=8, rotation=0) - - # ax.yaxis.set_major_formatter(ticker.StrMethodFormatter("{x:.1f}x")) - # ax.yaxis.set_major_locator(plt.LinearLocator(6)) - # ax.tick_params(axis='y', which='major', labelsize=8) - # ax.grid(True, axis="y") - - # update_width(ax, 0.5) - - # # Speedup labels; - # offsets = [] - # for b in res["benchmark"].unique(): - # offsets += [get_upper_ci_size(res.loc[res["benchmark"] == b, "computation_speedup"], ci=0.6)] - # offsets = [o + 0.02 if not np.isnan(o) else 0.2 for o in offsets] - # # offsets[1] = 0.12 - # offsets[-1] = 0.1 - # add_labels(ax, vertical_offsets=offsets, rotation=0, fontsize=8, skip_zero=False) - - # plt.suptitle("Achievable speedup in CUDA with hand-tuned\nGPU data transfer and execution overlap", fontsize=11, x=.01, y=0.99, ha="left") + ax.set_ylabel("Speedup", fontsize=11) + ax.set_xlabel("") + ax.set_ylim((0.8, 1.6)) + labels = ax.get_xticklabels() + for j, l in enumerate(labels): + l.set_text(BENCHMARK_NAMES[l._text]) + ax.set_xticklabels(labels, ha="center", va="center") + ax.tick_params(axis='x', which='major', labelsize=8, rotation=0) + + ax.yaxis.set_major_formatter(ticker.StrMethodFormatter("{x:.1f}x")) + ax.yaxis.set_major_locator(plt.LinearLocator(6)) + ax.tick_params(axis='y', which='major', labelsize=8) + ax.grid(True, axis="y") + + update_width(ax, 0.5) + + # Speedup labels; + offsets = [] + for b in res["benchmark"].unique(): + offsets += [get_upper_ci_size(res.loc[res["benchmark"] == b, "computation_speedup"], ci=0.6)] + offsets = [o + 0.02 if not np.isnan(o) else 0.2 for o in offsets] + # offsets[1] = 0.12 + offsets[-1] = 0.1 + add_labels(ax, vertical_offsets=offsets, rotation=0, fontsize=8, skip_zero=False) + + plt.suptitle("Achievable speedup in CUDA with hand-tuned\nGPU data transfer and execution overlap", fontsize=11, x=.01, y=0.99, ha="left") - # save_plot(PLOT_DIR, "cuda_speedup__{}.{}", OUTPUT_DATE) \ No newline at end of file + save_plot(PLOT_DIR, "cuda_speedup__{}.{}", OUTPUT_DATE) \ No newline at end of file diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index 0695cf55..65e86110 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -19,7 +19,7 @@ import os from load_data import load_data, load_data_cuda, join_tables, compute_speedup -from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot +from plot_utils import COLORS, get_exp_label, get_ci_size, save_plot, remove_outliers_df_grouped import matplotlib.ticker as ticker ############################## @@ -27,8 +27,8 @@ DEFAULT_RES_DIR = "../../../../data/results" -INPUT_DATE_GRCUDA = "2020_08_05_21_36_01_grcuda" -OUTPUT_DATE = "2020_08_11" +INPUT_DATE_GRCUDA = "2020_08_14_17_36_06_grcuda" +OUTPUT_DATE = "2020_08_12" PLOT_DIR = "../../../../data/plots" B5_ITER = 10 @@ -358,12 +358,13 @@ def build_theoretical_time_plot_2rows(data, gridspec, x, y, baseline_labels=None processed_data = [] processed_data_summary = [] for b in BENCHMARK_PHASES.keys(): - data = load_data(INPUT_DATE_GRCUDA, skip_iter=3, benchmark=b, phases=BENCHMARK_PHASES[b]) + data_b = load_data(INPUT_DATE_GRCUDA, skip_iter=3, benchmark=b, phases=BENCHMARK_PHASES[b]) + data_b = remove_outliers_df_grouped(data_b, column="computation_speedup", group=["exec_policy", "benchmark", "block_size_1d", "block_size_2d", "size"]).reset_index(drop=True) tmp_cols = index_columns.copy() tmp_cols.remove("exec_policy") - data = theoretical_speed(data, tmp_cols, b) - data_summary = data.groupby(index_columns)[["computation_speedup", "speedup_wrt_theoretical"]].aggregate(gmean).reset_index() - processed_data += [data[list(data.columns[:18]) + list(data.columns[-4:])]] + data_b = theoretical_speed(data_b, tmp_cols, b) + data_summary = data_b.groupby(index_columns)[["computation_speedup", "speedup_wrt_theoretical"]].aggregate(gmean).reset_index() + processed_data += [data_b[list(data_b.columns[:18]) + list(data_b.columns[-4:])]] processed_data_summary += [data_summary] data = pd.concat(processed_data).reset_index(drop=True) diff --git a/projects/resources/python/plotting/plot_transfer_computation_overlap.py b/projects/resources/python/plotting/plot_transfer_computation_overlap.py index d384fe88..8c394b15 100755 --- a/projects/resources/python/plotting/plot_transfer_computation_overlap.py +++ b/projects/resources/python/plotting/plot_transfer_computation_overlap.py @@ -22,7 +22,7 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" INPUT_DATE = "2020_07_20" -OUTPUT_DATE = "2020_08_11" +OUTPUT_DATE = "2020_08_12" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} @@ -36,10 +36,10 @@ SPEEDUPS = { "b1": 1.17, - "b5": 1.34, - "b6": 1.25, - "b7": 1.14, - "b8": 1.30, + "b5": 1.33, + "b6": 1.22, + "b7": 1.13, + "b8": 1.32, "b10": 1.34, } From 488ac25bc9229773429868917866504b6261f2e2 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 17 Aug 2020 20:42:15 +0200 Subject: [PATCH 137/236] added plot for gigaflops --- .../benchmark/benchmark_nvprof_wrapper.py | 6 +-- .../python/plotting/plot_memory_throughput.py | 39 ++++++++++++------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py index c2634dfc..c0890750 100644 --- a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py @@ -26,8 +26,8 @@ "b1": [120_000_000], "b4": [40000000], "b5": [12_000_000], - "b6": [1_000_000], - "b7": [20_000_000], + "b6": [800_000], + "b7": [15_000_000], "b8": [4800], "b10": [7000], } @@ -64,7 +64,7 @@ ############################## LOG_FOLDER = "../../../../data/nvprof_log" -METRICS = "--metrics 'dram_read_throughput,dram_write_throughput,dram_read_bytes,dram_write_bytes,l2_global_atomic_store_bytes,l2_global_load_bytes,l2_global_reduction_bytes,l2_local_global_store_bytes,l2_local_load_bytes,l2_read_throughput,l2_write_throughput,inst_executed,ipc'" +METRICS = "--metrics 'dram_read_throughput,dram_write_throughput,dram_read_bytes,dram_write_bytes,l2_global_atomic_store_bytes,l2_global_load_bytes,l2_global_reduction_bytes,l2_local_global_store_bytes,l2_local_load_bytes,l2_read_throughput,l2_write_throughput,inst_executed,ipc,flop_count_dp,flop_count_sp'" # This path is hard-coded because nvprof is executed as root, # and the superuser doesn't have Graalpython in its environment; diff --git a/projects/resources/python/plotting/plot_memory_throughput.py b/projects/resources/python/plotting/plot_memory_throughput.py index 75ae7f7c..f26bdd4f 100755 --- a/projects/resources/python/plotting/plot_memory_throughput.py +++ b/projects/resources/python/plotting/plot_memory_throughput.py @@ -25,8 +25,8 @@ DEFAULT_RES_DIR = "../../../../data/nvprof_log" -INPUT_DATE = "2020_08_05" -OUTPUT_DATE = "2020_08_12" +INPUT_DATE = "2020_08_16" +OUTPUT_DATE = "2020_08_16" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = { @@ -48,7 +48,7 @@ NVPROF_HEADER_METRIC = ["Device", "Context", "Stream", "name", "Correlation_ID", "dram_read_throughput", "dram_write_throughput", "dram_read_bytes", "dram_write_bytes", "l2_global_atomic_store_bytes", "l2_global_load_bytes", "l2_global_reduction_bytes", "l2_local_global_store_bytes", "l2_local_load_bytes", "l2_read_throughput", "l2_write_throughput", - "inst_executed", "ipc"] + "inst_executed", "ipc", "flop_count_dp", "flop_count_sp"] NVPROF_HEADER_METRIC_FILTERED = [NVPROF_HEADER_METRIC[3]] + NVPROF_HEADER_METRIC[5:] OPERATIONS_TO_MERGE = set(["htod", "dtoh"]) @@ -120,6 +120,7 @@ def load_data(b, p, files): data_metric["l2_global_reduction_bytes"] /= 2**30 data_metric["l2_local_global_store_bytes"] /= 2**30 data_metric["l2_local_load_bytes"] /= 2**30 + data_metric["total_flop"] = data_metric["flop_count_dp"] + data_metric["flop_count_sp"] data_metric["total_l2_read_bytes"] = data_metric["l2_global_load_bytes"] + data_metric["l2_local_load_bytes"] data_metric["total_l2_write_bytes"] = data_metric["l2_global_atomic_store_bytes"] + data_metric["l2_global_reduction_bytes"] + data_metric["l2_local_global_store_bytes"] @@ -138,6 +139,7 @@ def load_data(b, p, files): data["estimated_read_througput"] = data["dram_read_bytes"] / (data["duration_ms"] / 1000) data["estimated_l2_read_througput"] = data["total_l2_read_bytes"] / (data["duration_ms"] / 1000) data["estimated_l2_write_througput"] = data["total_l2_write_bytes"] / (data["duration_ms"] / 1000) + data["gigaflops"] = (data["total_flop"] / 10**9) / (data["duration_ms"] / 1000) data["estimated_ipc"] = data["inst_executed"] / (GPU_CLOCK_HZ * (data["duration_ms"] / 1000)) / GPU_NUM_SM @@ -213,7 +215,7 @@ def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_t ax.grid(True, axis="y") # ax.annotate(title, fontsize=9, x=.02, y=0.95, ha="left") - plt.suptitle("Hardware metrics\nfor each benchmark and execution policy", fontsize=14, x=.01, y=0.97, ha="left") + plt.suptitle("Hardware metrics for each\nbenchmark and execution policy", fontsize=14, x=.01, y=0.97, ha="left") ax.annotate(title, xy=(0, 1.08), fontsize=10, ha="left", xycoords="axes fraction")#, xycoords="data", xytext=(0, 100), textcoords="offset points") autolabel(ax, rects1, rects2) @@ -269,9 +271,13 @@ def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_t total_instructions = group["inst_executed"].sum() ipc = total_instructions / (GPU_CLOCK_HZ * (overlap_computation_time / 1000)) / GPU_NUM_SM - summary_list += [[b, p, overlap_computation_time, total_memory_accessed, memory_throughput, memory_throughput / MAX_GPU_BANDWIDTH, l2_throughput, l2_throughput / MAX_L2_GPU_BANDWIDTH, ipc]] + # GigaFLOPS; + total_flop = group["total_flop"].sum() + gigaflops = (total_flop / 10**9) / (overlap_computation_time / 1000) - summary = pd.DataFrame(summary_list, columns=["benchmark", "policy", "duration_ms", "dram_accessed_GB", "memory_throughput", "max_memory_throughput_perc", "l2_throughput", "max_l2_throughput_perc", "ipc"]) + summary_list += [[b, p, overlap_computation_time, total_memory_accessed, memory_throughput, memory_throughput / MAX_GPU_BANDWIDTH, l2_throughput, l2_throughput / MAX_L2_GPU_BANDWIDTH, ipc, gigaflops]] + + summary = pd.DataFrame(summary_list, columns=["benchmark", "policy", "duration_ms", "dram_accessed_GB", "memory_throughput", "max_memory_throughput_perc", "l2_throughput", "max_l2_throughput_perc", "ipc", "gigaflops"]) #%% Create barplot with memory throughput; @@ -283,22 +289,25 @@ def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_t plt.rcParams['axes.labelsize'] = 14 plt.rcParams['xtick.major.pad'] = 5 - num_col = 3 + num_col = 2 + num_rows = 2 - fig, axes = plt.subplots(1, num_col, figsize=(2.4 * num_col, 2.8)) - plt.subplots_adjust(top=0.70, - bottom=0.19, - left=0.09, + fig, axes = plt.subplots(num_rows, num_col, figsize=(2.4 * num_col, 2.4 * num_rows)) + plt.subplots_adjust(top=0.80, + bottom=0.10, + left=0.13, right=.99, - hspace=0.9, + hspace=0.6, wspace=0.4) - barplot(summary, axes[0], "Device memory throughput", + barplot(summary, axes[0, 0], "Device memory throughput", "memory_throughput", (0, 50), "Serial throughput (GB/s):", y_ticks=6, y_tick_format=lambda l: f"{int(l)} GB/s", baseline_annotation_format=lambda l: f"{int(l)}") - barplot(summary, axes[1], "L2 cache throughput", + barplot(summary, axes[0, 1], "L2 cache throughput", "l2_throughput", (0, 250), "Serial throughput (GB/s):", y_ticks=6, y_tick_format=lambda l: f"{int(l)} GB/s", baseline_annotation_format=lambda l: f"{int(l)}") - barplot(summary, axes[2], "IPC", + barplot(summary, axes[1, 0], "IPC", "ipc", (0, 1.75), "Serial IPC:", y_ticks=8, y_tick_format=lambda l: f"{l:.2f}", baseline_annotation_format=lambda l: f"{l:.2f}") + barplot(summary, axes[1, 1], "GFLOPS32/64", + "gigaflops", (0, 90), "GFLOPS32/64:", y_ticks=6, y_tick_format=lambda l: f"{int(l)}", baseline_annotation_format=lambda l: f"{int(l)}") save_plot(PLOT_DIR, "memory_throughput_{}.{}", OUTPUT_DATE) From ebfcfc32f15d76b919b09fbbbe926241726188f6 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 19 Aug 2020 12:18:22 +0200 Subject: [PATCH 138/236] fixed plots --- projects/resources/python/benchmark/bench/bench_6.py | 2 ++ .../resources/python/benchmark/benchmark_wrapper.py | 12 ++++++------ .../python/plotting/plot_memory_throughput.py | 2 +- .../python/plotting/plot_speedup_baseline.py | 4 +++- .../python/plotting/plot_speedup_grcuda_cuda.py | 6 +++--- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index 096dd0b1..63f67c72 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -11,6 +11,8 @@ ############################## ############################## + + NB_KERNEL = """ extern "C" __global__ void nb_1(const int* x, float* y, float* z, int size, int n_feat, int n_classes) { for(int i = blockIdx.x * blockDim.x + threadIdx.x; i < size; i += blockDim.x * gridDim.x) { diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 977cbda0..186d8afc 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -14,18 +14,18 @@ # Benchmark settings; benchmarks = [ - "b1", + # "b1", "b5", - "b6", - "b7", - "b8", - "b10", + # "b6", + # "b7", + # "b8", + # "b10", ] num_elem = { "b1": [20_000_000, 60_000_000, 80_000_000, 100_000_000, 120_000_000], # [10_000_000, 20_000_000, 40_000_000, 60_000_000, 80_000_000], "b4": [3_000_000, 5000000, 10000000, 20000000, 40_000_000], - "b5": [2_000_000, 6_000_000, 8_000_000, 10_000_000, 12_000_000], #[2_000_000, 4_000_000, 6_000_000, 8_000_000, 10_000_000], + "b5": [2_000_000],#, 6_000_000, 8_000_000, 10_000_000, 12_000_000], #[2_000_000, 4_000_000, 6_000_000, 8_000_000, 10_000_000], "b6": [200_000, 500_000, 800_000, 1_000_000, 1_200_000], # [20000, 50000, 200000, 500000, 800_000], "b7": [4_000_000, 7_000_000, 10_000_000, 15_000_000, 20_000_000], # [2_000_000, 5_000_000, 7_500_000, 10_000_000, 15_000_000], "b8": [1600, 2400, 3200, 4000, 4800], # [800, 1600, 2400, 4000, 4800], diff --git a/projects/resources/python/plotting/plot_memory_throughput.py b/projects/resources/python/plotting/plot_memory_throughput.py index f26bdd4f..4aec7e77 100755 --- a/projects/resources/python/plotting/plot_memory_throughput.py +++ b/projects/resources/python/plotting/plot_memory_throughput.py @@ -316,4 +316,4 @@ def barplot(data, ax, title, y_column, y_limit, annotation_title, y_ticks=6, y_t tmp["ipc_fix"] = tmp["estimated_ipc"] / 8 tmp["ipc_perc"] = ( tmp["ipc_fix"] - tmp["ipc"]) / tmp["ipc"] - print(np.median(tmp["ipc_perc"])) \ No newline at end of file + print(np.median(tmp["ipc_perc"])) diff --git a/projects/resources/python/plotting/plot_speedup_baseline.py b/projects/resources/python/plotting/plot_speedup_baseline.py index 346aed48..438aa3a5 100755 --- a/projects/resources/python/plotting/plot_speedup_baseline.py +++ b/projects/resources/python/plotting/plot_speedup_baseline.py @@ -22,7 +22,7 @@ INPUT_DATE = "2020_08_13_16_41_16_grcuda" -OUTPUT_DATE = "2020_08_12" +OUTPUT_DATE = "2020_08_16" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} @@ -344,6 +344,8 @@ def build_exec_time_plot_2_row(data, gridspec, i, j): plt.rcParams['axes.titlesize'] = 22 plt.rcParams['axes.labelsize'] = 14 + data = data[~((data["benchmark"] == "b5") & (data["size"] == 3000000))] + # Lists of benchmarks and block sizes; benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] num_row = 2 diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index f9db79a7..8ed170a9 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -28,7 +28,7 @@ INPUT_DATE_GRCUDA = "2020_08_13_16_41_16_grcuda" INPUT_DATE_CUDA = "2020_08_13_17_37_35_cuda" -OUTPUT_DATE = "2020_08_12" +OUTPUT_DATE = "2020_08_16" PLOT_DIR = "../../../../data/plots" BENCHMARK_NAMES = {"b1": "Vector Squares", "b5": "B&S", "b6": "ML Ensemble", "b7": "HITS", "b8": "Images", "b10": "DL"} @@ -515,7 +515,7 @@ def major_formatter(x, pos): plt.annotate("Input number of elements", xy=(0.5, 0.02), fontsize=14, ha="center", va="center", xycoords="figure fraction") # plt.annotate("Speedup", xy=(0.022, 0.44), fontsize=14, ha="left", va="center", rotation=90, xycoords="figure fraction") - plt.suptitle("Speedup of GrCUDA scheduling w.r.t.\nhand-optimized CUDA scheduling", fontsize=16, x=.05, y=0.99, ha="left") + plt.suptitle("Speedup of GrCUDA scheduling w.r.t.\nhand-optimized C++ CUDA scheduling", fontsize=16, x=.05, y=0.99, ha="left") l1 = lines.Line2D([0.01, 0.99], [0.465, 0.465], transform=fig.transFigure, figure=fig, color="#2f2f2f", linestyle="--", linewidth=1) fig.lines.extend([l1]) @@ -592,6 +592,6 @@ def major_formatter(x, pos): offsets[-1] = 0.1 add_labels(ax, vertical_offsets=offsets, rotation=0, fontsize=8, skip_zero=False) - plt.suptitle("Achievable speedup in CUDA with hand-tuned\nGPU data transfer and execution overlap", fontsize=11, x=.01, y=0.99, ha="left") + plt.suptitle("Achievable speedup in C++ CUDA with hand-tuned\nGPU data transfer and execution overlap", fontsize=11, x=.01, y=0.99, ha="left") save_plot(PLOT_DIR, "cuda_speedup__{}.{}", OUTPUT_DATE) \ No newline at end of file From 9ebf755facca11d03e322b43b9e1fc75da7ac75c Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Sat, 22 Aug 2020 14:00:10 +0200 Subject: [PATCH 139/236] updated first plot --- .../plotting/plot_speedup_grcuda_cuda.py | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py index 8ed170a9..36cfbb1b 100755 --- a/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py +++ b/projects/resources/python/plotting/plot_speedup_grcuda_cuda.py @@ -530,7 +530,7 @@ def major_formatter(x, pos): #%% Summary plot with CUDA speedups; - BENCHMARK_NAMES = {"mean": "Geomean", "b1": "Vector\nSquares", "b5": "B&S", "b6": "ML\nEnsemble", "b7": "HITS", "b8": "Images", "b10": "DL"} + BENCHMARK_NAMES = {"mean": "", "mean2": "", "b1": "VEC", "b5": "B&S", "b6": "ML", "b7": "HITS", "b8": "Images", "b10": "DL"} sns.set_style("white", {"ytick.left": True}) plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] @@ -538,7 +538,7 @@ def major_formatter(x, pos): plt.rcParams['axes.labelpad'] = 5 plt.rcParams['axes.titlesize'] = 22 plt.rcParams['axes.labelsize'] = 14 - plt.rcParams['xtick.major.pad'] = 8 + plt.rcParams['xtick.major.pad'] = 2 data_cuda_2 = remove_outliers_df_grouped(data_cuda, column="computation_speedup", group=["benchmark", "exec_policy", "block_size_str", "size"]) @@ -555,29 +555,44 @@ def major_formatter(x, pos): hspace=0.9, wspace=0.05) - palettes = ["#C8FCB6"] * len(cuda_summary["benchmark"].unique()) + ["#96DE9B"] + palettes = ["#9AE6A8"] * len(cuda_summary["benchmark"].unique()) + ["#96DE9B"] # Add geomean; gmean_res = pd.DataFrame(cuda_summary.groupby(["benchmark"], as_index=False).agg(gmean)) gmean_res["benchmark"] = "mean" + gmean_horizontal_value = gmean(gmean_res["computation_speedup"]) + gmean_res["computation_speedup"] = 0 res = pd.concat([cuda_summary, gmean_res]) + # Do it again, workaround to have another fake column; + gmean_res = pd.DataFrame(cuda_summary.groupby(["benchmark"], as_index=False).agg(gmean)) + gmean_res["benchmark"] = "mean2" + gmean_horizontal_value = gmean(gmean_res["computation_speedup"]) + gmean_res["computation_speedup"] = 0 + res = pd.concat([res, gmean_res]) + + ax = fig.add_subplot(gs[0, 0]) ax0 = ax - ax = sns.barplot(x="benchmark", y="computation_speedup", data=res, palette=palettes, capsize=.05, errwidth=0.8, ax=ax, edgecolor="#2f2f2f", estimator=gmean) - + ax = sns.barplot(x="benchmark", y="computation_speedup", data=res, palette=palettes, capsize=.05, errwidth=0.8, ax=ax, edgecolor="#2f2f2f", estimator=gmean, zorder=2, saturation=1) + + ax.axhline(y=float(f"{gmean_horizontal_value:.2}"), color=COLORS["peach1"], linestyle="-", zorder=1, linewidth=1, alpha=1) + ax.annotate(f"Geomean\nspeedup: {gmean_horizontal_value:.2f}x", xy=(0.75, 0.55), xycoords="axes fraction", ha="left", color=COLORS["peach1"], fontsize=8) + ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + ax.annotate(f"Serial execution", xy=(0.75, 0.28), xycoords="axes fraction", ha="left", color="#2f2f2f", fontsize=8, alpha=0.5) + ax.set_ylabel("Speedup", fontsize=11) ax.set_xlabel("") ax.set_ylim((0.8, 1.6)) labels = ax.get_xticklabels() for j, l in enumerate(labels): l.set_text(BENCHMARK_NAMES[l._text]) - ax.set_xticklabels(labels, ha="center", va="center") + ax.set_xticklabels(labels, ha="center", va="top") ax.tick_params(axis='x', which='major', labelsize=8, rotation=0) ax.yaxis.set_major_formatter(ticker.StrMethodFormatter("{x:.1f}x")) - ax.yaxis.set_major_locator(plt.LinearLocator(6)) + ax.yaxis.set_major_locator(plt.LinearLocator(5)) ax.tick_params(axis='y', which='major', labelsize=8) ax.grid(True, axis="y") @@ -589,6 +604,8 @@ def major_formatter(x, pos): offsets += [get_upper_ci_size(res.loc[res["benchmark"] == b, "computation_speedup"], ci=0.6)] offsets = [o + 0.02 if not np.isnan(o) else 0.2 for o in offsets] # offsets[1] = 0.12 + offsets[0] = 0.06 + offsets[2] = 0.1 offsets[-1] = 0.1 add_labels(ax, vertical_offsets=offsets, rotation=0, fontsize=8, skip_zero=False) From 61e3f23c1a032ff08d373cfd3e2c5c8061337768 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Tue, 25 Aug 2020 19:30:51 +0200 Subject: [PATCH 140/236] updated theoretical speed plot title --- .../plotting/plot_theoretical_performance.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index 65e86110..a581fdab 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -488,9 +488,20 @@ def build_theoretical_time_plot_2rows(data, gridspec, x, y, baseline_labels=None exec_time_axes += [build_theoretical_time_plot_2rows(curr_res, gs, i, j, baseline_labels=baselines_dict[b])] plt.annotate("Input number of elements", xy=(0.5, 0.02), fontsize=14, ha="center", va="center", xycoords="figure fraction") - plt.suptitle("Speedup of scheduling policies w.r.t\nminimum theoretical time", fontsize=16, x=.02, y=0.99, ha="left") + plt.suptitle("Slowdown w.r.t. execution\nwithout resource contention", fontsize=16, x=.02, y=0.99, ha="left") l1 = lines.Line2D([0.01, 0.99], [0.46, 0.46], transform=fig.transFigure, figure=fig, color="#2f2f2f", linestyle="--", linewidth=1) fig.lines.extend([l1]) - save_plot(PLOT_DIR, "speedup_theoretical_time_2rows_{}.{}", OUTPUT_DATE) \ No newline at end of file + save_plot(PLOT_DIR, "speedup_theoretical_time_2rows_{}.{}", OUTPUT_DATE) + + #%% + + # slowdown = gmean(data["grcuda_cuda_speedup"]) + # print(slowdown) + + # slowdown_dict = {"sync": [], "default": []} + # for i, g in data.groupby(["benchmark", "exec_policy"]): + # max_size = g["size"].max() + # slowdown_dict[i[1]] += [gmean(g[g["size"] == max_size]["grcuda_cuda_speedup"])] + # print(gmean(slowdown_dict["sync"]), gmean(slowdown_dict["default"])) \ No newline at end of file From 75cc7e1baedf383f2549a95315bc637297775429 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 26 Aug 2020 16:07:13 +0200 Subject: [PATCH 141/236] added default-only theoretical speed plots --- .../plotting/plot_theoretical_performance.py | 147 ++++++++++++++++-- 1 file changed, 138 insertions(+), 9 deletions(-) diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index a581fdab..695b5435 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -339,6 +339,84 @@ def build_theoretical_time_plot_2rows(data, gridspec, x, y, baseline_labels=None return ax + +def build_theoretical_time_plot_2rows_default(data, gridspec, x, y, baseline_labels=None): + + data["size_str"] = data["size"].astype(str) + + legend_labels = ["Parallel Scheduler"] + + palette = [COLORS["peach1"], COLORS["b8"], COLORS["b2"], COLORS["b4"]][:len(data["block_size_str"].unique())] + markers = ["o", "X", "D", "P"][:len(data["block_size_str"].unique())] + + # Add a lineplot with the exec times; + ax = fig.add_subplot(gridspec[x, y]) + ax.axhspan(0, 1, facecolor='0.8', alpha=0.1) + + ax = sns.lineplot(x="size_str", y="speedup_wrt_theoretical", hue="block_size_str", data=data, palette=palette, ax=ax, estimator=gmean, + err_style="bars", linewidth=2, legend=None, sort=False, ci=None, zorder=2) + data_averaged = data.groupby(["size_str", "block_size_str"], as_index=True)["speedup_wrt_theoretical"].apply(gmean).reset_index() + order = data["block_size_str"].unique() + ax = sns.scatterplot(x="size_str", y="speedup_wrt_theoretical", hue="block_size_str", data=data_averaged, palette=palette, ax=ax, edgecolor="#0f0f0f", + size_norm=30, legend=False, zorder=3, ci=None, markers=markers, style="block_size_str", hue_order=order, style_order=order, linewidth=0.05) + + labels = sorted(data["size"].unique()) + labels_str = [str(x) for x in labels] + + # Set the same y limits in each plot; + ax.set_ylim((0, 1)) + + # Add a horizontal line to denote speedup = 1x; + # ax.axhline(y=1, color="#2f2f2f", linestyle="--", zorder=1, linewidth=1, alpha=0.5) + + # Set the x ticks; + ax.set_xticks(labels_str) + ax.set_xticklabels(labels=[get_exp_label(l) for l in labels], rotation=0, ha="center", fontsize=8) + ax.tick_params(labelcolor="black") + # Set the y ticks; + ax.yaxis.set_major_locator(plt.LinearLocator(5)) + if y == 0: + ax.set_yticklabels(labels=["{:.1f}x".format(l) for l in ax.get_yticks()], ha="right", fontsize=9) + else: + ax.set_yticklabels(labels=["" for l in ax.get_yticks()]) + # Hide tick markers; + for tic in ax.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + # Add policy annotation; + if y == 0 and x % 2 == 0: + ax.annotate(f"{legend_labels[x // 2]}", xy=(-0.3, -1.4), fontsize=14, ha="center", xycoords="axes fraction", rotation=90) + + ax.set_ylabel(None) + ax.set_xlabel(None) + + # Add benchmark name and baseline execution time annotations; + ax.annotate(f"{BENCHMARK_NAMES[data['benchmark'].iloc[0]]}", xy=(0.50, 1.1), fontsize=10, ha="center", xycoords="axes fraction") + + # Turn off tick lines; + ax.xaxis.grid(False) + + # Add baseline execution time annotations (median of execution time across blocks); + if baseline_labels: + ax.annotate(f"Median baseline exec. time (ms):", xy=(0, -0.34), fontsize=8, ha="left", xycoords="axes fraction", color=COLORS["peach1"]) + for i, l in enumerate(labels): + baseline_median = baseline_labels[i] + ax.annotate(f"{int(1000 * baseline_median)}", xy=(i, -0.48), fontsize=8, color="#2f2f2f", ha="center", xycoords=("data", "axes fraction")) + + # Legend; + if x == 0 and y== 0: + legend_labels = [f"1D={x.split(',')[0]}" for x in data["block_size_str"].unique()] + custom_lines = [ + lines.Line2D([], [], color="white", marker=markers[i], markersize=10, label=legend_labels[i], markerfacecolor=palette[i], markeredgecolor="#2f2f2f") + for i in range(len(legend_labels))] + leg = fig.legend(custom_lines, legend_labels, + bbox_to_anchor=(0.99, 1), fontsize=10, ncol=2, handletextpad=0.1, columnspacing=0.2) + leg.set_title("Block size:\n2D=8x8, 3D=4x4x4", prop={"size": 10}) + leg._legend_box.align = "left" + + return ax + ############################## ############################## @@ -447,6 +525,56 @@ def build_theoretical_time_plot_2rows(data, gridspec, x, y, baseline_labels=None #%% Similar plot, but formatted for 1-column on a paper; + # sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) + # plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] + # plt.rcParams['axes.titlepad'] = 20 + # plt.rcParams['axes.labelpad'] = 10 + # plt.rcParams['axes.titlesize'] = 22 + # plt.rcParams['axes.labelsize'] = 14 + # plt.rcParams['xtick.major.pad'] = 4 + + # # Lists of benchmarks and block sizes; + # benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] + # policy_list = list(reversed(sorted(data["exec_policy"].unique()))) + # num_col = len(benchmark_list) // 2 + # num_row = len(policy_list) * 2 + # fig = plt.figure(figsize=(2.2 * num_col, 2 * num_row)) + # gs = gridspec.GridSpec(num_row, num_col) + # plt.subplots_adjust(top=0.85, + # bottom=0.10, + # left=0.10, + # right=0.98, + # hspace=0.9, + # wspace=0.15) + + # exec_time_axes = [] + # baselines_dict = {} + # for b_i, b in enumerate(benchmark_list): + # baselines = [] + # tmp_data = data[(data["exec_policy"] == "sync") & (data["benchmark"] == b)] + # labels = sorted(tmp_data["size"].unique()) + # for i, l in enumerate(labels): + # baselines += [np.median(tmp_data[tmp_data["size"] == int(l)]["theoretical_time_sec"])] + # baselines_dict[b] = baselines + + # for p_i, p in enumerate(policy_list): + # for b_i, b in enumerate(benchmark_list): + # index_tot = (len(benchmark_list) * p_i + b_i) + # j = index_tot % num_col + # i = index_tot // num_col + # curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) + # exec_time_axes += [build_theoretical_time_plot_2rows(curr_res, gs, i, j, baseline_labels=baselines_dict[b])] + + # plt.annotate("Input number of elements", xy=(0.5, 0.02), fontsize=14, ha="center", va="center", xycoords="figure fraction") + # plt.suptitle("Slowdown w.r.t. execution\nwithout resource contention", fontsize=16, x=.02, y=0.99, ha="left") + + # l1 = lines.Line2D([0.01, 0.99], [0.46, 0.46], transform=fig.transFigure, figure=fig, color="#2f2f2f", linestyle="--", linewidth=1) + # fig.lines.extend([l1]) + + # save_plot(PLOT_DIR, "speedup_theoretical_time_2rows_{}.{}", OUTPUT_DATE) + + #%% Similar plot, but formatted for 1-column on a paper and without serial execution time; + sns.set_style("whitegrid", {"xtick.bottom": True, "ytick.left": True, "xtick.color": ".8", "ytick.color": ".8"}) plt.rcParams["font.family"] = ["Latin Modern Roman Demi"] plt.rcParams['axes.titlepad'] = 20 @@ -459,11 +587,11 @@ def build_theoretical_time_plot_2rows(data, gridspec, x, y, baseline_labels=None benchmark_list = [b for b in BENCHMARK_NAMES.keys() if b in data["benchmark"].unique()] policy_list = list(reversed(sorted(data["exec_policy"].unique()))) num_col = len(benchmark_list) // 2 - num_row = len(policy_list) * 2 - fig = plt.figure(figsize=(2.2 * num_col, 2 * num_row)) + num_row = len(policy_list) + fig = plt.figure(figsize=(2.2 * num_col, 2.4 * num_row)) gs = gridspec.GridSpec(num_row, num_col) - plt.subplots_adjust(top=0.85, - bottom=0.10, + plt.subplots_adjust(top=0.75, + bottom=0.18, left=0.10, right=0.98, hspace=0.9, @@ -478,22 +606,23 @@ def build_theoretical_time_plot_2rows(data, gridspec, x, y, baseline_labels=None for i, l in enumerate(labels): baselines += [np.median(tmp_data[tmp_data["size"] == int(l)]["theoretical_time_sec"])] baselines_dict[b] = baselines - + + policy_list = ["default"] # Skip sync policy; for p_i, p in enumerate(policy_list): for b_i, b in enumerate(benchmark_list): index_tot = (len(benchmark_list) * p_i + b_i) j = index_tot % num_col i = index_tot // num_col curr_res = data[(data["benchmark"] == b) & (data["exec_policy"] == p)].reset_index(drop=True) - exec_time_axes += [build_theoretical_time_plot_2rows(curr_res, gs, i, j, baseline_labels=baselines_dict[b])] + exec_time_axes += [build_theoretical_time_plot_2rows_default(curr_res, gs, i, j, baseline_labels=baselines_dict[b])] plt.annotate("Input number of elements", xy=(0.5, 0.02), fontsize=14, ha="center", va="center", xycoords="figure fraction") plt.suptitle("Slowdown w.r.t. execution\nwithout resource contention", fontsize=16, x=.02, y=0.99, ha="left") - l1 = lines.Line2D([0.01, 0.99], [0.46, 0.46], transform=fig.transFigure, figure=fig, color="#2f2f2f", linestyle="--", linewidth=1) - fig.lines.extend([l1]) + # l1 = lines.Line2D([0.01, 0.99], [0.46, 0.46], transform=fig.transFigure, figure=fig, color="#2f2f2f", linestyle="--", linewidth=1) + # fig.lines.extend([l1]) - save_plot(PLOT_DIR, "speedup_theoretical_time_2rows_{}.{}", OUTPUT_DATE) + save_plot(PLOT_DIR, "speedup_theoretical_time_2rows_default_{}.{}", OUTPUT_DATE) #%% From 2389475917bae4713fa4ec594a601105b19ff4ec Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Wed, 26 Aug 2020 16:09:14 +0200 Subject: [PATCH 142/236] added default-only theoretical speed plots - 2 --- .../resources/python/plotting/plot_theoretical_performance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/resources/python/plotting/plot_theoretical_performance.py b/projects/resources/python/plotting/plot_theoretical_performance.py index 695b5435..24bfc962 100755 --- a/projects/resources/python/plotting/plot_theoretical_performance.py +++ b/projects/resources/python/plotting/plot_theoretical_performance.py @@ -617,7 +617,7 @@ def build_theoretical_time_plot_2rows_default(data, gridspec, x, y, baseline_lab exec_time_axes += [build_theoretical_time_plot_2rows_default(curr_res, gs, i, j, baseline_labels=baselines_dict[b])] plt.annotate("Input number of elements", xy=(0.5, 0.02), fontsize=14, ha="center", va="center", xycoords="figure fraction") - plt.suptitle("Slowdown w.r.t. execution\nwithout resource contention", fontsize=16, x=.02, y=0.99, ha="left") + plt.suptitle("Slowdown with respect to execution\nwithout resource contention", fontsize=16, x=.02, y=0.99, ha="left") # l1 = lines.Line2D([0.01, 0.99], [0.46, 0.46], transform=fig.transFigure, figure=fig, color="#2f2f2f", linestyle="--", linewidth=1) # fig.lines.extend([l1]) From 0fb7c4097112b3f80795e503565406520dac1845 Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 3 Sep 2020 09:49:34 +0200 Subject: [PATCH 143/236] added option to force stream attach --- .../src/com/nvidia/grcuda/GrCUDAContext.java | 9 +++++++ .../src/com/nvidia/grcuda/GrCUDAOptions.java | 3 +++ .../com/nvidia/grcuda/gpu/CUDARuntime.java | 3 ++- .../python/benchmark/bench/bench_1.py | 2 +- .../resources/python/benchmark/benchmark.py | 2 ++ .../benchmark/benchmark_nvprof_wrapper.py | 3 ++- .../python/benchmark/benchmark_wrapper.py | 27 ++++++++++++++----- 7 files changed, 39 insertions(+), 10 deletions(-) diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java index e7e08869..ecf77a7e 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAContext.java @@ -66,6 +66,7 @@ public final class GrCUDAContext { public static final DependencyPolicyEnum DEFAULT_DEPENDENCY_POLICY = DependencyPolicyEnum.DEFAULT; public static final RetrieveNewStreamPolicyEnum DEFAULT_RETRIEVE_STREAM_POLICY = RetrieveNewStreamPolicyEnum.FIFO; public static final RetrieveParentStreamPolicyEnum DEFAULT_PARENT_STREAM_POLICY = RetrieveParentStreamPolicyEnum.DEFAULT; + public static final boolean DEFAULT_FORCE_STREAM_ATTACH = false; private static final String ROOT_NAMESPACE = "CU"; @@ -77,6 +78,7 @@ public final class GrCUDAContext { private volatile boolean cudaInitialized = false; private final RetrieveNewStreamPolicyEnum retrieveNewStreamPolicy; private final RetrieveParentStreamPolicyEnum retrieveParentStreamPolicyEnum; + private final boolean forceStreamAttach; // this is used to look up pre-existing call targets for "map" operations, see MapArrayNode private final ConcurrentHashMap, CallTarget> uncachedMapCallTargets = new ConcurrentHashMap<>(); @@ -84,6 +86,9 @@ public final class GrCUDAContext { public GrCUDAContext(Env env) { this.env = env; + // Retrieve if we should force array stream attachment; + forceStreamAttach = env.getOptions().get(GrCUDAOptions.ForceStreamAttach); + // Retrieve the stream retrieval policy; retrieveNewStreamPolicy = parseRetrieveStreamPolicy(env.getOptions().get(GrCUDAOptions.RetrieveNewStreamPolicy)); @@ -183,6 +188,10 @@ public RetrieveParentStreamPolicyEnum getRetrieveParentStreamPolicyEnum() { return retrieveParentStreamPolicyEnum; } + public boolean isForceStreamAttach() { + return forceStreamAttach; + } + /** * Compute the maximum number of concurrent threads that can be spawned by GrCUDA. * This value is usually smaller or equal than the number of logical CPU threads available on the machine. diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java index e494b833..aa1f1185 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/GrCUDAOptions.java @@ -65,4 +65,7 @@ private GrCUDAOptions() { @Option(category = OptionCategory.USER, help = "Choose how streams for new GrCUDA computations are obtained from parent computations", stability = OptionStability.EXPERIMENTAL) // public static final OptionKey RetrieveParentStreamPolicy = new OptionKey<>(GrCUDAContext.DEFAULT_PARENT_STREAM_POLICY.getName()); + + @Option(category = OptionCategory.USER, help = "Force the use of array stream attaching even when not required (e.g. post-Pascal GPUs)", stability = OptionStability.EXPERIMENTAL) // + public static final OptionKey ForceStreamAttach = new OptionKey<>(false); } diff --git a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java index 8ea573f7..57601600 100644 --- a/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java +++ b/projects/com.nvidia.grcuda/src/com/nvidia/grcuda/gpu/CUDARuntime.java @@ -135,7 +135,8 @@ public CUDARuntime(GrCUDAContext context, Env env) { // Check if the GPU available in the system has Compute Capability >= 6.0 (Pascal architecture) int computeCapabilityMajor = cudaDeviceGetAttribute(CUDADeviceAttribute.COMPUTE_CAPABILITY_MAJOR, 0); - this.arrayStreamArchitecturePolicy = computeCapabilityMajor < 6 ? new PrePascalArrayStreamAssociation() : new PostPascalArrayStreamAssociation(); + // Use pre-Pascal stream attachment policy if the CC is < 6 or if the attachment is forced by options; + this.arrayStreamArchitecturePolicy = (computeCapabilityMajor < 6 || context.isForceStreamAttach()) ? new PrePascalArrayStreamAssociation() : new PostPascalArrayStreamAssociation(); } // using this slow/uncached instance since all calls are non-critical diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index a40a87ab..8f3c5f59 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -4,7 +4,7 @@ import numpy as np from random import random, randint, seed -from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D, DEFAULT_NUM_BLOCKS from benchmark_result import BenchmarkResult ############################## diff --git a/projects/resources/python/benchmark/benchmark.py b/projects/resources/python/benchmark/benchmark.py index bb01ee6a..74db72c2 100644 --- a/projects/resources/python/benchmark/benchmark.py +++ b/projects/resources/python/benchmark/benchmark.py @@ -6,6 +6,8 @@ DEFAULT_BLOCK_SIZE_1D = 32 DEFAULT_BLOCK_SIZE_2D = 8 +DEFAULT_NUM_BLOCKS = 64 # GTX 960, 8 SM +DEFAULT_NUM_BLOCKS = 448 # P100, 56 SM def time_phase(phase_name: str) -> Callable: diff --git a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py index c0890750..f9f45916 100644 --- a/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_nvprof_wrapper.py @@ -10,7 +10,8 @@ ############################## ############################## -DEFAULT_NUM_BLOCKS = 64 +DEFAULT_NUM_BLOCKS = 64 # GTX 960, 8 SM +DEFAULT_NUM_BLOCKS = 448 # P100, 56 SM # Benchmark settings; benchmarks = [ diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 186d8afc..1b2627c1 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -10,28 +10,41 @@ ############################## ############################## -DEFAULT_NUM_BLOCKS = 64 +DEFAULT_NUM_BLOCKS = 64 # GTX 960, 8 SM +DEFAULT_NUM_BLOCKS = 448 # P100, 56 SM # Benchmark settings; benchmarks = [ - # "b1", + "b1", "b5", - # "b6", - # "b7", - # "b8", - # "b10", + "b6", + "b7", + "b8", + "b10", ] +# GTX 960 num_elem = { "b1": [20_000_000, 60_000_000, 80_000_000, 100_000_000, 120_000_000], # [10_000_000, 20_000_000, 40_000_000, 60_000_000, 80_000_000], "b4": [3_000_000, 5000000, 10000000, 20000000, 40_000_000], - "b5": [2_000_000],#, 6_000_000, 8_000_000, 10_000_000, 12_000_000], #[2_000_000, 4_000_000, 6_000_000, 8_000_000, 10_000_000], + "b5": [2_000_000, 6_000_000, 8_000_000, 10_000_000, 12_000_000], #[2_000_000, 4_000_000, 6_000_000, 8_000_000, 10_000_000], "b6": [200_000, 500_000, 800_000, 1_000_000, 1_200_000], # [20000, 50000, 200000, 500000, 800_000], "b7": [4_000_000, 7_000_000, 10_000_000, 15_000_000, 20_000_000], # [2_000_000, 5_000_000, 7_500_000, 10_000_000, 15_000_000], "b8": [1600, 2400, 3200, 4000, 4800], # [800, 1600, 2400, 4000, 4800], "b10": [3000, 4000, 5000, 6000, 7000], # [2000, 3000, 4000, 5000, 6000], } +# P100 +num_elem = { + "b1": [100_000_000, 200_000_000, 500_000_000, 600_000_000, 700_000_000], + "b5": [10_000_000, 20_000_000, 50_000_000, 60_000_000, 70_000_000], + "b6": [1_000_000, 2_000_000, 4_000_000, 5_000_000, 6_000_000], + "b7": [20_000_000, 40_000_000, 60_000_000, 100_000_000, 140_000_000], + "b8": [5000, 8000, 10000, 12000, 16000], + "b10": [7000, 10000, 12000, 14000, 16000], +} + + exec_policies = ["default", "sync"] new_stream_policies = ["always-new"] From 4be33c3fc8b9d5d6e031346f25316c368bcea53f Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Thu, 3 Sep 2020 09:56:54 +0200 Subject: [PATCH 144/236] added default num blocks in benchmarks --- projects/resources/python/benchmark/bench/bench_1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/resources/python/benchmark/bench/bench_1.py b/projects/resources/python/benchmark/bench/bench_1.py index 8f3c5f59..e4d19d92 100644 --- a/projects/resources/python/benchmark/bench/bench_1.py +++ b/projects/resources/python/benchmark/bench/bench_1.py @@ -76,7 +76,7 @@ def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): self.reduce_kernel = None self.cpu_result = 0 - self.num_blocks = 64 + self.num_blocks = DEFAULT_NUM_BLOCKS self.block_size = DEFAULT_BLOCK_SIZE_1D @time_phase("allocation") From 3cd60f5cdbe1db9d88c0bc131e5e8e6010b2bacd Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 7 Sep 2020 15:39:28 +0200 Subject: [PATCH 145/236] benchmarks block sizes do not require full reinit now --- .../python/benchmark/bench/bench_10.py | 4 +- .../python/benchmark/bench/bench_5.py | 5 ++- .../python/benchmark/bench/bench_6.py | 6 +-- .../python/benchmark/bench/bench_7.py | 4 +- .../python/benchmark/bench/bench_8.py | 11 ++--- .../python/benchmark/benchmark_wrapper.py | 40 ++++++++++--------- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/projects/resources/python/benchmark/bench/bench_10.py b/projects/resources/python/benchmark/bench/bench_10.py index 760a8d99..70570480 100644 --- a/projects/resources/python/benchmark/bench/bench_10.py +++ b/projects/resources/python/benchmark/bench/bench_10.py @@ -4,7 +4,7 @@ import numpy as np from random import random, randint, seed, sample, uniform -from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D, DEFAULT_BLOCK_SIZE_2D +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D, DEFAULT_BLOCK_SIZE_2D, DEFAULT_NUM_BLOCKS from benchmark_result import BenchmarkResult ############################## @@ -184,7 +184,7 @@ def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): self.cpu_result = None self.gpu_result = None - self.num_blocks_per_processor = 16 # i.e. 2 * number of SM on the GTX960 + self.num_blocks_per_processor = DEFAULT_NUM_BLOCKS # 16 # i.e. 2 * number of SM on the GTX960 self.block_size_1d = DEFAULT_BLOCK_SIZE_1D self.block_size_2d = DEFAULT_BLOCK_SIZE_2D diff --git a/projects/resources/python/benchmark/bench/bench_5.py b/projects/resources/python/benchmark/bench/bench_5.py index 1110a5ca..a8ca2db0 100644 --- a/projects/resources/python/benchmark/bench/bench_5.py +++ b/projects/resources/python/benchmark/bench/bench_5.py @@ -4,7 +4,7 @@ import numpy as np from random import random, randint, seed -from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D, DEFAULT_NUM_BLOCKS from benchmark_result import BenchmarkResult from java.lang import System import math @@ -71,7 +71,7 @@ def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): super().__init__("b5", benchmark, nvprof_profile) self.size = 0 - self.num_blocks = 64 + self.num_blocks = DEFAULT_NUM_BLOCKS self.sum_kernel = None self.cpu_result = 0 self.block_size = DEFAULT_BLOCK_SIZE_1D @@ -110,6 +110,7 @@ def init(self): seed(self.random_seed) self.x_tmp = [K] * self.size if self.benchmark.random_init: + # self.x_tmp = np.random.uniform(-0.5, 0.5, self.size).astype(float) + K for i in range(len(self.x_tmp)): self.x_tmp[i] = random() - 0.5 + K diff --git a/projects/resources/python/benchmark/bench/bench_6.py b/projects/resources/python/benchmark/bench/bench_6.py index 63f67c72..eca244d0 100644 --- a/projects/resources/python/benchmark/bench/bench_6.py +++ b/projects/resources/python/benchmark/bench/bench_6.py @@ -5,7 +5,7 @@ import numpy as np from random import random, randint, seed -from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D, DEFAULT_NUM_BLOCKS from benchmark_result import BenchmarkResult ############################## @@ -184,8 +184,8 @@ def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): self.num_features = 200 # self.nb_feat_log_prob_np.shape[1] self.num_classes = 10 # self.nb_feat_log_prob_np.shape[0] - self.num_blocks_size = 64 - self.num_blocks_feat = 64 + self.num_blocks_size = DEFAULT_NUM_BLOCKS + self.num_blocks_feat = DEFAULT_NUM_BLOCKS self.block_size = DEFAULT_BLOCK_SIZE_1D self.x_cpu = None diff --git a/projects/resources/python/benchmark/bench/bench_7.py b/projects/resources/python/benchmark/bench/bench_7.py index 3ecb3e59..67e3d6a7 100644 --- a/projects/resources/python/benchmark/bench/bench_7.py +++ b/projects/resources/python/benchmark/bench/bench_7.py @@ -4,7 +4,7 @@ import numpy as np from random import random, randint, seed, sample -from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D, DEFAULT_NUM_BLOCKS from benchmark_result import BenchmarkResult ############################## @@ -99,7 +99,7 @@ def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): self.cpu_result = None self.gpu_result = None - self.num_blocks_size = 32 + self.num_blocks_size = DEFAULT_NUM_BLOCKS self.block_size = None self.spmv_kernel = None diff --git a/projects/resources/python/benchmark/bench/bench_8.py b/projects/resources/python/benchmark/bench/bench_8.py index f41d0058..d4347cf6 100644 --- a/projects/resources/python/benchmark/bench/bench_8.py +++ b/projects/resources/python/benchmark/bench/bench_8.py @@ -4,7 +4,7 @@ import numpy as np from random import random, randint, seed, sample -from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D, DEFAULT_BLOCK_SIZE_2D +from benchmark import Benchmark, time_phase, DEFAULT_BLOCK_SIZE_1D, DEFAULT_BLOCK_SIZE_2D, DEFAULT_NUM_BLOCKS from benchmark_result import BenchmarkResult ############################## @@ -238,7 +238,7 @@ def __init__(self, benchmark: BenchmarkResult, nvprof_profile: bool = False): self.cpu_result = None self.gpu_result = None - self.num_blocks_per_processor = 16 # i.e. 2 * number of SM on the GTX960 + self.num_blocks_per_processor = DEFAULT_NUM_BLOCKS # 16 # i.e. 2 * number of SM on the GTX960 self.block_size_1d = DEFAULT_BLOCK_SIZE_1D self.block_size_2d = DEFAULT_BLOCK_SIZE_2D @@ -308,11 +308,8 @@ def gaussian_kernel(diameter, sigma): seed(self.random_seed) # Create a random image; - self.image_cpu = np.zeros((self.size, self.size)) # Create here the image used for validation; - for i in range(self.size): - for j in range(self.size): - self.image_cpu[i, j] = random() - self.image[i][j] = float(self.image_cpu[i, j]) + self.image_cpu = np.random.rand(self.size, self.size).astype(np.float32) # Create here the image used for validation; + self.image.copyFrom(int(np.int64(self.image_cpu.ctypes.data)), len(self.image)) self.kernel_small_cpu = gaussian_kernel(self.kernel_small_diameter, self.kernel_small_variance) self.kernel_large_cpu = gaussian_kernel(self.kernel_large_diameter, self.kernel_large_variance) diff --git a/projects/resources/python/benchmark/benchmark_wrapper.py b/projects/resources/python/benchmark/benchmark_wrapper.py index 1b2627c1..b234e697 100644 --- a/projects/resources/python/benchmark/benchmark_wrapper.py +++ b/projects/resources/python/benchmark/benchmark_wrapper.py @@ -39,7 +39,7 @@ "b1": [100_000_000, 200_000_000, 500_000_000, 600_000_000, 700_000_000], "b5": [10_000_000, 20_000_000, 50_000_000, 60_000_000, 70_000_000], "b6": [1_000_000, 2_000_000, 4_000_000, 5_000_000, 6_000_000], - "b7": [20_000_000, 40_000_000, 60_000_000, 100_000_000, 140_000_000], + "b7": [20_000_000, 40_000_000, 60_000_000, 80_000_000, 100_000_000], "b8": [5000, 8000, 10000, 12000, 16000], "b10": [7000, 10000, 12000, 14000, 16000], } @@ -108,7 +108,7 @@ def execute_cuda_benchmark(benchmark, size, block_size, exec_policy, num_iter, d "--reinit false --realloc false -b {} --block_size_1d {} --block_size_2d {} --no_cpu_validation {} {} -o {}" -def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_stream_policy, +def execute_grcuda_benchmark(benchmark, size, block_sizes, exec_policy, new_stream_policy, parent_stream_policy, dependency_policy, num_iter, debug, time_phases, output_date=None): if debug: BenchmarkResult.log_message("") @@ -116,7 +116,7 @@ def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_strea BenchmarkResult.log_message("#" * 30) BenchmarkResult.log_message(f"Benchmark {i + 1}/{tot_benchmarks}") BenchmarkResult.log_message(f"benchmark={b}, size={n}," - f"block size={block_size}, " + f"block sizes={block_sizes}, " f"exec policy={exec_policy}, " f"new stream policy={new_stream_policy}, " f"parent stream policy={parent_stream_policy}, " @@ -129,7 +129,7 @@ def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_strea if not output_date: output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") file_name = f"{output_date}_{benchmark}_{exec_policy}_{new_stream_policy}_{parent_stream_policy}_" \ - f"{dependency_policy}_{size}_{block_size['block_size_1d']}_{block_size['block_size_2d']}_{num_iter}.json" + f"{dependency_policy}_{size}_{num_iter}.json" # Create a folder if it doesn't exist; output_folder_path = os.path.join(BenchmarkResult.DEFAULT_RES_FOLDER, output_date + "_grcuda") if not os.path.exists(output_folder_path): @@ -137,9 +137,11 @@ def execute_grcuda_benchmark(benchmark, size, block_size, exec_policy, new_strea BenchmarkResult.log_message(f"creating result folder: {output_folder_path}") os.mkdir(output_folder_path) output_path = os.path.join(output_folder_path, file_name) + b1d_size = " ".join([str(b['block_size_1d']) for b in block_sizes]) + b2d_size = " ".join([str(b['block_size_2d']) for b in block_sizes]) benchmark_cmd = GRAALPYTHON_CMD.format(new_stream_policy, exec_policy, dependency_policy, parent_stream_policy, - num_iter, size, benchmark, block_size["block_size_1d"], block_size["block_size_2d"], + num_iter, size, benchmark, b1d_size, b2d_size, "-d" if debug else "", "-p" if time_phases else "", output_path) start = System.nanoTime() result = subprocess.run(benchmark_cmd, @@ -192,7 +194,7 @@ def tot_benchmark_count(): tot += len(num_elem[b]) * len(block_sizes) * len(exec_policies) * len(new_stream_policies) * len(parent_stream_policies) * len(dependency_policies) else: for b in benchmarks: - tot += len(num_elem[b]) * len(block_sizes) * len(exec_policies) + tot += len(num_elem[b]) * len(exec_policies) return tot output_date = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") @@ -202,18 +204,18 @@ def tot_benchmark_count(): tot_benchmarks = tot_benchmark_count() for b in benchmarks: for n in num_elem[b]: - for block_size in block_sizes: - for exec_policy in exec_policies: - # CUDA Benchmarks; - if use_cuda: + for exec_policy in exec_policies: + # CUDA Benchmarks; + if use_cuda: + for block_size in block_sizes: execute_cuda_benchmark(b, n, block_size, exec_policy, num_iter, debug, num_blocks=num_blocks, output_date=output_date) i += 1 - # GrCUDA Benchmarks; - else: - for new_stream_policy in new_stream_policies: - for parent_stream_policy in parent_stream_policies: - for dependency_policy in dependency_policies: - execute_grcuda_benchmark(b, n, block_size, exec_policy, new_stream_policy, - parent_stream_policy, dependency_policy, num_iter, - debug, time_phases, output_date=output_date) - i += 1 + # GrCUDA Benchmarks; + else: + for new_stream_policy in new_stream_policies: + for parent_stream_policy in parent_stream_policies: + for dependency_policy in dependency_policies: + execute_grcuda_benchmark(b, n, block_sizes, exec_policy, new_stream_policy, + parent_stream_policy, dependency_policy, num_iter, + debug, time_phases, output_date=output_date) + i += 1 From 2d499ccf08c2a2a32c96b8a50764059bf98fbf1b Mon Sep 17 00:00:00 2001 From: Alberto Parravicini Date: Mon, 7 Sep 2020 17:02:44 +0200 Subject: [PATCH 146/236] added option to load graph from pickle in b7 --- data/pickle/graph_10000 | Bin 0 -> 298476 bytes data/pickle/graph_100000 | Bin 0 -> 3726332 bytes .../python/benchmark/bench/bench_7.py | 8 +- .../python/benchmark/bench/bench_72.py | 96 +++++++++++------- 4 files changed, 67 insertions(+), 37 deletions(-) create mode 100644 data/pickle/graph_10000 create mode 100644 data/pickle/graph_100000 diff --git a/data/pickle/graph_10000 b/data/pickle/graph_10000 new file mode 100644 index 0000000000000000000000000000000000000000..ccbe682d4f1e87ba0aca0fec9068ae7a1d200513 GIT binary patch literal 298476 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�e`MMxHOx7XN)bo2QDVW)ru z`T-90v2%)Aga@)bkzq64q7LQ@EbcLOY*FOP6wCA)I^jE^e8n6UU{9e$fNGirLL?}K zZzsGcr;1Un&@y9(*F;E_PaQ|63QgW=*@?+HUrrJ6WuS zm6U)4c`nXo{T5CYvux~S10RtVBdmPynEI(e3HQxEZzuXqHT32rR1XeSeS z#)YJA=cqJ&IkuCAIsXULAZFNJ8yvt+?E zpQwoT3hHxg(Z^fjS$O$Rmm%-Y%UHa5h@TCW^|%Q5SW7ud3w0fKx@!FF5wPSpm*QDB zzxWwWu%s9(P2g^_kD{O7oy>KaT2~CRev@_jo)ncHUdm`W`zvkq=4$~HP5zs`O;{+EanXRwa$5H`CqRiEe5;jh4rjMf>oGpa8 zXug6>x_B(Yi3Qdbm?lrmV=$3Dn+T8RoJ?w$B#mkIknu{2%W{^IH!;d1T&L$zV55Ha z$+LKiUGv}d;P&AR@@=<44NpoHZ(@#J{C)|hTC}A4<`6qm!p@rB9_pP3o2URx&p@wsM5mHQ7+R( zBQlmiF;Z5QW3(GyYjZd21bJCfZro6ji)Go=%?Z-d;`qc4lwRuO3B{oiwrjIU<@6Mt zVx(ocNmpm9oga${dL({Z3oixPM+!^cPM}@e80uiCP;6&K7hg0P#i!)?HDK|cGiDdy zXM%nz-yYx?7hARPU68v(i0LOS256HlxJ#Zx1-9|9kyohD;`MCgWPdT96@W{I(!TO@ zqf)LMFN^3EXWcwUx_CihRLmOYuk?{kT5|TkUj9{{Bxx?kvjZ$};&3rba$kTAn$#X` zJVnZ1IE_{8k+vhQRMLR%2Z~xbU;@Zyt$ZUYT8{4qSjNM;UiSBKbeubS$O_>le3Q_8 z;&V5#r3#uhcGKhKdP%F@d?_M$FK;UE2^zNi6REZBoK&E%jmI4Z{oPtSUvXK8?S-?= z*xtUiz_r3H>DNgX59FgDCkVHl;ZY2?1B;#%#SNbS*!AnaE zyB7G%!!04BLBFJ5AkTG9o^)|Ui?QByJ^7vN88+6ew2X7Jyw=Cj3de&MnYN@k-c88M zI|)N~?$FPb1@?5{4)Lrow28y2TdAEV@`i(bsfT3*?Mv9})!#p$-)_14 zn_t=0?F75{vxPtX6hk)ZVXknVX=VlK$|@@@&QoHneRx%Z`-C?vu!qk$jcs{eZRMgi zT-_|KB(0OMgZGs(D-w{3phH2AU9o%<&V9U4v;mgvW2;UY5$2_dxG4E0ofX@Pf(doA zNY0SEuPG~Zu!63;CMf$8iBv*8c_|5Q-#qm7E3WNfhmaBMH%c(x%gy?O^P)hPG)xkix6Jhyu-len{o-Fo?>m+vLfW=ZF{xJAh>Wj$9XJ_(l* z;!>Oi2lViw=zCoTqIHOJ^a{N&`RPA-+W+0H3R_K|e%vt4s_*h2CjwZj738#FT67NV57SWM7wl`A}?!fY6^ zQ}d1}`A+a~ZjfJNJdoiB>D*y5G5n%Wy7|$=kxHMlRs`sZ^G=6EY5s1ZFT`~&P6^rD zUE9y3sP&y<>=xJOz!v64cthEzhg{I^N@;uh6nMhLl5QFq?g<+KJuIl8hYLL%>$6kf zHEEvB3-O{JCX#$FvZaS`*vP2&^>d=1U;RXswRN+ea=J8`EQbf_?qU0EF~{jXqA^zP zRfk{I!9@X!tHv(Y9$ zr|qp>BDLLt(_^BowD6iP`vAvgSxc8&Cs(v`gOuDPpJ#d3$;S#xIt(j$u#1@x{~a*( zZz#bd0)0B!q`*76$OZit2D+Psi{6aYFcypPW!%n-mA$k^?EuojG@0cFk?-Q3%z zHGZsu%4HHSJ6#Y>ImnR%9&a@WlB+#h*Oi7K)kTU91u0 z>PT@Ti%)QJRGwBeia$W5mfD(PA5EM{zN`P?Z=RqewA8 zBWTsc)e7v@TC9`S*%C1v=%kC+;@sXmN#D#UuDRXK9%1&4^SX%hDc%+GHfqw{J#kCn zH_mf_^v9Hi2m1$kEoAxIhpFNR276tqw>Zy`wsU&ewBNSF9|K(9eC@fO;&y!QX7O%g zxLp)AeI^<=F5~hc*70#x3kL*^iY~?WiveTVN`t#tVokfH{L72l*T-hX zstzN-w(b^1tg0BO&Z>u+;hJ9d){AWAmG0v4hB>|~qpU3>jUa6(+OM-X1a)-qdM8Wu zSoQb!1ij*lyR1(8Ymn-+gdyxbo9!@qR1yD~Mww?(9kbBpdT4{xY25#>>(IZ;Zg*R*p-)|8IJ!gf!;uA*_K zxM%TZ4sr0Viwj%0DMr6|$~{brCo7I!kX*>3EJXnmX`WC{ldwARSy@ydI9bYspGQ<5 zbz6bDTUg;JMM*;e?(Seq{T&rDdO53?4FY_v=PmSSo=udN=q^xj+iN`KZe58zs(=)i zBko|4FqgLTmy&PQzoKl_L1TbxeI(nhu76HDM~ZT+_t#-m_RI6EtB^TvYJpCAS2HVl zJj9|A;|8lRqU7Zi2M-51D8bJ?#djFj5$xf0uW8Nit9X>K9A%Ae?ok{U;h`)qdUz#f zyK-%P`~kcP!(@J?FC)&KS>EWU7N9R;0A1yP@2FZEVD$)_x0(r$cQUWn z&Om1dN0uK1O7yd}p9B1sTB|U)ZIU~CS?K4Vc0Ljb)WKI7)(_)oHKq84ex4{;O22u; z;`&>A`AuTxfK|9t36fD37lgMd-LKKYE0XAA#uUD{U{J=-BRtl{u#@R9cg7hCm@0q1 z5^n+SMVS{zTgRr0U%XtS(wx_7`MZg6pX7x#1DNIPPED|5~LhrUY4f^ zI78n+E7!Fe3RarWqcL92a9sC7-^S6MJQwDVRvPUFMc+4N4BlV*OrYH%Di&BW%pq}}aC2#lIjxrZ|K84F z9xiUBCC|n#jtaA&gLw*_oNOE?q2N!2ECt!Ec4)W74Bmciwzxk(bQ@;)VIR{vf?5f7 z@}|(dd43MDdmE3WxlFoJoE6$Fyk8LqzRtQBD8trXlYnB)3im2UP|8IiqPR7M$+mR26IeydLCTFHh*E ziCQ`2t_XK`8#Q~>!?ud8BXmRw=~_?ov`Psfj%eej6gx<|4=|((S5~GJ6-@8Vn&Pog z)i7~R3#=enQKpV0bDg}?!kWs(6iEdcjM`D8`ifNT7vfye#k>q_W;tHgBE(Z}0$!HuN42JNlKo@5f9o51=_ZRnOc?T!D=x*hWLh)pN)34peLC)fN?CRj+c4NkW?zE@3 zWH)^ZaQ%E4wsOs*y&RTjGe1k__)*Hd)FwgJ-K-{gtcBZDGwZW5jU>Lqbn=Vcp63=f z7sQ!L@Su{yJezy*b+A&msj;id)uOPw*97oOqg17wcd%$Dr^#2)#TRlhNWgb;m5X46 z*L7ldvUik4W5$+_I#|5i!-w^xt0Y3s?~Qw8K8r_nS44ib(WX+pX^o z@PO(iNj?xfeSknKSGz5^R}p#h3|IIWZR4CyvI9IKT{UiHgqQT^IJrN_;vwA18j>uY zp`d(NS7nGxRr*SDONPAy_~X3R%DtUjowQ2GcPgv3vu!s+-lE`MKJJNdwTo9(XG}0F z&U#KBj?v!EO&L~pSRL%J5Sw(cxhTm4{Hj~q$)*uDh_ZDX*S8mCDoc>kD@Zb}Jk5tE zPteKx0iJDVCc#HtIMZyGW5Uh67M4tMT(7-?1wNipsilX#Ri4e8?6GH@qm%q8+OwCP z!j!|TrC%&nyoSTw#jjb_W2Ks8(6;Xp-MrYzY*kh|&0@4zj(L(&yIH7|JI5E@JnZER zAOGmP66{)BW2gD$7JB(J#;}i@()^?2Fwd%b14^3uS=-4qPV)`kCGdEF>w@-!c1Zc? zCZO7vq|p#}DMyrJq=$EMT++oGInMX6UI)n(EnRFS{YA)ZmFs=xiF;EjbJ7%Q)fj%r zTWNM8z^zeBc5h1Yuba(OZ|_&+{j`rA2gDRF{$q!!Bn;hNl0{B)(i_GTVYajx#b!y~ zR9@`h&=wXbs!bXbdNrqQMV%iiGu$5KVA(Sg^mXu}kDYp~;I5-F;OE{bpQQ{V{kMaM zyk?oWHO^|C#U(h)%?<%Vs^s)>L(Hnr*M!WNutb6V2DraV?kgNpM}3UwMvHMmE4y@X za|bWU#NpzA5SPd3h?`u0b64>RHjS}CJL@Z!m-$EK6+fp&E!?Yj+vA+yG{?x%xQGIa zeopHo9pj*wy`n;%eZ!pN;q*@4N||tQVTxg)&7G{%$*{2NvMeZkR$#AsV#Hj5OZ$1D z#T;tes_>|=s$1unieQg6t)J`lS*5=#LZwxzLUBK%fveP)mS!S`e3+yT`Zy=FafF_0 zn!5_TTi{?vXHizOszXuS@Pv=Y!?Z`ZA;C)p z9(B+wH%YhE<8^<&At^^+Ne`D~`7LPGgH8uKhFL8_Os*Xn$&|#T_%Y6CC+{hO%y6H~ zQvp+=7KDuxKHkH&PL}UrZ9%qM*dlBNFxBr5SA8bMMLA1rwutaul>1xlCRcFqfJE{P z?>acRmu!@=C~HghmByIln@@+Q&0iFK!imdksruRai2X#BlO$MC|AuZ> zlq4o~By5rF7OEfTEP9)c^Pt;`ID5&JlPLa&b;368b^l)0%u{aT?l!x1R!H)SVs{UB z$gtIE?$p=-TYEX6g)dW#2Uy_X3u!TJv~{pml8@UsE^If-TTZTwGuX*P4kny5LV2t`jf4+raGa$-mjlO;PUB0qMZuV~YfHJ57VDi-<1A zuC!aZ?c98w-~ty{Me!z01Uxuk3aZLV6&aq}`A|wwUbuU?u;cw)8sw@t^V;z%7R}Sv zVv(Ou2WXBNAI~Ovz{z>iELylg>ZwYVN*(*zUu^g&PqndGimiG$sfX2csQB2j%PRAC z$EYZp$ePf!p2zAl&&w|nw8&Ngg_6icT$U-Gq{6sT=uUpk+GX~rd}}fZ$@0_7jS31{ z*ipq%eG_hW)&ovb$(WnqEV<5gHL6nUV0Z0=2<-{>lDy*PR2f>l1fr%2OOj5=^XA}k z2luNyJ;3=Yyu{ccuHdvNOrT0pVIFMf-7b?eZ&s2iJvD;L%SU;5+{em6B2f-caJW8+ zwEWi0D{xm2TlW{w;Xb*7Rmkcip||fbkx}kL2^!L2-|^ek`5z~7FT2T}*~!bDW?y|J zWd@ClW8}MeKEpoBU}O!_N$aK{4^W7mBP`j*k@C99L!GhG*)B<|X6%&Z?=5(*LG~FN} zTC=>ZI(V36+M$!>a%}77u_(*Q)$8VEg{Lm7Cw(gSf0kupjPw@wGB3|Js$>S(RR*#c z%O-g##h*Dgl-bVDe8uDi+k20A*xJWiz2uuR(#HclA7`<4c6D=R&`ua#<2$#ps$Bhf zR@1qV;`)BZ9Spg-(!)-1+iJf@dBe+wayL2I&dq#TCzZXm@nnL3bbA+g#mh|Ap7Xq% zN!wq9*i^w}mV7_Uw32M&tPt%j{MF6v8FMLpGGJcmo0JL1Oixr9e9eeFSjCrl$3csW z@u0;G$LF{`$9WMFetKM-@8!S%OGu53^G^r8ePr^Sa*Bi1e-LAdHb%27 zC2M&v$EboU={U{?UA9G4``7!CgC-VWCnfk24OB#TTjzk}on@L;;kR>EWV+MC&0gE~ z@LlE*dEKnIT%?Z7P12`j`r8`aaEGMl&jxVsPpLhN2sN+rlfMQagsrsumL%>8n3h-o~*+CbW$yf3EV@>0} zT3sd-C`8z?i>I>8xNs?cR@EiTL;W1lw4)s?7o;kIF%E5IzLV7?<85jdz zSvy=IR~+MLRhtUzAHo&oe{l|w<44UgNfYUJR(;UT^LYx=X_QBHaDs}f3ijLhUCuiX zqcLtybDVktWE(0Jr3gf*%VDapBgACacS>f{M}sS=5P;ZciX<3?K9iN zx2@){lH+bv zrnaw--J~3PdAOBF62;3%`|Q%aPA-Hj^6zQuC}BHAUeK6%h})f3@INO^$j1ZvZ*?jt zf0lR7MWe?oUrQu7q?b7klM$Zn<=_Ex3?3$NG+{B7ub)j+Zj777XM;XIE3j;cD+&Z0 z{Hp6C#IMZ~!|U?oJ6TH>pD0K4u!DoOBs+)fCb(sQ`^Q5;_% zyRMhQ-?#vxK z_%_W)Ub=%6TpZkEVa(k#0jIPDF`s#?IuA+~%ivMSiCO z4|sVs!H23rNnCMqw~E{<7scNzf;v}T*JvXPTTHe7wS*raw z0&Ej!DancLRyj-L>Yv8C$z%ChCJm)kB$Lhdj9{4uU-I z_UR%Ow9rJ(+&w#JR~8+%F2!e*Lg&nX5zOFr6Y%{ z1R*Do+{Mc20vy)L*=phFH=!h;u*}1)vZnj_Z;nA3HuNUt8tdX3AFpKCBSS})L!Hca zTSMv+JuKnk0}q`sx}-rXI&<=fV(O-U?I)!Tan8xGp3-00T)LPg{Xo*0l%H-~Zit$p zdrZBuJtli7c~r&9mFCbOE4zuw*`2bg?RU}_W7g;PM<>6exIr0Zo}xPQa&{#hBPU`T zzvZlOG|x{-*QPvf@)~wBzJ*$&>Wg>$8qwclI}&*&qU&svS2IZn#5T^})3H?yqVM@rscml=$9(0vo* z=vH=c^MMS9O)H8Vf%grtx4xMa54Q4Af|t83jF*;wv77Uf){rR?RUb?)V8x7bl$-U~ zq|u~!BFiNq>rNO~HYGFJ09QKg##T;$a)0q^R_o&afL#nn>LIFSD@|{|wYdJ)$&Wef z57G5_n!J0xX2_QtUyT!+%LtI=^PuT_r^xvo;J3UfHE*@>M-R_Otp2xEhB24zPB}1k z?YBU|t#3t@g`m|whT2)l&q)EhHz)Kb;pbl znu!{zqb3llXkYI&7u<6LeCcCtbsThBAMTbiVD{sa=9eWHV_paAs((Dl!FodaUxnF4 z1!xbus8zI$7aYuyf3VdQ`4iH7s1wz}G9fGHt=P&I-GuvCUB5z-E!AfnVb2^7pf*V)l-wGJM_7T{;m{=4JfC zO|6ZwF2ZRpkc`{MN&PJEx3+*2+KXqgmcp)XHcPU64;OTDsv-ro_vNU$+0?@e5(Fjf zN{G*!Yejc^wZ$Z^xiQ}DpdgV*{rp}wQC*~y-?CKG~q0#Mz~g+zmKm2%(Qaz06#jdu}1&lvu=_qS!hqlE0|Lc zDG&P14sk@(vc-GzoIGI1#@k-AXusM^RPDy9jj4mx%gaHQYPXX>$=*K>OGq0@vk>3r zGnwNgwe-t)leOmVd9sNsx{O$8aE1c5c2-F9UY>6~%x^J8U}ss?WRg#Es&b?#uXgfR zhCbbh{Z@VWqs2Ny@+x;XQ)D%bXner2-F(>0(W8CLkwHw7WYlW9k1NS+=UDk4bg@OO zO(Eprc~$Is*hXFiKWoUK&}!MS{#a@066|!*OQd|eg=4iB+v)3Mg*>O_ts&_*=Rk$)`hFu;@9<0Q zkDAibBf(O3qXH*O#F8sD!_irmi&(GJF_K6_oSd>>R$`k+$!&r4eVnL1_9!QGk?G+{ zHM)ekG0YkfHVm?aJaKWh?6+8Y@sw%ci-v8!L$H+#jVYB%vPB6+WagVO|bMFhAaKtYDfBqvL-)|H~$vyHcuLn?Smb z^Z`Aj(z9&93Le8&Yu-w2yFoS>;H0<(lINtjvEMws>L}C>e5#K{Rj*32X_^BDiWjhH zo~+v8+SsO(Ot+msZ}oAhTF*LECA&_YI$k!Cf3k~L73>UHcswMVVlR8inUgS;U2&uO zxK+Skn}p9wp1Y_ZuMj?M?Hki7&?wnS6;HCOQ5|UV;@sqA)u8n*-_^w;YAkBwrUV!2 zGmTnAw^$#6MOjBzX^gv61!`kqWXn z8bUX_Ihd_BdsSi7kEmEqy^b-<4N_ifV0$r1Mtj81MtyYZ`s!m9rKEaoWE)r5xv_sU4(;M)jb9#_JKSvGHMvePi2D^5Q+Bo_&+7iyjS=EC zHQA|$Qx|34cG`SdKV4RR`Aqf^565}sSmkBiXl}066AjX?YMhEIU1m;{?7Zgy*QwE` z*HnIqu5vE7^_vRhak8a{^L#uX;x`HCsp2cvc&?h?`(m1MAN;@}oN6P9pI?l&< ziF%eMoeXmYIcHgmAs+&y!K9~V{KaikYBL(6M6T-HUhskzN&7`RAM;I0uYrQdDvPvi ztPSI;rt}{3u(EzubH|7z?!3Nr9rsZRb1O0lOzF?OgJmmE@Bw^`yoc*Cp#tKBp8krq zwe3b@>6%5FETwiHY2~!VW|uLUK>3vR9kp&zaVA^|9WkZXaD>G4c~64@;-?K*XHc${ zjYRpPZ3{M5;b&*{d_`L|nZ|43o>r=8Vf4=m5qoM} z{tflpI*yKlHq^aQ&<0ISGso%Mg7;)br`EM{!++zZ2t~s_ zj!vuT){zIhh}oCoO+?3$SEb@sEP^bmqj$m<{=G{PgzqP9Vf~Mg!=sRxHsFML8Kw{Z zBd+f}l1Ge~1Mig(k6j+orjtS72T6TOVTF5d;G6D(p)N^SPk9oxbxvy_t7qAS8v)r| zStrHSrEq2)4eGPV&`^TPReihRhj5tfa@5Ly2N-J{(VMGn-)TG`SXkEOx2y~ED zbHC@U#^b(bz;tTPhzfQx*Xzsz zDqQO5FBwkG=z@s8t$Dirmuaon*J0H44BumTq+p=FQeJOhS%r;4ymv?j{HnzNB zB;VysXG26|PRo$dI3L{SQR;uWBC~p`t}F2ep;5_e3l!X4-<2Phv?oIq1aFv93OWWL z2(W{gUgD`6Xw9zuK6_^M-aymH&kH(U=BSisjw!b|LRz|eB7KMIa(gq_%MO>hb^Uc{so-}j zTCT1+7{wAgVQ4qzeIc#OP6WFV8v~Sg7#mT|qg7-~I<1vi+CfCB1P|*sas9BZJ(0~P zwRX{d?pn;Qpw*CCjdTc4HYlXBvUUHFx1{uNN%Q7(0bG;5cjh4`%2DsO`5FqS2vNb# zqdBMmI2SO#At0kQEsp>80LM-8{7H+DeI^7xLfVwst+D&{kQ$~W}&MP0>;zN|;6Z^wEhqz%zs zc5I(1;u~iz7gb~)8$2%P0;2dyRNF$_Vd@d~>XG8Ul~#J19UB!O+u{Ra`rVZ7KmmrK zl{c5NckEZ~%(Ct*>owNH$ic93#WjQ6yr>GJ?Wh)xd&j*G(_l92A$wd_pu(7_<>xTS zM39Y=ccg{tI;L&f2>X^tAXb!hG56KLmpW^x|8~q|x^qUy!ZJzef}GCe5n%RB#}8qP zV**{_l&+`$PV4s>EATI8_6NfZfDzmZR-CiGJCI3l4&EZJjhV_#84+?K>UpHhGidI( zkU12#VKA371SG)=icJZdbX;o!S3o1oSKHDtT+2nBh|3>6#f06qA#;0J85Hyw3!}Q7 zc5Gk=`7Y=5W0<0hrBh>Zxx?W)#%l;FC?yQXhKSTRp(!bi;7H@7= zZx4e5wNpkr;FTU~{fO3O8<5nCHP@nN<@LhI&G?!n9Y}M{YJFDAutG^%$A0rL_@!>B z=+>OBXapUdz~!CM@36C=^N+i}xDtOU6Ia~wEVrr_v>w4w02~FFfVPos7mk91tb)B6 z5&O_onPaM|)O2`9AJPG(bj4(Pil2Ffj=Sx+ZDw$ZYNW-j|qbAQovZ5PdujE`QMgfblk?MP1a{4H^EcjG!C$s@C z+*nsey+Sw0P9;uOBDyJL z4HkZ@|I7vv+ArGsrD_&koJ$#8GZWx@G3|jZkAY#{c#q>st~P(ywYhV1E?+LHg29A4 z4E*G;3FvJ`+xNXI+OcYJz?u=$Zc?*mYu(k?7Ucll5t^8e*1?%u)5Bx0J{RmOLtPEz zpz9i&neZ7Iebv@x$os)Sj_kIx=es*CodCbzRSdKMth}2*e7^UI$u) z2ZT!u_EAP_qy0txl-JHBZHa}M+rHpJVI%gU(}HrqdxPM8h9zJhC2_#oF6NVjD{486 ztr7domo1o_MWy(!zLuvGMkqdIOA(Hga=~+?^%*m^Y;V5>)EpvHn3n@RG`5dsr{dG_Dx91) z|MfH4VH6A#V-(t3CVJoL>BWfNpEA7XJUglOW)f4do*(qjeI*OLR|Db+U2>onOf*`8 zlupH{1^}yRSNRt)?M4Y-(BCUsaTHwYs_OQtN5G4B^~02Ve?Gha)OE#J%QN(+8LlZ{ zrAb{13pAzQ)ck0mWLO4OEHJv9=l(b29Zvb}`74_iG$J9L%x)2qDi{$y<-WN&MZmy4 z{U0@GPp6?%?rULKd?O2HdFZxhA)L`eERGu5W~gP{GvbFo--mG0^EflkI&%&*h2Z6pt10!zw_ z&vN#yzZ|()I-_d?^&xD-(1E6PZ^5#4t`Kx#&)0NYE4a&pYdBt^LGZNx9JjW8Rn|B( zH#rNAPAyycw*xIXhrqO+#_CDKKGuzx=McZtwJpy-ol8=$A|~S3$XTZiV}lvarnzAG z;AdKx+HN{{)Kj9(OF9lC4;V7U>Jthj1IRNNPS=er+#zNwB_-?wize)VOGBn%w@}cbnD)mW z#Fe-tp(p@6j_M8uv~8_1rL(eHt!VDnck03SbZ1-}!JjVaNj$VzW@1(aZ!&T8y;0Mm zbxVa#9eGK880AsHBD+gQdLQQ&s1Ej)Fv$k?In_$Kw(8O0+ckT4=LLsIZ%ONdvvXPp zQpsW!W;MdXhFM%j+XEs&*csRISm$vTcD-am=CvT;F~;g0ZOrwRG9&4$Nz;bu_naB6 zfRGT9$Halmlk-krS72$asKm-AtqVK;8@EPc8#Z(29Uw;7l?x^}?^Sj&@!hK83{B(e zHN4Q;E}^TSn%3AE7>cp#q^{b-iw4{@UsiPk{~V4rwoW+K*t8Gy%cLI0U;s0^s4w{X zN5TAlvTvk#ftkkL!2lVyN8kF}EARmK!Loe7@E)C4DOl6oN48F7>+1Ba zJo~buHMpIVIXKoAN&LOi9xV&aFxqe&eauit_HqG5yf8#HWJ$gUs1tA zk*hFBcA2zjmPZV!568)r)j-(4uB#hmx?oAyRK09^IOMt2#~7{|X`x)Gn>+olkRAfb zKC7Sd0^o{=naVp{(&}X$QPJnHkC=y)wA{qEMG10O%PNWQV~=9A#C#bw6IW8$)BI6J ztF=vHxFfEgCUq}LhN5588^XFI?A7guY`C$2_w`!e;?bWMbaYWSp;ag|GlvnV($J45 z>+>`Dm4VTw%qBb*hy@Usx=zBwgl{(rwkG(lc`2H*0p!-Yk{vCLSv{)93l{bsk5RFs zTk!<(uFm*JNRK^5U}3iVw7%-AJ=8uE$oPERT1C6RfhF8GFkY7aCQ-EClaILwCLv`u z;X_p&2|E)f=Bzhxrwz3&C?xcHIUR%4He;Xen+WFnZVS%G+SxZ$lKo7LRcccArF0pE zc~;4y3)ro2s||xMYzc(e^%bk2$vb{;L`TK-x4OIG>)9}2G$>f_{=J@S>Rr*!=M)ZE zR=o1S$gMMIFxbnYVCj4Of3?x2EFM^gd`?ZD*H+AiS;i!cgJU%D6VxCj9a7c>HM@uA zR5s z`o%;+TS@tI_-mp}sLd>zw-+^BQV(#r&YE?&PuQyj+PS;iT4$i2j1;3+nYDTG=M(x1 z`*#FES4?aEfgVM{S9K|M)0CEG1Uan{dz1l8fR|9(%GHgz&hanEXOYT`uSqlfc=9s%~N z+q;Meh&!KM^W9C&NxMThZJ?KnN`~}CO83lI;XQ}17YJxlr?6I@)_0I*p~8*p$%1+A zi?evbxHXXm{XA^=J1(r-i@LpLM>i(qKVi^96kgN!I4JSR!ENKQV%Ueix2dh$`diqX z+aJ(%=FAM9!PnX~!}#NYE{GbL0sEY1`Us$*8EuTwoochDH|n|!J6Xy!;#1qWl!K+U za$M_UsbIY|&^=-6w7$exfvpWaGQD<5tMMTb_zV>|h$J&YgGqS6?SeY+JmpDlq0DRq_(n@JdZ$80O!-%MEgU`WZ-4W6GXs0$FwBe+gSb@+!P==IH21U@swH8*7oe ze%!E-b)UAonFDKjhwpM2T(5=j5@F@%n2PEiRF?F64ZX{lwQQ~LO;vkizDVeQvsO54 z4w?wVDgqBopiw^t8hBBU?*AdsP8bf0hRq+|)DI!RV?jrO%-9ouPfx$?`7z+J=RUt< zfQ)Pu*J5q4VL{mSI(wFgc1gG@TbPR`t15yX=A*oT6=e}>F(rcz!FpxJpXOU&H`_R1 zX#4J`Vw%$BIfi>*(^H{dp1`M%PuO^f-Hy-lyt)NL)Gzr7q6pxC!-3G7lY5}6XN+Sxt?NDJMpJq*t+{YJSl4o5G=qcn z0)P+t!h-g|x5h08dYD}x^eje+6&*d)k|S-FR;OTHD=#_1GURKFYxm|Aia1AN{))D& z*w^vHy6MwUVz;mA?Yb$rS0j#`(W4^+OdeocIHUDvb#&KA<_$sjqsb_lkU|Ofd^`A~ zT|(zD1T1L7q;||1(z*fcidnmNsUav&S?Runngvo6lK6t!>>xSEr}O{|r-VL0hRsrn zoi8+tyzc3lLbJ=j2O@uF2p~sDsfQEUgR=lA_U!tMMo8D_w87_zH&fc}<3Ep2J$8(=BzJt*VrJ7bNqhGPnXW&OQ9|5|n zcabPimmuTe@gC|Qc+U>HhOl0)=Rb?5K zAPo=crh?X(u$q{JCWwQ<;ncI0;!h!+QFrRWPG~3UE^eO?U!Zls`9YFST<>GNolymw3hpZe z%u_lYQbgXMzXanWh|)s>8G>81Mq8WmW@GeW#lrdzbsBANPw0`JOQ|=lCHV`nV1T4# z6~`q(@C(Ov(eked@Z7SVt(xC{04S}F?q?{7?JA~KYC0z40r5%0fQ&o@6)XuVS{rEr zt``{ME$ASa`1BHnmnwtYgHxV8*7?1NI6=n>x-h91CVG}aMsvZ4PCyMY7(1{MM%tFG zE`>Vn5PfLNYl|)87EJz|N-U})6Pf~Bi})R=C!QvJZj?|U3t`qrgZ1sqd!g-tOq+3P z-U{9IC?4_lp$Sd-M`EBf2O=sn8P z^*Er)_Gv%J7lrwRNg;O`+@zu%v9pM7i~3U`_|_x=dfIu8C@2E zP{Z54BX}Cd);lj&aUnYu_q6U;6Ia81Eob6XhguI0HlnAx{W}bnUg!aq2v+rM{$uo& zoXII|fEW`3IFl((pt8-EPlmNb&WH9CPgmO(B7QdpFBopgnP9rlU-)26pMck9sRg$L zQ6&ErJZ}_Cz@6Kkrk)IibELmTTv5^-j99*)QOTOrc`3B@jxl+=!61xlAy(KeYqu5* z`};+PiP!tEf@h3tWf;pWneyAiAovtUMKOIlDXN7AY0)5ch7IcKH~0WM2K6{om_VEQCH7 z*?7te*L{n+jIuUlk@I4V>lvogxXn6Fg#qPM)cw~#k$0kmsM)l86;e`o%M^7ecH72H z@}jPYz70G>$0X7otEVDXAdieG#P1^#1ZeOmSXmKVI#WggZUEngXAHoiY;YuW+A`H6c8J^+ZEo z)Ycsv`T3zfbB21`<#&yOhWfg>vU|TN#oeZaXmoHM?r^IJxJxP{}M#zNU+RM zT(eybI4vWte{TS}&vyp2Af~MnMs>4PUaBChxUa?xW_&)SP1vTkf`9AbSzUojGH(YJ z#MdN$JR27>Qt;CBf-h|>yp&5Zt>rPLv!$a@9@-Rn$E1YXv+O12(&!BVangeE#ST1P zV7+$_flt`cyTPeCxTKenz%zj1GD+)KFs2END)|qd!s>z6nT12qDN^?jbuB|tP@L`H zCA|e=niV|4V7RPPwq%`;91$lf_W(MBf`e!dMIc8z2C^$_ZrjyN>amLv3B+ABZ5ia2 zBbD$>(D)E20ThY18EFEnCEC)ax&UW$Iy$c>I-V!cVST_x9=3BkIMgHRzo(Q3Rn)eH zXPJ=>n;7ZV9tK3oqoJ(9hUSr>FubK3Tx7Th=ig}%fn&C`{}F>3_|jT%h_lE>5YnjW zQ3>~KqFo(U5I+h7D$HwuU$Nw5bz#K&dHg*z2tOJ6X#8%{=ADn==yhy4`ZH1^1lIlF z22;(y9tIB@U;H;@Y<;I0EEv;aU~EiT)iNl#o&Qx1yv4l7y=g7CfS~ zrYBc_#vYc?9_Y?k70gHtD^}P&{{cZ6+a#BB} zHsb8YzCxhRnerxeA}qcQArS zV-$BN6z?f2$m`0U{+v#{-3WQ(?O{7*&+O^Wq}Nby*7Q108c+`UQ2tvM46Wd0`xd`4 z5_lX@f-nrmza?E*bv^hb3$B88sOebl5i%LVX5zmI&X(ksyh9kys_U~!DqoM#3jzol zS~u*9ZU2dMZ-J_oY$!L6VfxXq7ic8jJb>~a$9O}}VC(_=64TOP^bpX@xH`(wZsVw( z(I!>Px9;z2zh$MFFgWI zY=q#LD;CtISe8v5C4iySef(3XLUyK=OM8-bec!(3o07VXy%10!bb$lSAXi{F34fIt zR6_Y_{R%HBBgm4=*_Cn*7dv*^{6c<`WkC8TO`SOl@GSra;F2lRT{6vJsbCGQGI7+m z5H-(gxtSlSWde3bu(qS!Se36mZPwMVF#wMYFj*q07!MyGVL{siMoW9o`k#jR zEnkt?LH1G6NgIbl7Q@y;&;yZP2;Kpk!UbV?2FZmnI+Oi^lhH0_Ucvz}Z7onO_D`R{@tb)Ml;B}P5K0LOxk$TjB0vs=&On+ zjA4ljsh7Hxr-Fp7o>^(XBuivuaB31Z1Kb#x6?jvb9+lL> zsKS;v=M~_-*iwkP;TD|a*)Tp?l@FWAL&9y0$A=7i5ZRCPA~Bq_B@n3Ds3M+XIK=J+ z*TW>G=pras6C(MpJtxv2pxiT~qw88RX`|u^1(N~4#9M}4g8$1@j~NvsZ3@YWww4X? zt7+wc?M*CnOnR=L)lubOCH}7M{XHuc|+P-339xJ{{Q%TfP1ha2bx9)jgN!Art5iJI&Qtxw$z$gb1~Rst;%W+hBduK%y8OM2?#|G zi>-v6b6eMjJ>ESRmo+DKTWfcb$rYVzHh)}p{F9Au&G8= zyW#bqEeacMREgOE!E21F?yQ1&14u5PX7hpogw5lWKF@ihd|53xEI7h!9860e0j=&@ zTX}fQJf_u1%jLC#{Ka(!p&_oVs0T@k%JRxMU+Q2|j|P@hJrGepr1{xjk{21*K_K%+ z9-3iQ`)9|azj=|maf$+9Xz2G%9Z2>{+HV(^U$V-kY9?IZ|h zM|3>!c#+x{Et9%{H*@40ld1cORMIK!LubP{5aS8%S511ve85=Fj$fap(!3@k8f6a7pyMaFE1qQg! zyIs`}kQzkvDhAMj4$0_zX7Tt0fJgTX7T*$)KJixYT!62&Y@R#6t6fI!+t~@DTVpSe zSNZd#-a}D06rlCFsg{KA|*jcEUb<2cqW z8HU6u#BiL~>!X408@b3{y`&B-3`%-ZsoI*;*Ox%_P?I4;W`a`FYm?-1ln+Z0#Ym6@ zWp|by^U;Z({s79wkmd~sC+RT^j0OFfKaK<~koh%dd_F+lM_-rrZI$j&$%YN-C{LSo zgxzzYu_I*hq3^^<0^wKI%rx{ZpHKO^*|TWf@P-u|=s5NVLz7{tR_HEp4lR$>D`mg( zdmX1pB0hYA)`fqueT(|rN1U(#^WM5vL5B$?i8WYW50o9MJYdlZ*~SZ%@=EjhlljHq%#9&A%|p*ZHGXGuQxSf z>l#W$ytD9n(hHa2wxI2qN~;;*&3<1(~sViLHQ;?~)XQzXDn*QtrCGA;22h4mmX$ z7peKY&LlmP;}}~vwnJo77(ZE*B((sfycxrsm;=zqDWwI#1P~aK&{=F05EG-_AA5(w zUTe*<5fM97_2asC)2JBf&VEdY2QiF9dJY&Z&`qsI#3*S1MdyxoOC|}1hW4Hw81qTY z>;E$0(oLm{!D(8E-(g0t0$E1jnb(UI>$+K(5`aRV`IpIx;{*n@V;YD{c{tiU#kNso z*`JKK(1sC-ea$G?6>S!4!OI!{z&gR6k2!%+3zB+LHF8ctdkcybZ{sBM=5wBjgk`MU z1-tZhH{;zIi_h;$8Td%owi>WC$f_Bu=D$P4A2o8t`1wdJ*wZp?Hhe2GwZL*kIf<}; z){H)8XUF%ff%q@Ag5%C{MPCi>jg=TW3#>ReHwYjZ+p{quS(0Q094Z43gm$N8!BW7u zh8_IKvuze~cSY?XxfHNGN}P~`ownicDeD(qos6WO(IeYl!o_E8R4uWj$KKj>vK_Mp z40}Ims2p(^{XNrO*nc!dsDM77%&l%^&&hHEU?YL8WgFJ(flJ z1_cPs$dfn^s#<6efb)WC!3-N}2sdCM4{xOwf8-B4JqQzliG2ndFaE^9h`AMZM0n6JQ(T+K%JoAVV-a{STpN4ZY1aI%F*W zgXox2+KXejVTbMwGbU$#x2BDoieL`IR7W%bt0$5}Y1(u8xS^HUI5FE9+L=w?#&rAW z2@d>-uC|3O$4-WdtEmmBkwG5f+e>(7*J#tv;eZ;otKu-3($GQxdbPxLdEYLD-@D$|4*=QnK^} zfU?7s-e~x;Vl!F+V@UHn|HiqMd!4gghVDid%nx{7k95HK9 zBk+XB8>Z!6mDarFU_t$x8+lf*)2)R}j6ax#EosM)8|%0$Or^sg_AvmxjGiXyl@GeD zojE7V`kcaywibonVxoKx>bdantz^U0a zy%U}_HnTu$Q1AlDXJkX-Y9)BW4v5DqE&y3C>_#9lyAWhNJ*|TN3k@xgPFwFYj3c3$ zX$|y{vTmze#d#J<;d%X-O1iIl*g01FW%V4+&AcHkw+@5HEg1jhl;(0H6U)&z@qt0# z<{1N^xePlf47os{cvTGDdNuEH<|zy+rX7fbZIAsb%Hy9f?Pd-S?GL{UiXUii$ecKH z3;Gwha@23$_T0wL!0kPZ*UDdc^ zbNXx3K%N)5CP;{`X#u8fMeQ=Hc>yaSLQU#RvdZB#fz$wRlJhKf_X%qKpCDOt+MsOF z3JxrwH8V zwBbp6pt8YL6V~pa!V7w=s52|PleSokgV?llso#4c4Na>N7oZ1J? z=mreT_`(pxwRApHpSE7cc$!u_XT&bb-$S6fB7k7Np3zo0^Mi*phENp9#wG|D3J&8x zkhw6%f#P9|VgrKShUI14tW(@qU-D#OpJO8f=w$N(Fj7^i*6O~04YfFp5 z-9c{9)AwLk5Dvu-4{PQG1cQL=q@MQWlw%LclDXPhEvS2&L&b3y?319yX+rob{$Ll~}fFeR1 znO3;1Ue+p+4RKtv1Vc|y^p;|CoGNJ@kLSImXF8tov(VWHR0U{M9Ibg>Ob$d-UlaD5 z5M-O~l)wM~&NzQ!J4^&&FO(=hmZL-?CzZS~ek1_I$inCrhYs>sAZ7#Y`;d8)KEm5g zyZ&zFZSI>q&iZc5oDR7iWOEP%}KB%9|cZ935n;!dZ-U6Xq~tX-h}BO43p z5vHOAeYd5x5jp`$N2-@~{LiyZCFW5pVuEmtsWSQ>_`B!@&?w;lCk&Tu3`#9P<~^I) zj>ij{(z{cZT|QVeZFIAa_U{p{8vMz9`7>B;5fV~b!cpls)b|Hi*RhuZ^g?kyr3@*A zETK5M`DI%ARo@}aO~$G%A}F)E zsjK-2Oqljo>ou@9fR1w(hEq7Nz(s?zHQ~I%a~Ry9{GIWzp_?)Bcq>#cC|?OXA8Hxm zut;`bki}ZLptH+rG;~K>5&Q^syNwQD^$ZD+aaGDXtS8a)z`=;Q;rc1$f3zP6b!xf^ zHN@nrWV!Jo`@FVx@9PgaJx(#lh?_MdE-DPFBdam?q~F7!iZ`<5fW>cUKZ#@`U6y5Z z(uGb2LuSW__I;VxjdkL*KEz^y441UIu{MXanf3C42{~PM9bi^ne`)%&8oDqnMK@pNM{qDvU)AcjWJ3qg=FbgAk*@(%m@2Yk-18VT({#t{D?a#8xkqFK+G zxE`Cf(4UTMQ$Q53Bk+@uToYD~k#W=$d-!28yFBs;d)h>B# zwJi--L+9d4hPH&7e{zS?ly5=s_&|%zIKl6lo~}vj6edMbrAHc=0}BbQzUB0uwcF0>xh|sZr?q2A zi*_A=b^&cy)BX0bamC4hA`~7~4+N}vOsYVS!9|JT`Kz?vLg7_3et-vSzNRy7uH(EL zdvn%fq|s7NVO%W2=a%$%LEbqzALk?K5rJxRV9N8qIg?jLuu8Z6Ig;);VH6Jy<1MTc- z(;jOL5?(Rz0iFdZikV+n+oF*IxQvGeT|T}Xj31D!$^F7u%s0}rvoQcWpV5(JQ%Cmg zJ6_;G_`_|xf^LZU>fK?IA6G72rR+)v}iA2d`>V$PSE4ajhciNA-dz zkC`|rWqEDhFq7%%flKlM4IGx~v968t1*{#?B2XJEzGE29&Z!tOgko@UFke**T<>Zd zmbH0Z$9A+$-y*bq(9@C>flC@CUr}!&4GDQ8ek+TskUr$(0;^Uu8ewinn*k??ImCV` zWR0WXCwgNTuw~)FK|zgz7IPbUStKE3bsRNz#queI9KrY>*wqBW0V+>A-C_5-P6acV z)%`rwlRj=Wgu*jQ#Z8@OdCM$vS-d16Z4YS-lmK2Q#;i1n{9Op@xIYSJ?7mRa36qwH zY^)EFcLFUW932K<&FrKnsK#*_5|7-~@90fKdMD)c#ar5X4^iagVPk^y0NONsE(6^% z(k{fKPCzJp$5^3O?>YRC4{m;h&^6`SPP;`G_6(gM+d=XoSi`eMfrl6IhJ$NiCZu@G zPKO5y-WmOXkX~M5jEq_Bl+$L^-Yj-U#$Q(mhUw}j(~e%E7~tVQF>E6vYV4N^o@<=K zvzM{Bk*;NaT;lBrzzVPp?0mgep(HI7P77xZ3SVJvp%e~ zaa2)h_pBMYjw+rfg_;~T=LB|#V2k5!{w~9vG3P3Pt^DS zQhXmw1bD|-3^GtgACuRdq86wa{C7W3HUd*#myxbU8QpQ;`Y}r{e0r1AEK1kU6P8e} zP1phjZ%T8Mc2XqS^pAXyA|}2!sa?2gsSRRI(!7H0_avMI_0$Km79@q(r_inJE)AVQBVY0Sb5XJ(0HhKy!#!R#!w!DX)+9ipP$qAa z>b~Sy&o=g|v`1zCDw}eDB7b|{v5*}4|7HPPGlV%EEwpR#}g>g88*Fa9|#cz9%UZdu&qZ zO>p5II`U?Esh-gXVEdK?-=AgxME9eP`5MO4!mOHerDvnJ^qhoDJz!<#-{maPM zvmJ`g9y+RO)yj*Y`&0%bK$tlHGo^X=Gzs7ny>_lMXnlx)Y zItYRYzy@Ijr=~*pO}_*kE^RH!varR0!$-3S|LQ;T4nrNtSbgN#g; zUV>tV={;M3N!H)vEJXNO$GSP9Bbk`YXw!@*MI5;EH1sjfZZwui*^uWmdq!!@{EF}; z_SnpZQigk89nu~woMGt#rU6cw(tIg#aYIJy zMm#_}7s>%xRZ^AUb5MZLBaC!G)2&GiR4z3oJA!&3a0cw z@;F&kv-zX=!Erlm#i& zRX`I+Qky!PNQaooSlCv1tan8jOAZ^GgCwLWJq|sJrAfwsrn7M$VVVVLK!j}khL^rKqteZfAcz!R6>|JvVp48m=DC1fQw^R#gbEj zy2x5F0TB_F)A>Wr+$*UXrkx=EKA=1J{~YXaVt_$1$ORXX@owc+R?~HDw*QIPgcG~SSs z4+$K4czU;??jpnkv@wBsEQ?`T#taNffb9aN*a@!kE58quLe7DV*N|6^oj%C-8)DT0 z0AfT>7ktO54{HHufK@gOzR`yvGc10eG8$zSXkgsNFpT<6IONb?KBgAAiAX$=o5O^` z5});mb6IvK3{o(K&T5q|iR&g#4~Sc-=nclsbNro-VQ3ZJyTRUIEBxU^N zs=jSn%p0XQY3e(GXNGofe;PNM9X>Dy_-#5Cd@yijO7#|nXW2lOgGU7aXpNBL9B!o0 zi|UcOBh@m)U=tlW<^2`=i!~>5n?G|;4z&r$Gx$%mjVP_5^o$(ivK`2SoKv}W08mZY zz&@I><&2fEtS1&B3!D5!))U+Vj2Me1l%0;~9i%b17}y6jt%L9qrgKIs79E_i8(P(z zIt1u8Em~TprWYt3P)$Xxilugf@|z&p4ax_>-5h{is}-$0nFKHzj;xQY@O4@Y6F z7zZa#1X4L|({N(+0&%^YG(PNE)<+S2AKgXPP|sHz!QP&K_WMo_eFXglXwO>kwPADb z;2xRL-Go{XgBA4>!HJLyv2!BiNAv~bk4`);CQ>}Zr(u&%SkR7g_DejAtcv;9&~eTu zSM;5vb6l=OCe<~$@$|U+reAh-`Yce;;7&CrcGGoctao4xdOOr5(vfHN0G9()G)g4E zI?O;ChKU{sIWVmwhb~E!ZFF_srLM1NumuZ=p~v`Bwj9AN6OO3E-5r;HiaO zhy9Bq3LY1#ux#)LtwWGC$;50iiRHteh~osa44yQIwuIqC%_&%rfoRy^nlPpUHbY}A zMl{H@z=d`KwfIPtvYoQ; z;Bf)0GNt2YwHE@Yh9@9hjJa41ntl>KMo>uF9_q-xBZIi$*Q{b7{wWEZF@;zpCUg)Z zrG)bc4(F`}<t#!N6ZK$GLo7Zq8wdNS z8PmpPjBw6@t?TmXEI1+ezQzWDbq3bpq;B9fW`}}Gnu;~*po3jl4H8C$KO|v3_176K zGZ`&BFgC(znW5vD-m1Adu8{fx4}cLNK4MIy89&#tqF2XP&q_6ILTVCDo|XrL&{w>R{GabVASmecgd8mJcau zH{es?B>P%+ti8~z&jz=eDDhb`xX0A3`QUp4vWa_sbUGaf|6-U!$<}w)^G$L8HD?lu z1ICoaLrjYiQH7DIsh4o%MD<_t*|OT9q0K>0hmA1)5X%Yo4oN1xWWJ zMh4+s8F6$X1o^%D!P7c}Tu1arm`OAG5ZM;JZr(I;X3dxKCt-=oYrUdl5O1Rk!BLgc z2$~>WNXBtAi&m{e!!Fom-3thtwjC}G`G8f6$$w1az`ibGdFgYQkHKzN^!<@l-)d_| zenqHBEO#ch^OYFC!EAyrJBb9?jU%t1M`iD)rCw}`FTj(cqX(iQXz3RnS~%(u z?yCpeW^q1ENN>#9HZ8!?HRnmtqg(*}cE%#Q`|*2K^_#91VT^*mudV7>Af0bVEK_oi z!Y#03)@0M&T3QVK=!CXY=YU4_h+>j(?Sxjxu0M2)@%2@`k4g=o0S1J)Hz9Cti^_f8yEo(%q?%o_WV!z%7?D%K<_=E8(Q#u72QrC#+`_aOF=$UP zNm{Cpg0n3@Jf-1q`AhnyXK}S$N2bG+ZYBUK=Y8(=E!~N@pF_N+0X+1IW_Y*h7t%Tx zG(^f!*e%$I4NdAhkUE`BDs$VhB; z$kj4bZ`GQ92nz$K9Xrpoy%d{cU7>eE4otExYdOxLg8oQ28_F>zMTqJ%;74>CQQi}r z+Y1q$M0Z3q4hu)7oY+eM&<~ZJ)@R7On80Mc_{Hdsya)Leqq6yj!BHkKmJ4nG#t@w* znjP+q7fV_QUwT)k40IBl3iul{y0_;%xr<1d>AJJH8>K({wXxeBS}j(g=t_qn=b9{p zMR~G~J_PwPlc5Z2%;O0EnEKPdVz)aLoAA&Gw25*?w zz}tNl6$I}N@B&7F5H|?};2J0Hn4K4~NiBak7e~zZ%C;RwwqZ)&q$vf12Xzr^w~AeZ z@3!~oHiNjrD?V3s?o(H)tRzjnNoBKz#u5|*-G+7rZnBL`e81wK-WCEKQPi8 z>gJ-;4CW%3&gnmR!ltx-+L6jXL>J!E4?ru7gR#-Ce?*7L)^y574kD8GYMa~qLEpfH zD6kNa?oD5VY$`6r*3Bc_u!-sh;8%bO(8@Hl|5zVjQwupbe*HGvpPMF}beOy;HrT{V zHgtZ{+>?WODr%;H40^f+Ur^b>%bbMM^SFJx3=IN1~jh; zPXgn~%Vuqnh;>W|c>qjK)@JTl%ZaQfP=?pFOV>*wGFE;B^|fiD`bHVc!9L-bMAb*b zMYacnOboAmv7cO~?m(?8AYwBNXQmW$;Qc~`zwwdLh|Lphs633>g8QR+A=YCxzy-+5 zh)so%^tuw%oQ#Emuc86Me-bvrG|7Y6a0J-95!GM=AmgW{Cn|4N3zzL2r5&8+&n#$l zoRr8OCS1=&AbR$673C-na*~&-7D&GVbpWa3tbXNHjc!dkN#u7!Mbah$(C9r_(OY$` z6LxPOCb4Z+E08iUt1n3atP8~_Ma2peN#ar^8$o`?av-Yp(dIBm89JB%7V8B-JL@`y zT}(kI)^#nTl#ruSmqx_}vNWO7SuG}G*A<3Gb)!L+xmL@^p_-scWlCV+v2_ZqKl5sHreMN#qXd2B}Q7fUh zkJwhS2v0bmW!9Z-8^5<~>Ykzcgc7&R;^b83jok`6EWcOL(_tnsxc-3ietki)d=&rA8C2&-XP#0qhsg(%#p_VQi|-46Z$ z7!_$|fC8pXc#V?c+dx9EBLJEJ*I@HXVl#9W79YeyK`d=r6YvKtwjfb3Xfo_6tHWi^ zWG1V_NPbOe{Q}PCOe~_j{j$ z$C!vK#q29@Tm5^KAOuhn8^J5s^|P^W-^J~dIMA3p;OHpo9pd71!D3n#(+6z3zP80m zNjJt8jb5XreFz~T?2V;kL`zKc&+OGu>zsy+A*KCjC_?%uq>B?e0ptlxVj})BN)@y$ zY?hjlG>g?VhuDxhi_Qp+cJfYWmwA)15)fs|Bm$bjz#QQ;$tell2;G6Rn!H@7EdAg- zJ2v;s>0aba6QLpFfLFP((QlwGjvHo+gkra8U5G=rVs6IA1?O15!jv7Q!blIWiptxj zd=~nKu8~+@aLdNxDT=pRnB_j2q%(*^I4X(`#QeD%O6+)^Tk6(F3!EMNh!Xj3p^$fJGAk2F@SS;3;qDhbL>9 z2Aw}YQ9{p@Jey=h@psyMIx9Y}hB4`vhfEk+vE|kM+gt>WNXAe1M_i&|t%WZ)udf*% z0$=H~us$YX=PbMVLB}fQW#FMt1>0#2dMX}J$Q&?*`KnRoRCO$8e#86HuElG2pcuW8}x93LD+7F6E#j@C1NbRsFFt$TL_mae^T&!`2wp3RREz zDVL^DswZ@BIoL)YqF}B$p%u*8`;(mF7g;7^A5Iga80@EeNeLtu9dH@`9G(H--ALs~ zC&ZYa_J=vAV~GN*5jNwzUQa~al+uHp8#C(p-K@!A=ZEcfdy`h0NMtf}(`E`c8zvr9 zrmat|kxWx|6xKYGlvLy?-|cyebm5fwQa>V86ytKv*_F3IYN0G6G==^hp#>3289#?_ zF!Tc6Od}85C})B5>foeUCZx=bqBH$JdPqW?jp?N1murRmg>rxXXVRz{c0)i_Bc zW$Qz^w`AHBXA!wM?bL{QiP(tgbw=p`Y{;-hI9xGEa5Y5JB=FHdz{G~9oY!U8+F1Az zIZT&^(Lbp>()s|_JUq{)-{7;_`gO-~Uq7cbVlL9t#Zxvj^8|jw7KQXIxGU_wGuECx zNE9DcER6lS&gg3i1g}lg`tmqEaibxiWCb+qkb?U%Cd=Jk4K@fK^B8_Ro|?36Bfp@g zgve2`;pIz2vIxb|0h%%$>=?Z601lQH>;L~f5FV1I6Qz#9+B3AZbPt9kP)&-#TM+K#aS75_lCgXWGn=fKzYmOp|YHcr-e(HWDJaHL~%1NqqU&N!1uz!gZl{T z9-kbjpoS;&C{FKU8kJI=Niy!=vXjNR3}7pK0T-;JYS%WxmB_^+Ne4K<&`~UCRQ4Na zPDuYHtE;4WdiILlNIrAQ-k5c%>oMzLc1apOyf#~@y5gum0D>ZNqM0jt*-ue$Lmq)E z%S$vnA2S;z^Ade1DT|C=vldD|9P`j*7N^RzF6t_YIlivkgg%?V=EfWwTs!p|c%Ny% zRIp#pcNe$Luuw#MgeveCd{gHbJc z4Z3~DZl{A--ST9X^vjCNl7pGj!7bsoF1c=*%c61;f3+D_nW8Q&>b#QKw0W|IlZNu# zN%Cgb$O(SxV_5L;b47G!QU&zV15Zo;!Z}FoRnxrnUTKv<*0DJlXq&^ zT5RAM2hr&y6rRVWIwPRh5u8DUpT`p7ySlm-*AN6Zq=bmSdcoEf6RnE#D`ZL0;e4?Z zAVY-jWfZI!TwwTAKBxQhP7XYeL=(!W z%%h0(%xlw*%m1B2o-8rPrwlxkY*cDJ3`_+bTNay{!wD_GU6pqJ*k!^zJ|j>6@ex& z>>mFakP|2wQ#QxMrVW_TSX)7#95?{<_Mv-4Zsy-+tW04Nb3}$$BKS-n5f0C)9&iNf zcEqxA-8!Yeru8ziOI)DHQbS6kcR(J+On9u{;!R`MFt&fZhR&NDpp-TCyP>fsy`X3B z$gf$(*37RS5-B_mE_9aqae#lwH^;+5Vs6+z`AsS+j`S zY3v6Bdn?I_c!ifIXwo=YS_-cGLsZI{cQO%UYcHu+_L5HsK+2UMSW*%Oxhxa4VLV-1G?8F zO?Z-|LMQlH&ANdP!&;P~K+mCoFGL-e`voctbhud$`!*lgQI{qi2l8%Hk5Mm;)CfC- z>SNM65KuE0BKtU_%QB8#UZ3C=-sTx6DgMXHIX2UmWOZXfYmQWgI7>A^jwMS3`0gzV z>$iZaj&$U-UL!D@a+N$-S_uf_^p0&)tzU#n8I=-xF|UV!024yU#DC;Uarv_Tj)9Aj z7BO#eJ(={&vsJ|!2ioE>1!Q0{jc2(xrQ@^C zXMY|c80l4vRSDIaC{ccf4kqIP#x;{pcI~W55?s}s0W|LGPu{U4zLSWS&*~-IwiUm& zyR*jUTrD~h^V_JVn!$gKXkCDfD_K-k@9`Ks)neKy%*U=+OVSgPev zn^X-AEwdekg#+)YX|zzD>pJT`?MQTB6&*Bd-5u_Y)%%XpeL1aJW@*s$d0i>`xSMb* zl#O%`PwV2AWfNz2^&ZUwnN*YpeEbEypYjUhlUeP?KnqPcQ{J*}Y?{}*27W5|elw18 z`Z7CNt?#yoKS=vPR6Gv?xO?1nvI<0Fi+cV4Q2w%;C(|6)zmd` zD={6J7Jk^KXwlWqW=KP42yzle4xJ&E1%OAGj?iy-O)8gT@-T`&#oogUNA=u z%DM-PF25FCESX=pVB%^KUz~Tf${%|U(cerPXmF|1K$=Vv5zuojn$;z290ryZ3^KZw z1CTT^T+L+IH^V3RC(CVc%@x zhW@g*kLg`9gn{^UO=V?bxi33d5PlO;95e3)I=U8s3BycWnncOW_*xdOYafQMl$ZIeD4qgkqVQ@X0?iLwqEEsnD4ugVYBep4x$$U!a(1Hhxdw}?^ znkEKkm4~$Os&;HD&oxre z-4ti|B`B*K#4rZC1Y2l3hWT}E2_L=Vl3?YiHZ5u$?%|IAu9Les6|bYY$Z1`I{n$W+ z&3Ia?sF&-;q&-g*FAMFMHlZ9ONe`6}gLwK^_*XQ45UUF2cl3L0)fvAzC6C_lvbpbg%3xA zPVNy-W2Qz^)=cxIoIlXb_`(RWq1B$i6i2jSi~8$vc1LFu2Xen{?KS&Re)>nXT~!lc|QqAgn_f4l`2hXo;@Y7-|cg zcPu-`_I;xOE})hf_(8n~(HFZ67N&$pVc=k=PT&os#Ec%!>s9Ez!{BO9v%cZsWswPa z6V-LZKHXcgx|D2eK$5e{Qih4Z&pdL<^2rTZ z!S}2MVZgo>1e7@0B%9_8;c0Ps6|7%a1x@fIKAN#5Vg!mgF0$jxT5kfE-x6)f1jPO+ zKmZIRBvest!)?sE{{KTKSRKHzo}y80+dF(8Td20K9C|IufjlIIJfV+B%*Dx#@fpqz zPdTGs$dxm?q~cWdr#TN1;xjEFm!+(yh|oihAJtJLf0Am8BLj&WULqa~2IVZh*_koY zVJe;Un>b*|2^b&VYBpHQjNliT@su2gx=Y`Yi1$wzyX-rb;Ta|BaI7B`wJU5>dYht2 z2b_o1u{I6s6C7StE;D8&T-Z?1_f!>)>=L6O=k{$QAn{l)Kzvj@Z@3-l(%5CdW>~)3 zx-RU)wVc*dD1qV16LykueY{Uy7c~@X>aD0+pl2~dw!Ip9G~$rO6PN}tvq|a_G{94) z+dNIP(YM*Nh?oZpFHZ^je>yU*PA0}wyB&$1{ecp?1|9X2v|5YRniJ-7- zNLC$uF?b(-oQ&?8b(?zxbZk~=ZRcMt6m}r{-#M<~Ow#?a912@E0f>AR8a-wQUB9gV z7t-l8mub5@{*Q08$He?JGBN9RSDgiN5Cs>pO9gFK(wA&opqF%&rHBD<&r-agt6b71Dx6V=jcucUjE4FDadZ|y zvX$o+rF*7zx@Wq3rrq@d!Gi`!AV^3K8w)N$0wK6N!GpV7@DSYH-622-1c%`61bM() z`&3b>SFhmSneKD`|C7Df9@p;yt8jN9$Vg}!C41Kzfk(@X>1)iBMhA?mc#V0Ogu=>;1KhKZe4$dWWL5eSS@a$NJdKUq9&S9XGBC{2=N|;r97X>t1 zC=jB6Es0WPT8KfAsqa7su{9{$y7j`yDbjx#X@oRCr58s&)ZUAGPF6sp58|W;Ug5H& zo!t$v4urmu?mF@^c?YZjc@H3_m%5AW`u}4+02&RQOxjfptr|Ph$H+YI*~xOvm{The?0wGj zO)1Ien=~XD)5@*PP-)+DZZf<4Y1r3LSujrr)&f962i&B)kqd(c?VFZ+Ef*j!542J&y-;^UyI=!1A8RNQ9OzM6+7~$;ZhnrM zq^s4{z#Wiv)X~Cy9ghG7-!n`@_E*dv#yuim4E`AvHR;B*TWEXP?ht^)yBg7=h?QF& zPraPb$|;jQVxTbSaR_kWd++;RT|-IlUJ?1xe0ERia(IMjz=2e^RHl=sV zqOu~v)+~LfnHiUor5KKvwm}BZ-XAq22uAFoK)^`;OY1jP6GQMq?#db+i(%Cl+6g!- z=*q#F4ouxYZOogacVc?Cr|*!iLH*9@;jVUz88|`Nb15=Ob}R+`njExAzvAQMPnS{d zuEOFsr8B~4-iO#X=Cw!9k!vZGTS;batTVfBtb_eRF zo_*;P42=qoQs@&Who=yQYu^d$2|No~>(BSD={mlwjLyp_fy%7QL@;>NX$k?N){*mp z`TGxIh|tsKIrGt&xpXn$jN9d~dP`3esaVu8DbH6oYwIE+QV>nXoewcV;42JvmRqnj z%fT-U?feBSb6ln4F07gPyqs~uGBzDt)Qb!a9*&ZRl6REDie3F564^1$nbF(a>THz8 z^lZ{NKb9|#RhTv7YhhKzllB0Dji#yLR{~BQYB@N*eHZGGV9pt+%h3+YlfRHPDK4up z{d>>0+Wp|~+LKop-)!3BQR>bgL1xE=iTuPc33)&QG^QQQi6gc7{=z(T3NPf{dsN)Q zgTA{xu7#O_gUT2h7tMa|v%EfMBR{1#c!AN9l1PLI4DuN91B`MQJC7_2dya?#I>m&p zL8pnKm-QiTc(&`r9L^XIx@XBLcFcOPY@P-%f|+1L#jfVb=_J@wXx@l@A>JEl5re#0 zS}tdP>>V{XOxJOxF_b{!gH3?bz7=e(z3K+#@`f|lIG8zJNox^(1cC`qavC)Oe$qAh z2I%!*eZZfhvt%Cx+Xj^){5*ILJTT-!4m^^$7ymS&dql9qwTGz_cN`+lmibxG;piuw z91;&wxxR`yB}zufA_G9DF+cBQ(~#K9JHc`KRVg@6mq(1ht`}7$!o07|G0DQk2f>l> z6z0~N7904#ya=vh(NvAMV|pm94;Vj^A%Q566&lj6glT>V@RBq7s;SwTV-L*(+$3C4 zKQLo@@{>(HRj?LotF8_un zGE@O-umi#4UGa48-z13FbbibMg)4z&L)%HjJXUMYaA*pM8yQ!E)@HZ|)SdYD(EPqf zH@M!!?HC6gZxQ!6&1_QVbFHGxiueKMfak9Ix~KDV%)I!SSZ91f%*H4<#);~?6hc{g zQUB>`Gww_P%DB_Vb!k;c*6em=7QF=!AhO5^7f)EK#+S4t0uzRWTwgUKJ|0GZ3TUur zsK!~qu0Y|i7UIc5Q2;A*(sG#>nCrHjuXl79HF!UkS%O6|4CCHotY6UDCH)y2IN2`Y zu4}rbBU_q+Jc4Q*ktr47$aWKyRiBaZ*L4!Yl62Rc;LIyHFlu_d=PlD5$e8*%tOnhX zp6Pa2wSep}dQIxeN!?G2M`~)=BhruDI%8u~ylTJ>d**|C&Ury1_gY%NBKd`zbJ{wX zC27@2poGFp>R?0fwv6rHmN_irJeG7dlc?W9d;--QBrB2{v>|!@muMm29o$MuU6A&q z`8oIM!+eybh?*!sF;aJ?0VPFyK##2XOK|URWyOh;JdoY+o zU=-Jubw<1%$sYvK2VXpvMwI3h%xFCT-LchX%9izKz&l>#;2Idg0Il&4HCKy^=gm%H z$a^h1d%QuQ_^2qcHcz^l*@|l)A!p1B`W+DyQ@3J0ANOv1y{xW@s!B2in;?i@@!$(R zJ7MbX7kNiRe8OZusT~n4B`mq81znb}vlEbqgo==wVOpOdV2qT1O*gM1)hor@a66BOIDe%X=LOkSU~_R z!1zpg61xOZ1TX+Y`X4Y`xU=zSK<^-^2AL~{$b#eZ(6F(CJq}wsES#>#M-xpy zHcPOYjCwi6jFqqgYLMGducCw?R6Obe2(itp%>Z3VN&}`0?09GZDsBpw^x|lam`*F` zWJtzYXMAWfD+^`w+n<>K0sSaf378$BxGr zN}oNWY|k*Cce51sKTJ7~;3(9wcqyS`wXN~qn<-T|P`;<9=Fljv?-?Vp1f|);QkZwN z`$YqAbG4>2`*7aA;U(fiq49uj_$?QWaIPnKU8#=?mHm>`!D+6g>F-aimqU zS{kcf#>nnZ!S6BC8k(ndDS3ujuQA>X*>mR(bpzrtpx+gDbWFtNjcH|8`$@xmP)9sf z(RCm_aE1)E2Z~B$BCHbuI5vZj@Vf;4Fj@1UQ&RTpeTK`U8$74k#(YeF)Uq5515Bx| zbHLHG+{<%uGd$tj+cWI$zr&$lwF2r`n4%COsaxy8tv-l_*|Xz}_$RQVG<6+XPzdS; z_qr@a`9^mK-R@a&e^cxOF-&B3*+4&=GaL|z4`gPXf?myN{ zM*A>fi#{@kYY4%aFph68mgU$v&>TZg4ZFs(u$v+?Vmk+6x1cAu`DiylJmS<~=sE7` z9*^gI+!zdjIq{lMu2GGWP&2K?dER((ks=msOJtvY%Tkuh_X zjLt-wI#LHKanXbc46bXn0(Kv;vC{gosWaIa#`HU6OAW`7|1P3!DD$DZVyK(cy2JuE zf^&3M&ieRA8bR8MlieF$(~gmd%iB*TC8Vyhei~Zwk5=HC6yoe)G0R<+2b%@l3K*=VZbJ1+ z)25YBP;J=pG$J>xyXyKe?LvNxZTLW!M$Iqzyy6e#UrY^gBQ>?fl#ZOyd+-kmrU9Nc zH0|*%bU!)O@WoLJHS`P?N_>s%_v2cSe<7i5F-nlN()aJju~xt!JLbr-1G(l%OJ`s| z;miDmak~k2t~%EGT>TBDE>?i5=7BDXA7)Y?wQZ(7bzsLd6Q4Obzkq{~@)xtE=@!IY zV6b!gs^Wxk%BM?8`V)b3ah;GbA#_f>t&`&Nqto3TlpLe1B&Css+&^nDgb3d7w&VyV zm_z*#HLLblQJa?$8KEZM7tY&2%aPLnB!P#rVm#2hgb7S)Rm9pG1~Yn$ z1DY(C2Em?e&3>M?rQve0r9HLPilYGeKzUTJixhUd?<3v<(XsqLk2A06Bwg z{C1F|xYL;ef`OU}{^4e%99rN%g5{F1(F6m?+K7RBI=ig+P)QogFeduau2#fc9a96h zC66c4Up&YW2Uc)LUP(+h)YZ^Jg9Pz-kknC6o@dZrFpIz$!A>1{HzE{zEDVqN5T{QD zWWi5h2Y7Vd_uJoqp+f>7I|i-?5l0B4(!r}1P+it^cE}H79~>4@EBg8sR(&*G)KSe2iIAe z3M!)tVSq^xdgi>F>Puh_jA>K0D|sCS<-8Gm>lr;u`9IS;u|&YV!Ofc0+f!b~-~gQD z&?n?EW2P#*se{n9upSr$!1TuS1@(ANFO>8_2{@_&XR}5|Ra{LQ({*&zNfF)0VZ!~6 zaEwuC-~Opv>8B_Xidu6_XVB$Aq#QF(W??)*;7U0M%7*#90ShpufAIe==xQo7&a*ax z*rTHQ0wpr>d}STO)Ns;E^?S4G(FcK7uGodVZ_k5|FS{0JT#3;Y&K8NNc&tcyz%9-W zrtR$3@B3C3phtTm>DlhK7>qK;LQ&&xz<~?DiF}oC2EPT7>gXOL#+Cv#|AhXM!hlvJ zoD8f=qdZ~F#}M~(m??^5{V>?AY$(F;bg2>Xvz35b=^{0hFqFZCQ2~$q~I~Sx>dK3;4#mQ8{n7wI9)wAr=>9?O4@E zPa1+nC`5ZHW$GtdKh(6;k2kkK-`H!7T!XXvI9#bLAlX;9^ie^ZL1QUFRR~V9sc$@t z-8m7mUQ?B*&z;*yaOwrGnS#qLdSX_00tP^A zNl2aJ+8%nw$XevfCiHUF1;c*rU`O9Xb3-$l(l8t^9*aY(Y>5d2e?sIg#yyUYt>nrS z_4(m-=j2?JAn#aj0F`fhv7Me}?$GB5V$o7yGOY!>I=kTes9wR$fRUVSC&gP4$AaFW z=W9V^@-chBgcY0LbZpDxq9D6G@wJtC!@@h+ZkO(riQW4t=r)asc0#65g zYxuSB3L(3s6v#TadOtvlR8WK)<6WKBKFo|Ej*P7A*^Da{J4Z>mnm?ObCs@(Zmk7q_ zo!O%?27NH<9)acG``A>gmJaV(@Vq%le*8qS8qa=p$9=Te^{KcLOS(^}nuBC(c#LjDIOX`u9qbIj!B}d1JRfML14nL~brfl4P zG}IB%7P3;_ol*@A5PvW8!zqV@y-H#=;+P3Tr1)}~{ZC`$1c*&~3F+)~LD+>sXm<4s zxKebsaU=d_u|@#p!GLSrxiv3`KCvr+#IwG}nvmCnd3{BMTgVe+Q;k+>U(x`WkOL%P zR)qcx0$5TT6UoE23QI1tHRurIcI0gq%6@n#sN^`i4^LVp9Y?z!_sRPyOqovbgZ==k zq+uF5pUvthH>uB=oWoZFE=3VY{x#k=v}I{sob}+5{$LrJvb-Kbi$3Ly(q9zq1!0KK zAR!Ugk1Xv_?~FUsB{gjmDt7jNu~WyaH=~u(Msrh1-orBmeh}qVn8$l~*;-EChNHoA z#LSa>25&So5zL6Brll=J|93I8FR~;-|CrJzlQy}Yg1Q-rHkhZZ!7?if$xq4V0K*=}wZi1Q2b&bh z;AK5p;{|<;`8bqa0)tcf5(9kBR>H%XTEGkhD#yFj_r(0gfp0cwPFs|Nqnusz9SRn@ zB-(Qv>{Fh~vkye+(Lg?lUyKH_?QF(V*~%e69O({D<&yE0Xoj{zTG;Y@XbUKKle}eg z#3$p_iR=89&L=1(>dhsBf=yB;T;5z&o>>lHaBwvEq}tk`>xtpw)6T>`sjElEEF5|y zVe>(WMvO*c3D;;yZF`-eZ$!(cyda>! zJD0`}c{sN!M=evuj#laGNKQF!wU&t;v>s7p9H?>`!!xEDDu=Q^X_xCAUESAr^w0<3 zQu$2!T5!VbUoMs7klSJe27=5eWm;oXPFSC#q$TKakR0&J!mg-`>4)fp~ho_ z{(a;i;d@9muWGrDcbx~PbvD_mZL^4%AG5yX4I=Q+apSLvS}Afd&2iD8d6RwJOa(pi z5a52C=J0UP!ZTYQ=ucH$%PeZ3$8os=sAtIC*8=e8Cp67mjYe(URoJE!D%1uI(A45un#lf!>vMD1v-~`9+w(gU@+u_OG2Vad(^ls48FeR8@Frt+KO#_ z+W`h)B0SQu=$}iTxWB~nkaTq8*{Ij**5$2EdLElMgiUdZ-6GFL+r#xaSy)0TitD$C zYq2tyG&khEnzIYJ3eTs#!^4EiA8-St4idxKnrrALiD6S8GB_hr5^D%;>e`g?8W$QL z`M^1OPc`h<-vk#KYHwW8Q^Bu;z)q;QTe^+V_i_D|oynA)c1IDA(*gfu$J6ex`Y9>v z_M$#X&H!IiSK|m#nCgL}B4%UKg~5e{ArVppV1tOfkqrQdq>znJYCoQ|CNL7QPw8*W zoB4Q|lg;R5M%8SbN&6y>5hYGb`?s~>m|j641bMijohdu43K-$1w;mU#Sz-;61~?*q>tI=AOZ#4O^*kuO63#5BQFtFHMM8WvcHJY`N);?U zNe=bGP~UUlAV!|lF8FUC9&iCbT4ykk)-e;d;eOn46z*K)dc?I)LXW}sf-gw^3Fya3 zYdWq&p~{^PzNP4g{JmjtxR&N2Wh&P-pSGF{4%Gos8zi^y807LJM3KDip~3BG(LS3} z98)(VXk(Ax(IYV>GnS8?$9YZ%3+y6q-WPlP$EUp#xwviC^(`pA3--0Vg++h^Ed=Y| z4lylm9PJ4$T|)LTTXLYcQ@%}d2s0U?b*(Po=x&kt4JIS&%bj`e_T+f;Vgd~=cz$s! zSvb5zQHL?GQ+~V#0X?f7 z);}q2Qq#U6?_n22K~NV_%K={O0;Vf$pA9_+?<6y^*mK>SBgo%yPXZ^aK8fY1W`YGoFtdjFq?MRrD#3vEzjox>{Dx7yQinR#( zGzN)k=K3)+KyJ)w6Ar|FaI#Oor3RXtB{Ic8RsU#MKrtUP3I^e6voiK({4>yoJo9PI zqQ0tFU;lTMOj9<^{9iZNNyW5>_lpsnk=NxFJzn!>>Jy|*5pQ3xRosn`3_n&VlVFF( zX~(tm*2wU=m(d_kntnr@xfct$QgFJSNB030kpSbiPDE@$9bR~kUE2Xq%EA% z5+OVbU-(6&o}~P_Jr8-Lp?h1wMfxoRN5%_e9LL>Ue;aqk9;42)0W}Sb!@8XiL)tEM zqO^SD7S-$=j)T8sKhv<-sWt8o2+3ZCj2Kv@HGKk_1)DO|As99dZ!zBIu21UuvhS%! z0qss(m$pko zgx^cf3$r_>3cOu2#%uhiB=%pw9XHzW@F~rKi8!ux2q;aMpnO$T%b@m7XiiYTpm-;} zO8rB)@P3aIl(0HNBl5-yVR{}7wfs=O!|_U8G3M9tX~4oslPS)v!E+2w)S*bvB1-1G z^~10+KMrF?zI4DOZ87x)^olNuz-KxV1mfI6jJ%m>LlPTk`Ekc$M~W(=Jjc5O82_== zP70y+|ARrm5tDEL)QNnhEM|DQiEWs+l4HZJ-tOz)5fjK)z@J3W6t#TXnGHV+nO{jP zF)&DmR%xTA2vbh#^f$W*}+(omnMCaYE+; z&gS!sc-OuH0|!1B1oP`j((d|>bUU0I6IdjfJLJVCtqNX}b^-wt zaS3R~$g$Ij_&v>APo^+2Xhn0$Q`K!u>J<4S6^wH!1b#G3Kb!}h2gmY`?2q`M!1BhT_ zLyI1-pi^da6P+T%9WJN76JB=88Ew2p!y4$dAv=!gsiY~&NAX~wdl)iddL(PcJWPau zSvPEz8LzQkZ5Xz?LRwjX@kk)i5i{Qh!Gd27+-$;va&~WwU!Nt7z8}A+BY~d(-aH3EJ(euI{gH(u|mPCgTbhu&F{pN{0pdfKN z!Im~M#kk|U+JOF*tuurU>K$YQ9JdJ3*s2vYjX(+fen;yfbdS5Xzbd7JIq}8~0s6S& z?CU5*{FrzA$1#v>d62YlQqLvzIyhApzzt{J95nC=89`W5Bx%-f9LgLjG8!YkWweDa zaJe#vhGjDoe60CMQsEXMU4m*JZ3W(Nz6?lx4VzoG8d1>KvRXNAW7$#6PBA4U)I-EU zQpvRGZY;T4{Q3;H3+BC_2dpv;QdBDqbZ*uI;-5fy6VycpN?tc`n~>IL%6vx?w2d z=kTk@BJJB{yL#54xZe%*FP1rZT?z;qEGav9#)AbdNYKQD{)|wUhA^j%@M1$`p7MA0 zBEMM47_YTxfYD+w+(i+`OIg!W;|_R4PpqN_^gn?3sMdhT4RE~%cQ}~fKnD0>LhTbc z_QQaCzSPs}P6If%VILny!#pKjSJCZE0|@woUd5ch!Te?gK#iC^kd-paE_#{tH(p*Q zE=lIvx`^P#@FTyEsW=59MH%uG6qj@rMWctW9h$VY1ivT1Fm@DZhsK?ibW=}jrnMOm zW^y#y`XEpWQ_zpr2|FNvt5o=M%qvqjTWoA~< zYP368oBNhacETQ!J;@ZX*a^KG?kiWr-;Qj45Fo3MyZ%7hhO7Pv?tWMuM7dJ{LDymz z8C3&>Yu?nY!+~fP^idP)kuyk^q|i+0tDKt97IQuh&!zdCWx~MzIW61_{-pJY5Ulx% z%(czKD})hWe;jHPoQ_OV(QIN&ZtI1v^K_Q32Yc$?xD!mDM0JA_n|lq~Kh9DvYObV` z4lTQG-U`rF2rrKzEI^=%u|MnZ`7^ruU|_KF>!|K&7deW^vuQi^f!g#`EH@nKfb~=Q z6Ri&$XKs`%vX$dQ7b1em6rP=;ozP#5bQ~e^<9Zi*cuwoiIDPQsp)Ml%2&#P7BT@LN z2-tWK-epbBEnW2n7%e_*yC)&@7PJmU1N5(?J57W?MbaHipgZNS!6+vFxP; zWe4Gm%na6Wc7&<8PZF^jlJ6hFs?OgIJPTkc+=!w(l&{M+8L>LxZA$ZKr0oe}W`56% zo+o#Dq)VcP%6&#aAmg)<=0_(+TJoeF*cgs4X34{Zg{l`%3gahcZECa4tVHE&Z=<9Lr z7c6;LjmU3EY2l15i4Tr~H5`7(&o>j*!XV8vmObrCL&!fs0P;GJT@OP?awR5o6n!9c zmJqecD3L|fT!3m5N>G^9JQRN+Z;0NT9OG$g*-s?Ltgj0zZiSXeYa8~}ZO0%SPf$F~ zC%zj3O~-Wqm^o|wuxL&M7p(2TmB=j3i%?_Q#~jtprX0GkC`rDh9pQ^)eZvx>rSm8V zt4^Uux{2<9OMg6W&DI(uDp2U=bW@l-u*{ePWETp#4{JcDWh@f+>A!qQC!^0oq=RBJ z=EiAl>?d{G@Xse>joN@}opuX5Pe1sX@l(k$rN%rCEASn$re!@zOc{)JKo-~)`(AY) zUF5c5gNQO}P`64p&F+Ax!@4!U8w@-{U`7X$VTHEVpi2hpgNQe$)4;G6j4NCrWpO0a zvnA>#GqB@(4N)UW(;NvQ4>bomtmem{#nzl8YiOycD^P0VjG>8xfJNpI_;|817$y&O z4)k1t0|zepKBqOsgwxV;GfI@5I1)uXOu8e>+?okXb8xm#=%bF^wJiTG;`NGnyLKOE z%Fuw@JG02>gL}>V9UJ!z9%n#;@sM1$DO)EI@pj--5PILyp^UDfcQJk5RS3BP5^&{g#zG+z^8QT6!+w#`qfKHj^6F zoLBKWsZEIHKulmiX?fAMII@%`QHqASATWkFoJ0vUz)==N^bqsqltD6E)h!7?TYGWF z0#Zb~M|E`0xT(xfKz*v(Kep4zKAbpV4|R*-nTs8paOT1pq`}q;A5tk!v!t=J8>rih&nV zYQc$3+?&UfQ^}Ra$^fY3(6C#|%=?mRRE_Zk!^R;B&t?~B8YHg}Y=TFWqdXRj3{p9a z?P0}P@aw1bX5D#Ovq-rt>-35)ML__DwW$^0s!;F5oe+2vdI5|ZqhMo;Ht_oVj2j(b z4sIb7-gNT#daJ?LI)hm>(I{-An7%;djp%F82qb&a_Qw49U&OuK;FsjW$ zuv73C|GqaNgr?WRqZ8BOkmPa2U>^pENZ(k}0cehT%%;C3iLq;!+7Hxup|phQ@ik!4 zDq1_HT*2mC1}Zyc-Q6&BVdX!W^860bWu~kBu`$J6<4?1FV6#B}0qUu!Wyi}*+Q#$^ zwug!qrkcWbA9qOLn`|~3b}8}#M)R7490hHoq~F!GZNv(~b0@S0uXsfZl9+H|*0wX84VaOUd2IX=8-uh^zQwv-Uai7uOVu0$nqIM z?B>kF(A6QFXSmK*EpMAc6x1%q3JQM0%Qz%+{^f8#tzQYA*Id}1IJk)=ZhCun3jrM= zaAhOs6O#jIqgpVxTL~RXPmx{ZfTMJHAJf1{^ zu2Y{G6s<_Gbl*8_gN(jJqRA0A&2g{` zpADAQgla`jCenwB?w}7IH~~1t{+8r|xIRhhJ{CD-tKcIoxjKfDaZuY~iNE9Mja!d@ zJ4y)7W~O;{9Z}cGQ#x=)Z-WXMndp0ZLD^~jexw%|j$&w-RF<2L*y~Bp)^2SE7aJb* zP?g4;g*PKp%Bq8j8Y0$rpg)q65&o?=7frZ7nG8XKEWrpg9Bsg#dtpLzU{FG_O~^c^ zN}BzsF%z?gHmysB&Zl^kQ5n&=qhM*jhs!7Q+l0wdjge-mI%k^^itQ3bHXKQ4 ztZ%tu{r;3d+&b)PN_q*LVbiF$v&a(RkB4iA!;W)2Z|my3&~};FWsEID3xd9e zLEf{Z3ij2?>MXQfpl9$P(;7fD%4^?(0}x)Rc}I!|jD^OHF!=x+CUicUAFDm92RHfn~sAEO?U*y>lfjAwbef{&%)uwnobX z1BsXjhznB&f8SVgsKV{cDM=w_{R#P#_{*w2Oyj5q3)%;k2JkJmTHNtajwn%DR*k=p z*Q=yAK)f-kPJ12<;^xqib|vqi?Jf8z+zE6URoixj0+x*c9M7h0F)+U8}+10!?v+)N&)&GKg{&5-q8%B z`Wm+vjpyKJ1!Lf@B6kTd@km!i?cu%x1{OUh$97Ana{MGMD7yq(E_jHZ?jBQ?Jhi5= zP<$c?J${64j+Pdv0HK3SBx2ec)CbwONY9v-LlZ`y+qQ`MJ0?aw`-YFlU(X~3Vb+We zVoT81SsZNRPUyW5AJc?A)chE`<*o5MuIm)DB#>72Z5ST-1hK4BclY#eT#sRqNSgJ& zBnGgwE&v)aW#|rioAsx)EFMj2Gapr zE@BPfN<4X!x{j>yAx6Cw6Z%8KVF2kcV39d7jp7JA6r4RY3oK%hvEmc18R5G)Dl$BQ zB*TJ1=HubWV+2mjaoe_#GqQG&tx?oXb^QQz0$*pwsUwRr4`FaB%KbCOnF(%m6QQJbrLHGRf;h*_Eji?$pH8r}~KQA1@Cx}Sk_U#G-$ z2@xX<3>%hOKZ~GzTECgGj{8IQGHr7vSx^0u$ySI>7)K_K{)O=YCu+y&mG8;FXqp$f zaK|^&T`*X1-L!QiffnEhk*~qIuT#o$iL9IQuYV~kYD_mEYe9!_EYR;W4Cy=2mgPVL zG900YCi)8ET>Z8)=`aNl8C;6@x6tp9y3SVFVrl`ZLtV48|r5L;VyxCNM7)b@c1( zbB8vFoMddxjJ67qLb>HWU$uJX{0Mb<0Q6+hL#>EsRM9AF=jw!l-53&XQO%y zjz$s)KrH>l|55^wQ8g~1~0y@Ey356v~I-# zKdWKEz&%37EiXK2c7QmW`%b zxT}x*!4X;&ZD-2lKStzmL9d~jAp3XdWBX`~@ud3_F^IV@rah6+VfYGros}nSpnkb% zXm$?ubY3UXPeSL0#00VjxN%Q)RAtbbXmPlCBgSm98Ca&NG#Xd*#%U#|bQS>;L;aF@ zO3Or=O+)oOJKBxO$^!$8HYJ2{eTKPiiv9csS>3>(olycmBTCYg#q$Rfu!XsUst^!9 zb}d4))7I(zzNj;LdX)2NXa>lBEWs=KD5|?B%rx#-G)y>R>wf%CW4b)&tSdHNyCVEz z+YW#y6tHYSBos*Y&No z98Eep@@%YtIc*lxWFnZ?#^J>KQ`mRF^hn4 zj_9V7=3&cR&VZe61hFAZ!I~o@zU({g7|+j6$SsJj#<7F*AZz#X6R1hREFn)}i`UfV zeY?mXDd>Kt(kOcRIy$H25&uu<0LH{s^X*zuT^`l$d6Rs5Y}Em_7G3BsmDkSXvCODR z9t?o{sP^Ko08GfZo4IgO3r*@H5|O(;wwS?xK;;l|Sly!VDC)s!`T$x{)bon}HoT{e z!(6X0vkd;}ZtOXt1~U2qaS@qe3`RhQVBDi}tTW~1iuoC?`WYK&K1ZiUbbZCY6lDg- z(z4TTC>KEbm-fJ9!;VfzkBpraj33L>CZUaXH%+r023W#^qvW|c+oQF!E(-VPYd01j z2sdJSJ*z~;Nq1O<7l-Fdx6GTKamv_jGrG2>qY38>B^Ai`DN862QK!?fb|<`i{{cTQ za}qlj^%&TFd^H*84&NH_WQ%bNvUo;dXAd=r{F$W?Hx|&uF$IPL0_S-tSY5}a zGz&XL)UDC7u(7kQ)$#0*d0OkM2|_t<`Qu$fy&3UgL!JLz$&c9KBPEcXP3p*wL$WZy zTutg0B}69J#<2R&>xNWOwtrMIlKkwh{R#ggWQW&~(h9Q)tOXq7WXBMpLNf~`CZ*1V z7Rh@9kRVZtBxsVzQP_bgY-@7pQiEmAs+{e0W9McYIScnkqHmqH`cc+$?DKmzOnr#v z3z{Y_D54%1iSQ6G{6h%DN(+h>Xla6Z6!AVO9R_TN1<_E)VlbJp5r)0h>V4JHCXli!b@AQzue<(~ zzT`b3(i>6}vyGZD0iTmm$vm&2pC)t;oiySB6myKn3OXx1ug?ZFlOi%r#kzijG$!SU zwA;EmkQK|A`r}sdJm2NC4SuI*0nB!SMQtF!7WWn!#u?qixRhlVlDru`0vVEp6K^lA z?36aHn%}h}kwaNM1jRlREU7av6sGhI{)kYFybf0h8HD`1_(qss&ZvyIv#DtSe=!}8 zD`3WP0c*pghEreCYXsp@nMW)X1{6&&_uvm@rC4+JGVtwPn4i7!U3x~di3$ywTWRK{~NVaim*ngk^On>4&MqPc!D zW6{FJ02x_r06wd^&cI=`D#?gsu46f_s84`8nRZ|t$CXJsH!T@+8r<2KtB4$Ca2T`R z{ZaO>Ol7-z9D@>+IC%0DE+uBN!7?h&_)FmK{|iU~Y66tS30*?g2+lbc7n9nAH#-~+ z-%U6{$uT#*30;s!LD}QpnbOij-^^Dg^fMT-Iq%)GWqXs~0-w>>ePkUI2~-abvFUKx z8CN=pdN^~yIc-_7?D@rv>B%#gB*TXd$rvqhmb_$CjRSL!kx4SWc#1~4WRCqi&EQwM z0;}evYe+CGs}Pn$L<^*HcwnSwP3kugAYl3<+v#Wles5CH!PAj7L(*zilLUhEd9-X? z{xdi@IO;5p*f;^?ApaeMEPUgNrD=a{IvC-%1N}B)n!=V?)YxQ*CUvW;ji?Rq{+Mr|D5jBrVe)@|K03ck~2p&D*E)-Nl+lxMIDCEI;v$Ec`_y-9|cu769L9)(|!UE8R$^- ze^ZV}co};K2v0g_I7qDIh=fAo(NktZOHtZ@^apE>Ar=o$UH?t`Weu{17wl{5N*We}Y#qrNaW9)8s2O#{0hVlExk?FfVs1)+(Zb`gyMWrwQm zYaFCI7Q9qClE5ugW<4E61(I=M!aP9LNk^=DP;yvYivpPe01`E6bFq{zfawUvDyruQ zZUBUVM3Q9%iYV|y)4_v|$v`~vV^N8ob>q*l4ow)>%@AuI`r@S1?PkN2JkVJnOsEJb z+V~j>`K0yWriC5B{1E0DxO9+vd}GAIG1Co2qqupYroBItTnKt2 zzOkTx6N<}h4x{|EgM#m5x<}{DGg;wXHaC%R7dnMAo7#yO#By-Eb4xQ!Ia#Q{G@}e) zW0|#2e8GzT7kA?ECmkJ)eGAqJb`Tskh_&%;uuEk9h{Bw+={7@0n4tvspAke-cc0gTppg22rkyff;YCI~>=fWg6h$z=%a zjKvr5UxrZ`LmxN6M1gS=flWb|PooUd8aQFR^%{UHpfxY+Fy{88Ck*s)RbS#H##hT9 zLyQ)$D01;h{R@CnUGp{dc!-6dy$0BGdP$d~q$=uG5;#bvV(J|7vA(6Q$r|r?EELz4 zz8N#^;8~tg_|pjdrx@^hOw%NL1La~zzvh=eV24CoTWHz()gzn%D1*t)e z1xg$#6C@#=J2O6fm2*_)Puzd(8oFLZ?E#6Y2#UAHb*F1G03{cy#!GV<{@AZ{4=a0fQOKsi7}+DFLMsGKRd$kgNN{* zq-(ScgUhV41(Q^6!f3^hPeY6W4NW!P!lrT{Z(!$?+yGq!s1;(%wDT4IMffp`kgQIo zs;L?(F+ub>$@Y_a5koUQEM{ScHoK6p7_*7|f+M7c0V&f#v}q28f0M z0^I-^nCNriD=^q*LCv(Pfh0QE&4bVLQrepayyjGj%YkAL=}1x*J3*W^SRv5Ua9ZGF z!y`0wPW)2reo~4vRY#>Yp??;Ay0P0X0C&h}wTdT|S4=spiAmOvJ*%TJEWF7Itz;H3 z3XmU2pypP>lv%S$fui$;o(?5K7Rg!JJtLRY+@J=gJleUq7W_-M6Xli1+!MT|$BN#| z{ckAtZCBPEP5T*4Z8ETW#$PQ;@>7PJ@yn>2^1s9^fS^w3WsOO#Gi=4e(h0V=Pk*tH zmVQ7?|4Z6z@&2UMGnY~lP*d}M;HYmnXZ2RBuW5&_?a3X>FEL?e-uI!6;BqtEm%S$+6kRjuR4_Pvl-AiA^mK}pdUHgnY7GY8SYDII9%@K8U;`RmS zFZ~OG5xUxz-fQU#_61>xz+Oz(ISyz^d9`TBWBP4OBWj|wdr*2!D6|l{&u19{X9YVd zCmt%M8LfjkYNYG)x{;U|yeu_kI=W+08>0wn+NH_YnZfan-NWYu`_8#OtA($K90RyDIQ`gZFC5BpeN)I6|VZ8|RvSdQz`$^Y- zcpOP$K7mLDE{(pPiLqq&oOu>pV7e71DU7lszP;EY%@KM-U+Q>!$@$+Qn1pBq>JS70 z5VtYAVSK~AI%!Ad6`&EOJg=D-s(ResgOyogk_iC2kU3IM2Qcd8g9xQ`EGD-i_^xg- z-1CsgsXAG**BvYgi10}=S7=gz?t+{L!iB^YTQbQsD5$%xTXqDs$gp>$B{BO`%*E{~ zeSvEO^axE>jG`sDN#~3yo^n(wbBl9;t264!Ym8DERY(ZNUYW*X!n1+zsMeeIhMi69 z$e1h1b%t6mYkNS7kCyC0_!-E|F|!et(AQoR9aK7~kZACk5KXv1g^kS4;p(2vMNdE- z2dUE5?|Ul1=A-HXq7<F=^u)c8UEwS>CK6hFr z0#ZmjiRe&N<{*oT-tC;#2`Si*(&-+|X-=!FM4VJO;jrGJZOcrlYl=3P6OYnHz`3UMDi6kl9^uEY2LEwF z5oLUrp%0wFqz+2E1v!Z#f1o|GUV2={@CIEEcC3s;zpe-N)ePpawKT^N19%^awIyva zP&=k?Ns5}*|6oLv9fNfZo4KNMlXpOv0c$M8CbO_O7*1Trz8U_Kt>d1>GMn0^qz?i5 z7p*gSr|l`x#(YwsFH+iwHY%>iqZ&i)OgeHWI6=p=1SUBZ6(zaC+;ZV@gc;*6ee1NC zx1A6EHDl$?69oe>SLEh`7Zb5K>oETUYcVWGEC~ml$U&m$8P>FdhqVL}WmLZ~!CAL4 zSYcNMEEbF!s~5ynX(#U;Sk(rcGYP{cry(SPv1J1^=G6{Nl;tA2kc}|*JKS$6J%&Xa zaWt9-HlsQJ?``8+WXg`V#k;|R?tzxTypMa4!h%bbfEo7hph}xon{LJa3ey9Fkf=lF zLD%p=vya$>boGLcLdD1)0S`6-(_?xBwEC2ef=9+)62CveI5qv)c3{azQ0>z8{$Dt$ z6HxK7uV%)^@+Cs3p-F`MBl{!~0rETnH5BkU(}6b5=(ViV-uGjDfEynb8{=R!eo(y; zqmgMrgAj3a#5X7esCc-cp|S(?0r}5GSJ4wtG^T7hrt#dg?490bAQX6x*#b`(g@Ean(Rgyn3^_lP?|q!4kk`N~s{cU+cLSW=%9 z^;fVpXoUy}tJ|vmA^-Kji;(+)YJnt9>&2wEz^_39X$H4wCxQalgwwoD5k%$P!)gpu z==WlpV#8W6BN&!GMeLRX2bq=`fnmPI?Ml;toxkN|oB5`+DF-kM-K07^9fW5xLM2Fi zN_}t~Y#^6~9c_t{ zlM0Q3b3$Ka6{8E7G0tK+49>ma38fiycZ27Z0KYcSW9;K#*cLq|=P~|o-B;l_HA#53 z0!=8kb;Fp|!-a-nFtLcf8h4V>BzAg&ymF5CW8AwHwFV5jm^;El2$m+H3@;3$jjVpi zYD8E=*(W$IabD_k!CqjN;1fp()^m<EeYkvz&i-V_N7BqHU>ay4NtPV< z?(LGg7s_9-2beI^_>GjFBSi%tK=|4o-GoFC{7oN%90r#^qZ^ySVFvImTD1NED9uR( z4q`z9SdH+IB80TsgqYACSJpX@a#|Mr|0N`FJe1dVEC?vM@=jbs4t^}F1hSOSl!d<% zb;Gult;buz{*{F*Iz)DpMN^U1N27!n1R>g_ z9;VpkfkISK(G}g`Q-9|3z;K?@P1qEf>#!gmw;cQ@Y`7vvxl0g>Al9X%z*`(g&uxA<=27oO_yNIAWWhUy1$k)IM6Fm(AaoiK|B!EjY z7Dq-$(efP-S`5#`L%>{+oW{Jnh2NuY$m>?(EEpKj%F<~u?G809*XDI54uhyqaum`p zH?=h34UqWimZMyhaU}WUFmiEbWVJE3D3u`LfHiGF2TRNrE&7BW&1sRc#%oL}|48kR zd6TTXcJQ9f*E}2EzDx35bOcboI@(+D2-m%X1Xi!Yew~L3=?UvymK?2qKzPFim0w~@Nf5HYmuiGHqW}yM($^ zy3U{#hhQDmLTQT|Hf+P8)TRW}bCwMBN=jE1oxlCRl$(l0kb^f(tmHthqB_U~=UbV( z800f9OC~t%p%R7~JUU~)=j>era&`k%lF~ic&WPnJYGWiTurt8`G1P8&hM5E&NMaa^ z39>msM+}_``xQ%SzBQImM6xo*ATR>nK;JdNUKlOOrkymN?QwLrT{Wk)P*1OcDx`O4 zJ3x3-mKAxO4^ydYG1doIL7E(*hft$c^$ln?e4 zle!!m4~#|xU3`gkomw~6aT`Y87#+}uV7Fr%j*=JR1yFnd&e)-|I+#+C%#^g#KsNzF zNPq&-1w}2=bHV}_%)&V6>rS1e*yO;wspL2n1ZHpaeYKnx*M)IQ)J_19MzAreK;S7+ z?S^oeO*TOydEafjpn*u4Cvqr~(Md1=HMC#23cnsuC%62VW+z{YX$sYS)H{06WMDLvv$LJrjO}J*|3HS z%N>S3bsl1=#vugIqo?Y?C{V_3zh;0=!_C`;Wd;9rC>qu^583)V~+fO~4&Q_SCzH^V|7{s(cC z1f1|SlFLH>6!BP!0eY-!VeQjp_Gy1cM?hKzT$a$a%d56DQ#4@dBtvv`IfONM!xe+7 z&+WMTfPU5ng9{9WV4QWvJZXtIFc31 zLjO2$Nd&VMN!_7!R~;Xh^l4oSM6Ccmlm#`_1%9y!?bQkPHdAo}xG6;brafCaFK=k| z)x0R|5*p^Y-^lbU?(Xk|g6>A@$8MFi91(tWnsLj;Q7Iq5%z(cEsuF^uaf`a}X3fP& zGpYTF&c?9K(uv53svZS**RpRpf~pADddYE2G(`}!ULY=<0ULwEiuv2NVlDepF20Y%lPvCUXvtstavCj;JR*!f&MkG**%W5G(9Xdk^m_BlZ z|4e!x&oTE!UR()Zu$MqIf{TT2Ga>YUXmB3v2DfPkv``p{7?cw!)$tjDg%;Dz7U=Mx zz=ulyhv^Ma)3RA-^HSGd{ObH|yaEGn6@F^krbw-@dey1G_?%bA0u4_Xa2kA3)+BiP zBi6#~Jp`-H?C#jIX~t=g*|f70S{3kdHTXjB%xEsmCn3dvmCFx#?L~Q{69nGcW8ooKZ~Edbi}Lo1-b*v5A=DYuA!*${;Fy%hte@!gDEnZ)vgVl zkC;1*ZljmJcFfs%b0GC(tAiXZ2jg5fV`nbt=#hO+)K~|jC1@F%un3_Joaj@!c3NK} zi2)gbPlXPu>@aTB0*5B8Z`&!Uy@>+>am(TgVMaH&M3uff6+8p?kgJS)FzvA%3-lNg z1FA~u#e!Z!$3#*S$m?)lxolK>kZedGJX)lJD|Vu6Z-OmDas(LZh}Ob0$6A7)5wd#L z8AR;aH(;ZHVwyA-?7xIdVL1X43ZWPP2=4N7Fpr5OYYaWGUn%Xm#a4(OfU3oHFEDEy z=M9_Akp~@3*T?{dT_lL4n29K7vzdzdqetn&Snn0~%?XQ0{)qZ9s&(opCI1Xg9Y;<+ zSl9f)m&)!M?#H*D*BMPMI;PFpND)CA)vkCQs`gfW*4No3uZ8F8I(3s_%P8&4hkRbo zFrvoUSTywZJ`8d+R`9r|t#bNJ&x^trnL%B1}a4=;fzgd$+{LJJ`9x=0c`!?A0FQp zySi?|Z@@Brqn*nf{}qO%U-BQ|a^NGwPKol5z~_nsxfhOWHl+0!BGE~uydC&zXvohl z$o`tTucZ$ec{!T{H|i>klhFh);vz~J@Ej2z5Dv-Gp#vhdo*;#oRtvQ|dz9>fr-=Fs z{v)nD-jqQJCcG$`HgbM`)^#ca&-oCO+gzr_3L49zguQb zsiP5KF#{a4VP@s7yP)?{e#md*YG^s6Yqf|26INiP51PMb`}vxz42GTyze{UJctqLk zpYy05@^0^uiW8&8jRa`muCmyF{We2b#sFhf#7m24)~_0lc7(-m+aYWwMWxRm4}L!%l(=(sWFe9 z_vUK@^E)taqRujykCq$`!gx%Rmu9XB9YZn2gFMt@fWC-o0T_bD zuB-*{E0X^;t)-Hlp!QJ!6q%ueu7y5qols42m6ofUgkZFwldlVkq$yAQnfld zg%-c3O3bFC`M@`?Dt#2nL2jT+p%+4;k4~? zW32dOOmmZ$N0EY)oe&IW$0)LAGkBl!(-O&)WD`_$F1c(7eTqT}H$Dqy?Hl9DqI*ag_x4NT4`DJl zg18tHQy8pH9;c882OJbql)C@s*8 zvb9XW>kRhQz5U=q{XAv18ehkT-1o@h3%aY|>>=J8UV&v})~uvLUiiJmF)hoDMV*0Y4>}TN z0k}c9TziH>Z#)Wi(33^OTfge7jY9?290+QpAy{U?Fj9&j9|3b%Ht^*}N*6Ng088WH z8R_47?B?vV_C&#f_pjzqw=H_wE}{iET3G5=v`1B2x3&GySqAfU%`atC&wOY>qHUs% z8eBDrN^0(umg8t5V+)RLS6kqxWGF|o2b2J!c+c{n9T^G`uZ`7=Pr2>&FoOC!pray| zC7vT=*~`)tY(4w_UMaa1c?vr?j*gtxOu8c3x2SKCRPnLU?)J^auOjXy7O-Sx4KpaZ z1&Yc0hT3q(U-nNuGYx)6pcec_v;cq+yB^~_Q}rxpB^qk{N_piAM#pa7R11MH@LZhp zNCwJIUE$j~brhs+c6=8ICpm<4l1Ptgx(j`O(sw<_?~hs3xEZg=w5d}} ziJnIK-SoKgC6=k!QlRH2&56a4HAmEtgzdut-{pN5jrcE~Mb6H;Jnyy9PQ*{v^(g{R zg2B)%A+M@{a|rfxa@NCOJsA5Cb2sTra;_O?A+I`e=o&rWvopFMJZ)&8L7Pm)P7nPr z!cG9b;Abbyv~Aeq{A3n}IW#HK*^%fEsVC21UYK)xb_8M5B#e*i@r0(J#FrHdH`OfHL zCeTgAvRa(kTwG7EAtj&;0eDI)O?g#_=io)=;RMOHB#J@&yEA?QzoGKQo|N`23R!&tbX{wIKRG{6$PA2CkF;Rn-n{O94)qG$WXu*>+uBMY=Rm zbWNsevye=ng2=hk+nE!E&Xm%Z4Q3c?^l{F>niB~fB07fD`JqxI^OX! ziZ?{$NiBm43FaFqK~P8uHvIL{Bo&mh)A|hp2#JHTv(ok11!5Q}y zYk#UE3~{hh@UMhkz!&kUf|tP|3UxfDEs&!krp{|_GKiyY+WsE#*oevdY!iB*s>gax z5TlidBeOy-71on)M!_e}2LCqiR*IF)AK0}ZXAKub--7@z zXii8HBde7VjdjV!#4k@oJ!I=is|V0%FNd0lsUmYxl-M|!8rpZp$q)~A80St-X$Mx8 zq}_~b@3bB#1R>`aYZa#3eLWNp&UTvoPf=rF&fp@V)n}PO5=qW2D-bN-A%qhw?thX6Oq6mQ6)VApM5@^Sa`4gHusoiqUf_eh6O5KUZ zW4J|uX0WOTL^QN)?^xzDA#nO`EL9O_r{|cE^F5*+0Let$AEPIfpWt4`?JJ%mXVb-R zcyY?wF5KCoQ9NscmCabe^w#ajA}DHIsMC-;@L5MxL!&^hDk~%46!chZfp{001EJT7 z>RF(FNe}5C4u|J|hD_4X+z>MB>Ok&qIBD`(Fl+p}s1wR2L%cmf?N43DGJ^Ha!vuCy zo4#$!b(Xic!BRi?))U%AlLki~17DhA7IGdi%PCzlW4%ut=SGu3_FVY+IsNc0 z*FBnDsvDf5IVX*e`p>{wE6Y|aMfeEOPs2>UV__a~j>6ytG5`=9p+Z^*!{7veLK{4= z5(oLv{v!`Kx1j$cMQC6x4A!eVnkIs?aHeyDte}JA0Om&rcY9)e$80h;!n@Mmx&L0zeX0OTJB*Txh~U730%jOxLvKcNWZrrcLJi zA+E_f(B)_X5eAOe+al{xBvbsO!x81yv|Nm+*ubOyKr03GHLK(4BE!t1v$*TwE|-nq zT()Zm=?XX*;RZ31XU|G!+SQkFol(#$(-ti-6FIM<*_+k~ZVNJ#+h9u3QSh{uqt60%_z>lOud-)@ayo7mzIw(>#I0L z^`~0!YZC{5)$_P~cLdx?ZBw*rc2+@0Ai3g2?$}s89%>c4I23sy33Y3@$XK|>JYjwY z8A)YodL!fH>2nY~wd};$nTIWJ%ioeEo!ZnwEqzPgbJwI!gD}Cc99;slnv&*fS`GOw@(KV)(+)~xIzOxA zK`S9sOLX*T-1aT*iu>W*GjxR~7dGs1jwNy=J8r_(V~|EzM#F(y*S4M3dJj@Sw1TKm zfxXlAb#wrekfD=Rn&=E^^E+m$eufVUZ!Q+wDc!}{$D|Db6p7sgjPnwV>tccuLh#ky z1geB1yhU@q)-H}{6E>WjLR5NSg?VB*Lu0xYB6dc*VD%e%4E|CW)QzO~L{8^%M=Z{o zFdpdFaAVl&fRv?xrB6rnM!%ENlNF6|tPPD0IW6SyUz{`>fT#{&8<$kHQ&(&Dbvl5x zhzUXy5NTriC``j%wT{{04->iu{VX#+Cd@o;aZmS|8mxf#EtHGUY|S&&iF6Av^9U(K zuu;^9OxJ*MjA_lRW~YIn5wBS@l}E+H=zRtOqi|u6)saGU`z{G_!V_9h#}6r zfnB%}ejQ|3p}c%CD2=E}VLjlRMNJ7Bf9Pj*{fvjBM4Ri;a4q9;B`4ov@d^tg(zcIc|>(ntvv%Z>Dij35p6^J`D^<7KJtjmvs z!cZfA_apg-AkAs*0Hv14o(ND9LnnfWAO$*3luTEi<YreN$dk+(QNCwWpR)AH zISlz#faEY};$GF=&Sobf9yXSftlvKxX&6&JrT=DKZGKwNsud@v>`dwcf>mOU(2@g* z=$TPMOZq9&&%V~eVak*juV&1E&STlxK{N_uF9v<>0E>l$l!QKKK|C-J98Slm&B!=d z)gp%s?`6mPu|JT^)$!={JV1S2w`8Z_g)3>hiuaZ`(USr;A>BOUDsvr@=*)6ldnndvur=$b&IoH3pD7aNoPIv71?m>Ca$zN^8-8~GAU?0p zP?E)F12Km3Z#J|H3MAH`V(_}@Yai*Dz;GesVAN&u0_5UQYWSbk|5U{A~Dwrh|aZfx-S{A^A7XB)Z)hdJ2E zmY;FfSYJ*#-@mDCp5Z$x;_7f>tT)m=mG8y~H1-GeZ6kKK*7PV$xRmxLU7{Z+_mDE2 z@lq;Yt=satZm17a{mDZGSAcI~#}M1!)zsp(L%5on2M{eq-2g`hYaS@CdA$pqpg2L1`=b)qeRc|sRk9RPIB ztsN|Q!}8osw4t+`rYbzKF8>DJe&Dv(CnI0Qo@!aPSe|u%^3x+1_uM{bRXC>Tsf^*Ss2XNo7idF81m_X7jAVjxx6ac zaYdQDwqZML`EIPCFQDU!(+CHlX#pr;OreJ-qh%7KdEEmlFe!MgU=?fY4g#rU!UFBU zFpDh@a8OR0iAEA>ExFCtcZh^Tm{9x?DzC=neav2xl0qeKKk+CcAdi5mx3i?lr zX05icFb}j7`x0g^F3WtLknS0W*h2zPM=|ByG=U<%8)FQrCU+Ea`*fLtF77J8*adJC*dd0N zfp$#mSVzyUbe!)Dm!htDW77;3=KG46*tfX)sVfa^A0V+FUbtiku+^Oh_sYg9FB zlg!{1W&dB!atvabBngZ$c%nyIj=;SR>y5VHoNaY)bd|*qSFk|&)vC)Zujt30&~a)O zXtd1QnEv&O@!Nl5ImrH<-rPvPrnQ>$kiRj}-n@VQC15=)T~X!s)gq7)m{5NfgSZ0|RTY;j^^ zry}=XwZmi^7u~eAnjhNtQFtpbOFDhMIbcL4-=Cp-^iCTmPwEse>QeQ z_Nx=Ef~ybosAIUt5uC+k{R0BuZ-4K+|LeHYIZMbOMUj8UQK7Pny8BeXoP zt1=F!<~u4v5e&Q{B9DnZt69@m3htR;#M=XV7}I@C`{#VtpGy0(!oj(IU^Midfp@@f z;RGa@N8YbwO!5F%@tpY&w+;-vc_vBFUV}bc^{4gUwmVo^fbEPlgKU5fO9^elghJd{ zBwjMsJ8^DQjg`I?%>dX}PtS9)N62gIx7x*@!!ezmTfR`g%xJp zexANj9)5D1ASRe{pyqL<1kX3n?HR+Hv4|{$I#1CYZVb-qmN!*@!`U!xIy_#RlT-d( zFLbmT-T?Nll)lEf!d;EkUP@P`T)dWRXx9jF_kJp0fK}jjXxj<9JkV}bPQ*mwQbhNV zx+i`%H>R!W?qG+{tbi8Qj;Syyx#$ob{5TREiG998kvbikSL2(VpX9x8hRLj}qkN~P zb+V#+=`^MZlg$gOlsQK+LzpNzht)5~Ryp?CiBLCGxE6I{fX->N2LP4yZ|(LHe@ojo z>JQcQQ@)x5*p2ET(g8vu;fT2z-Ve?RNDBN(QZ^f4GbjJ*wS*r~os({dOH@&&O(Cw1 zlt%$U;%6a6Uo?c;k!AL8U?v2V$t^mk<6NEt?SW8Uac$4~s#2k|%@5$j!i&u3MtvsD zi1=sFgLnm`9cnmT_Wt5vMTNTFJJhqG{xj5NV;e{i>_pTV<&0n!T3*+(ag%%ibsk6| zY296N1p%kvG)Qh({dpZs=~o!0?Pr_rD()quPj#xIy4e7xb@!w+x| zz&kA%=y_(Sbz@HN&G5Zw5XRn_F$VKg=uT7ib6oVv-Mk1Zl&Vc=YoxK7-nL=we?IUP z4Wk0Pt~E?KGhVonDaV(&c~-BC#0Bvj>I$9|!1}1}oO1Xz2__NLj$FkvAOTv{{*}50 zrIw3oO3bo6Mn@p>@c-hFaLF+%oP77OZta`-&9gZ*vxRDq<)DjYfdC^{>(~%TO2R)Sy!-Jo>U3pLph7{m(3J-a+<}4x)**V z27X21J%**mxW(dc1v4#V=s6a&LpnZ)hDgCjdLK^MOk5 zn|#6T?wOIcmb63nk1SZHBWbOa} literal 0 HcmV?d00001 diff --git a/data/pickle/graph_100000 b/data/pickle/graph_100000 new file mode 100644 index 0000000000000000000000000000000000000000..49c5e9db26f5b23fbcf7c5b9e218d907caa8018d GIT binary patch literal 3726332 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

FPUe+vg#IMBjD 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

Y@P}qZwMF4cem< zx}pbqqaOxh2!>-6#$o~{V;W{+4(4MKmSP1~V;weP3$|ky_Tm5z;}}lh6wcxTF5?<* z;1=%SJ|5vIUf?y};Um7_JANV1mjHqy1VSSmA|eW+BNpN!0TLq_QX&n~BNMVB2XZ4H z3Ze*#qZG=b0xF{#YN8J6qY;{-1zMvWI-(1@qZj&O00v_iMq&)cV-luf24-U(7GepO zV-?n712$tDc480q;}DMGI8NdW&f^lU;yP~PHtyjep5QrN;VnMkGrr*`{vgQL0D>bF z!Xg49BN}2N4&oybk|G6CBONj#3$h~@@}d9=qZmq}49cSts-gyJqaGTf37Vr7+M)wG zqZ@jn5Bg&ehGGOpV;m-83Z`Qg=3)UBV;NRr4c225wqgf%V;>IU2>!y~IE{0-h%5L9 z|KdN~#RELXGrYtbyvHYe#Si>O;BNs0Lr8={ctk=}#6WDsLqa4$a->39WI$$QLr&yD zeiTAclt5{eLq$|Ub<{##G(clCLrb(ldvroq^gwU)!$1tdaE!uOOu%GJ!%WPYzRvp($FR zHQJ#gx}ZCHp)UqtFot0y#$Y@qVJc=|Hs)a=mS8znVJ$XbGqzzT_Fz8_;V6#dB+lSG zF5xP!<0fw79v|I6@&TA|NuNAtvG=J`y1*QXnPoeBt%6F#6~}ZvArwUkltwvJL={v=E!0H=G)6PD zL>sh6Cv-&*^hQ4n#1IU}D2&AfOvW_K#2n1WA}qxUtj0QQ#1?GFF6_kt9L6!6z$u)? z1zg58+`ui|!F@c!Q@p@yyu(L)!FT*ZpkDz5MF@mOI7CDgL`N*dMFJ#7GNeQrq(>%X zMGoXfJ`_X|6h|qPMFmtwHPl2M)JG#UMGLe>J9I=BbVo1r#Q+S(FpR_)jK?HQ#SF~G zJS@Z#EXOLW#RhD~HtfV6?8hM-#c`a(8Jx!@T*YL`F2kL>$CNA|yo$q((YqL>6R6F62c46h<+WL>ZJvB~(QX)J8otL=!Ye zE3`!ibVfJyL?86WAPmI_jK(-j#1u@&EX>6MEXFdd#2T!}CTztH?8ZJE#1Z_3zi}Gp za1mGV5B|k}xQhpPjAwX>H+YXv_=+F+jlh2b2!@adgYbxisEC2sh=+tog5*erw8((W z$cCKAgZwCjq9}pVD2Ixug6gP+x@dsLXoi+(gZAizuIPc@=!bzAg5em2v6z6#n1-2{ zgZWs5rC5R0Sci?+g6-Iay*PlwIEE8Ag|oPT%eaOcxP?2ok4Jcl7kG_#_=qp~j$a5A zC}_a`Ap}Ar93mnLq9YdKA^{R38B!t*(jybHA_sCK9}1!filY?Dq5>+T8fu~r>Z1{w zq6J!`9Xg^5x}z8RVgLqX7)D|Y#$ytuVg_bo9u{H=mSYvxVgoi~8+Kw3_Tvza;y6y? z49?>cuHrgw;x_K#A)eqlUg0f1;4{AAC;lKv-~fUn6v83`A|o1NA`aps5t1SWQX?HQ zA`7x37xJP23ZocGq72HT5~`vGYNH++q6wO#722W$I-?tUq7V9G5Qbs|Mq?Z%VhW~X z7Up6B7GoJ!Vhz?~6SiUpc4Hq7;t2l2-#CqPxQHwG2mj(f+{FVt#xuOc8@$ISe8ms^ zM&KX;1Vc!KL3l($RK!4R#6vSL3PwZT{J*r zG($_YL3?yUSM)${^us_5!ElViSWLiVOv6mf!F(*jQmnvgtiwiZ!FKGzUL3$-9K#8m z!dYCvWn9Az+`=8)$0Iz&3%tfVe8d-g$1em58bDBlKxl+RL_|S!#6nyoKw>0AN~A%0 zWI|TtKyKtiK@>r8ltNilKxI@zP1HesG(uCfKx?!^M|44V^g>?@z+eo+NQ}XFOu|&m zz--LJLM*{@tioDsz-Da2PVB*c9Kul?$4Q*Qd0fI(T*pn^#yvd56FkQ&yu}B6#y9-L z9|Q>&KyZXYSVTZ%L_jH6jKf4s!F0^RTr9w1EW=8y!Fp`MR_wrT?88AE!C&|r zr*RG!aRvY2U;Kx=c!0-vhL?DQ_xOab_<`RD96W$v2#GKVk4T7$7>JE{NQfjzj#NmC z49JXZ$ca42k3uMl5-5#wsE8`4j#{XT255|CXo)sxA3(qp*GYFp5A;Sq48#x&$0&@& z1Wd*>%)}hb$097n3arLDY{V99$1d!}0UX9LoWLoZ#RXi(HQc~0+`)Z3!c)A!YrMlp ze8G48LZA=<1VsphMmR)76hucX#6vgxOvMb$#yl*<5-i6mti=Xw#y0H49_+^< z9K~^*#2K8&C0xaI+{A6%!$Um5bG*V^e86XX!%zG{kdOfcM<|3v1VlzO#6%p#MI7!0tkkX2!rs5gs6yt*ocRONP^@@g|x_k%*ckE$bc(kO?DsDkRK zg}P{f#%P9?XoL3Xgs$j;-sp#c7=qy#g|V1`$(V+jn1lIPgr!)4)mVp(*n;iYg}pd{ z!#IW$IEAygfXlds8@Po#xQ|D8iWhi|cld}e_>Nx)6gq&Q2!YTDhlq%R=!k{5NPxsh zhLlKy^vHy)$bsC*hk_`A;wXi(sDR3-hMK5@`e=lvXo1#fhmPoi?&yWS7=XbThLIS9 z@tB0En1R`thlN;z6D(i9ZMuCV=1wg|LW#$cToRh=ce@grrD;)JTVn$b#(1g}f+$!YGE4D1-8-gsP~4 z+Ng(yXoBWwg|_H`&gh1o=!5o%86+O@!{V)(iFdU;W z785WT(=ZcrFdvJs6f3YA>#z}9upPUw7YA?{$8Z9ta26ME8P{+Fw{Qpd@d!`x0@e6^%1rQV=5E|hS5m68wu@DytkQm935^0bgnUEDZkQ@0>5JgZNrBD_XP#M)w z6LnA@jnEV=&>HQ~5na$7z0el}Fc`xy5@RqPlQ0!CFdOr*5KFKetFRUuuo>I16ML{9 zhj0|faS~^69+z+x*KrfKaSspi1kdpbZ}9=2@eM!m2SLII5FDWp77-8`(GU}H5Fd$< z6e*Az>5vgwkR7>@7X?rl#ZVGuP#%>~6*W*B_0SMa&>XGM79G$T-Ov+#&>w>^6eBPi z<1i6ZFdefn7Ync$%diq_upXPR6+5sS`*09P@E88ZX`I7FT){v17yscd9^f&a;U(VS zJwD+pe&9C(M+hJoLLv;pBNCz_24W)~5+VtbBNfsj12Q8Uav~4%qY#Rs1WKbEDxwOi zqZaC-0UDzjTA~fwqZ7KK2YRC)24V0w!Y`W?~NJV-c2O1y*AnHew65V;A<~ z01o3APT&;I;sP$?8gAeg?%+Ni;VE9=HQwPPzTi84AyC8sf+7S$BOD?k3Zf$x;vxYO zBNRWBN37!1yUm&G9nAIBNy_b01BfRN}>$PqY|p3 z25O@o8lnlBqZQhs13IG{dZG{dV-SX71V&>VCSnSvV;1IO0TyE!R$>j-V-vPw2XZ{6^r&0R%%xgh6;jLR7>+Y{WxC zBth~30-m^3IxR9FGqNEk@*qD7p(skAG|HhOs-QY*p)MMrF`A(z+Mqo;p(}czH~L{9 zhF~~GVJs$KGNxfB=3qV+VJTK%HP&GxwqQGUVJ{BgFpl8_PT?#r;4-e^25#XF?&A@j z;ssvg9X{dAtllvJu)FHav(SIp&*K&I7*=` zDxfl|p(g5}J{qAZTA(%Bp(DDWJ9?on24FCTVI;<2JSJf(W?(kvVIh`aIaXmUHefTh zVJG%rKMvt2j^iZG;5;tjDz4)uZsQ&v;t8JP72e_lKI0pH;tzsE4Inr|AuJ*wGNK_S z;vhZ}At_QIHPRs?vLHKhAukG`Fp8lh%AhHmj^Ho+jng=Xi@1V+@Gt(uT|B^J zJi|-8!FzndSNyHsnMeoG|a>t%*P@u#R{y(I&8!i zY{xF_#Q_|~F`U3DoW%uP#x>l)E!@Fi<=CS*kp<&eBQ!+|v_?C0L>F{NFZ9I# z48|~w#2AdnBuvE&%*H${#1bsWDy+o@Y{oY1#2)O&AsoeVoWvQN$0c0Fb=<^l+`~gW z!E?OATYSK0e8W%tL68^$1V<=@MFd1fG{i(4#780|MGB-wI%Gr^WJfOKMFA8>F_c6Z zlt(30MGe$OJv2lUG)F76MF(_7H}pgw^v56!#R!bXI84M8OvfzD#R4qGGOWZJtj8v7 z#SZMoJ{-gm{Dr@98s~5kSMU%1#ecYq2Y8HUc!@W7k5BlDANY;HF#`yOkO+hDh=iz! zf!K(Lgh+zqNQJb>fXv8-oXCUxD1@RYfzl|4il~C>sD-*{fW~NsmS}_a=!CB5f!^qc zff$0}7=^KzfXSGKnV5t5ScIimfz?=tjo5g6N2axJZD+NQRV1gY?LRtjK}f$cKU`g5oHJ zvZ#Q{sD_%TgZgNMrf7lIXorsIg6`;rz8HYP7>1D;gYlSzshEM;n1_W}g5_9+wb+2o z*oK|hgZ(&!qd1O}ID_-JgsZrYo4Ad8c!(!>j#qe#5BQ94_=!IV5<7t42!*hSfXIl3 zn23Y;NQ9(Ffz(KcjL3rQ$c4NpfWjz-k|=}nsD!Ghf!e5thG>H3Xoa@ufX?WKp6G-A z7=)o1fzcR;iI{@vn1#7mfW=sbl~{xI*o3Xvf!)}LgE)e}@HbB594_Jt{=vWa4|nkZ zkMRsI@doel319I8zY#c20KpIvVGtgX5EU^H8}X13Nst_=kQNz`8QG8%d5|B4P!uIl z8s$(CRZtzZP!|o*7|qZUZO|T_&=oz<8~rd4LoghpFcuRq8PhNmb1)x^uoNq>8tbqT zTd*Cwuonk#7{_n|r*IY*a2eNd1GjJo_wfi%@dB^$4j=Ia-|-89;sy{DArKnj5D`%j z9kCD>36L1ckP>N-9+{98IglIqP!L5>9Hmee6;K(~P!n}fAC1ryEzlb6&=FnG9lg*O z127oFFcM=h9+NN?GcX(Tunz&=wug8Qstmeb66+Fcc#&8sjh#Q!pK~Fc%B37|XB{Yp@=h zuoXM78~bn&NAMT^#%Y|xMO?u@_!s{L5b(s^)erC(&+rm&@E)J=6+iGBf#U}d3?UH) z;SmW@5d*Oi4+)V3$&m_akpY>J4LOkq`B4Z(Q39n=4i!-a)lmy|(EyFn3@yKc z(F48F4+Aj-!!ZhDF#(e?4KpzZ^RWm^u>z~H4jZur+p!CKaR7&L3@303XK?|SaSb{Mp z3Tv?eo3RZ$u?PEc2uE=oCvgVnaS2y(9XD|s_wW!;@Eou379a2#-|!QE5F}v$!4V2! z5do1A4KWc1@sS8gkpiia4jGXJ*^vu*Q2>Qe3?)$pN(E**& z4L#8Z{V@nbF#@A84ihm2(=iKku>gy)3@fn)>#+%2u>-rY4+n7sf8lSO#yMQX75syL z@gMHu0UqNSUg8bj;}gE(2Yw@Pq5y&+B*Gv(A|WbbAU5J5A(9|DQXwreATzQdC-NXa z3ZW=Upft*%BC4P|YN0L~pfQ@ECEB1pI-x6ipf~zqAckN#Mqw-_U^1p*Cgxy17GWt? zU^UiZBeq~Wc403L;4qHi1Ww^BF5oh*;RbHu4({U-p5g^w;~hTY3%=tQ0woS0C_*4K z!XYA}AUa|pE)pOyk|8D1AU!f6D{>$=@}VG#pg2mQEGnQfs-Y(8pgtO*DO#X4+My%5 zpgVe@F9u*RhG8VeU_2&aDrR6d=3yb0U^!M{EjC~?wqYmsU_TDwD30SK&fq*Q;VQ1< zCT`;%9^wg};}zcG13u#$e&P>;BncomLLn?7ATpvMCgLDI5+Ny4AT`n8EA)25$TA?jEpfkFmC;Fg224N^hU^K>IBBo$EW??QCU@?|q zCDvd)HeoAvU^n*RAdcWK{EgE%hl{v^fABB$0SU}49vznEW{El z$11GF25iPQ?8F}I#~~cWah${%oW~_x#dX}oZQR2{Ji&9k!dra6XMDp?{6Uc90R%@V zghd2IMl{4k9K=T=Bt;6OMml6f7Gy^*6W|iwAg&XLyM>c#lu`iXZrmz$pRZpafXn@9OhL&i9_UMGJ=z-qohk+P^;TVOnn1IQchMAay`B;Rd zSb^18hmF{R?bwCAIDo@Ah7&l2v$%lExP}|Jg*&*9M|g@Cc#U`Xh%fk#UkH>kfS?G0 z&Y^hakKPX zEWlzc!%D2ddThd0?7(j9!$BOuU-%oRaSj)81^?h*{D-@EfX8@-mw1Es_=Kdtih$KjkR7i^q$c${ri9E=ULMVz7D2;Nch$^U#TBwT#XpClP zi8g4DPUwmr=#73Dh#?q`Q5cH}n2c$di8+{$MOcazSdDeqh%MNTUD%5QIE-UBfm1k( z3%HDHxPe=^gZp@dr+9(ac!!Vpg75f+KxqO9iVz5maEOQ~h>lo@iv&oFWJrlLNRLd& ziX6y|d?<(_D2`GniwdZWYN&}isE%cIb#M=#F0KivbvnVHk-q7>`MqiW!)V zd02=gSdLX#iw)R}ZPU26i8zRlL`aGhNR4#Jh%CsCT*!+8D2!q#i83gUN~nq&sEvAPh$d)` zR%nY3=!|aYi9YC$K^Te=7>#k5h$)zkS(u9jSd3*@i8WY{P1uSZ*o}QSh$Hw5f8#XH z;Ucc!AN-5|a2F5o7|-w$Z}1+U@D)Gs8-ddW5DXy^2H_D2Q4s^N5f2HG1j&&KX^{b$ zkqtSK2l-J5MNtB!Q4SSR1=Udtb3O;dvO4VaSSJL3TJTvmvId@a0_>EACK@9FYp@g@DX3|9lsDL zeE>lb0-+HO5fKH^5espV0Ev+dDUk;0kqKFm1G$k81yKaWQ3_>I0hLh=HBkrk(Fje^ z0YzRvp($FRHQJ#gx}ZCHp)UqtFot0y#$Y@qVJc=| zHs)a=mS8znVJ$XbGqzzT_Fz8_;V6#dB+lSGF5xP!<0fw79vPoeBt%6F#6~}ZvArwUkltwvJL={v=E!0H=G)6PDL>sh6Cv-&*^hQ4n#1IU}D2&AfOvW_K z#2n1WA}qxUtj0QQ#1?GFF6_kt9L6!6z$u)?1zg58+`ui|!F@c!Q@p@yyu(L)!FT*Z zpsWD|MF@mOI7CDgL`N*dMFJ#7GNeQrq(>%XMGoXfJ`_X|6h|qPMFmtwHPl2M)JG#U zMGLe>J9I=BbVo1r#Q+S(FpR_)jK?HQ#SF~GJS@Z#EXOLW#RhD~HtfV6?8hM-#c`a( z8Jx!@T*YL`F2kL>$CNA|yo$q((Yq zL>6R6F62c46h<+WL>ZJ1AmE9sq^qI^YNH++q6wO#722W$I-?tUq7V9G5Qbs|Mq?Z% zVhW~X7Up6B7GoJ!Vhz?~6SiUpc4Hq7;t2l2-#CqPxQHwG2mj(f+{FVt#xuOc8@$IS ze8ms^M&RrL1Vc!KL3l($RK!4R#6vSL3PwZ zT{J*rG($_YL3?yUSM)${^us_5!ElViSWLiVOv6mf!F(*jQmnvgtiwiZ!FKGzUL3$- z9K#8m!dYCvWn9Az+`=8)$0Iz&3%tfVe8d-g$1eoR5kOFcKxl+RL_|S!#6nyoKw>0A zN~A%0WI|TtKyKtiK@>r8ltNilKxI@zP1HesG(uCfKx?!^M|44V^g>?@z+eo+NQ}XF zOu|&mz--LJLM*{@tioDsz-Da2PVB*c9Kul?$4Q*Qd0fI(T*pn^#yvd56FkQ&yu}B6 z#y9-L9|Xx6KyZXYSVTZ%L_jH6jKf4s!F0^RTr9w1EW=8y!Fp`MR_wrT?88AE z!C&|rr*RG!aRvY2U;Kx=c!0-vhL?DQ_xOab_<`RDoGXA}2#GKVk4T7$7>JE{NQfjz zj#NmC49JXZ$ca42k3uMl5-5#wsE8`4j#{XT255|CXo)sxk51@{9_WpJ7>FSlj!_tk z37Cv&n29-HYBjATfOG)Rw3$ch}ujeIDGA}EehD2ocHjB2Qf zI;f9EXo?nSjdtjWF6fS4=!*dujA0mwF&K|Yn2H&gjd@szC0LGCSc?tVjBVJ7J=l*! zIEv#qi8DBlOSp>bxQW}ihlhBA=Xiy;_<+y&hM)L@AbA1^j!+1T2#Abmh>19ek3>j{ z6iAJ9$cQY+j$Fu#0w|1PD2XyCk4mVD8mNtWXox0gj#g-k4(N<-=!rh)k3krU5g3he zn20Huj#-$C1z3z_Scx@Qk4@N$9oUV1IEW+o3xDG@&fy}i;2->p|8N%%@EFhV5^wMx zpYRnw@Ed{i1`rG(5eDHA2~iOPu@Mgmkp#(+3Tcr6nUM`Skq7xv2t`o>rBMzQQ3cge z3w6-|jnND((FX0&30=_xz0nT?F$BXg3S%(=lQ9i5F$eRp2ura7tFaCnu?5?)3wv<@ zhj9!ia0+K}0he(NH*gDga37EG6ff`^@9+^{@EyMpC|>|U5dxtR4iOOr(Gd%AkpPL2 z3@MQY>5&OpkpsDr4+T*K#Zd}nQ2~`v4K+~*_0b4T(E_c}4js`2-O&quF#v-x3?nfH z<1qqU04Lh+1`*8?IaU3Uc2Ip}JS8*LTaU1vW5Kr(NukaQh z@EPCm6MqmSe*nP|3Skiekr53s5eM;+2uYCwsgVvDkpF$L2x3v;mmi?IwV@jnIj*fxX#08li$ zWw&g%T3WVk+qP}nwr$(CZQIy;zMSX&hPxcAuofGz8QZWEd$1pea102uYCwsgVvDkr`Q$1G$hF z1yC5pP!eTO9+glPHBcM%&=5_~9Ien69ncxw&=Y;oAA>LyBQP4{FcDKQ9kVbO3$Pf= zuo7#q9-FWgJFpx3a1cju9H(#=7jPNZa1(cMACK@9FYp@g@DX3|9lsDLPXIv?0-+HO z5fB;C5EF3_4+)V3$&m_akpY>I1=*1kd5|B4P!uIl8s$(CRZtzZP!|o*7|qZUZO|T_ z&=oz<8~rd4LoghpFcuRq8PhNmb1)x^uoNq>8tbqTTd*Cwuonk#7{_oDXK)^ua1}Rj z8~5-KPw*VC@D?BN8Q<^|e-I>Z0Ko$YIB}tLSp0=Zh>949jlYoqiIEH`kp}7U5B^0q z{D<7ghk_`A;wXi(sDR3-hMK5@`e=lvXo1#fhmPoi?&yWS7=XbThLIS9@tB0En1R`t zhlN;z$ruxc!0-vhL?DQ_xOab_<`RDoG*Z2 z2#GKVkBEqZ=!k{5h>t`_iWEqVbjXOz$ch}ug}f+$!YGE4D1-8-gsP~4+Ng(yXoBWw zg|_H`&gh1o=!5A& zj-1GY{3wK?D1p)_hl;3z>ZpafXn@9OhL&i9_UMGJ=z-qohk+P^;TVOnn1IQchMAay z`B;RdSb^18hmF{R?bwCAIDo@AhLbph^SFeoxPjZahlhBA=Xiy;_<+y&hM)L@AO!*l zj!+1TzYqyg5d*RDHxeK*k|8D1AU*!UzsQFFkQ@0>5JgZNrBD_XP#M)w6LnA@jnEV= z&>HQ~5na$7z0el}Fc`xy5@RqPlQ0!CFdOr*5KFKetFRUuuo>I16ML{9hj0`pa2n@u z5m#^>w{RB^@EFhV5^wMxpYRnw@Ed^(1`rG(5eDHA5m68wu@D#WkqAkV0;!P>8Ic)T zkpsDq7X?rl#ZVGuP#%>~6*W*B_0SMa&>XGM79G$T-Ov+#&>w>^6eBPi<1i6ZFdefn z7Ync$%diq_upXPR6+5sS`*09Pa2%&_78h_C*KiYea37EG6ff`^@9+^{@EyMps89ew z5dxtR4iOL;(GU}H5Dy8F1j&&KX^{b$kOkS16M2vyg-{eFP#Wb>5mitfwNMug&=}3o z5^c~PozN9M&>Q_Q5JNB=qc9c|Fd5S@6LT;hi?9?cuo~;I5nHewyRa7ra2UsM5@&E8 zmv9v~a2xmV5Kr(NukaQh@EPCm6Mqn-Z~(y(3SsdVA|WbbAU6I+0whK3Zf$x;vzm0At_QIHPRs?G9xQ;AQ$qY01BfRN}>$PqY|p325O@o8lnlB zqZQhs13IG{dZG{dV-SX71V&>VCSnSvV;1IO0TyE!R$>j-V-vPw2X|$;}-%I4In5&AT+`u0wNRWAt90=IZ`1lG9VMO zAUkp*5AvfBilPKcqZ}%t3aX

Y@P}qZwMF4cem-6#$o~{V;W{+ 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%0DDVhgro7xv-+4&xY3;tbB? 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%0DDVhgro7xv-+4&xY3;tbB?60YI~ZsQ&v;t8JP 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

Y@P}qZwMFHQJ#gx}ZCH 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
-2 ze}W=AJQl%w$B-+XV2%lwuEZ8GE6gm+XFYIJ>n<_mp0muo#NVB1@)X@vOw%n{@(GFz z5irA^XETuNC1BYV-189&^;u~V5|V+PAJXG9oxWhLm?SRU&S!UVtFwSrUD==qoQE)j4}!`hI`Z5?gi`$OT}DS4x)@Y zlQz3qI-7@HF*SXNSfuU5; zc-L$`9ly*4`QBfUgC=s!f}>vYiwVQrFh~WhQ43x;PuF`4n80=GVW84KdjMcA~jFo(-z=Y7m#*xHE$vr)iJX#Hj1g6xk!z=A!Q@er-VL$O9EuV28t9s>TW%{2*VF<8Kr z&(S~ybG^!)Zy}oc!*05OrOPwnHy(xv`0*->JcpUgJ?qHVb1`}-q+Uj%?Oi^Mtz!i| zn2?w71kXIhTthO@m)#}o=2m{qU_&_~b1y&D+J*-5G>8$vDD{=o{P|)EKfYq(Savvr;~qjg z)mY!`rsQ(m6fQ|epbUclTH&+mWV1Pf$S0}xhdJoJ#@v>`vW*vVVQ0q8$1gSKizl&y zWUG403Yi@H1Y<=D*}4XUL(!w9fcCa1A}$EoEd)7|#KEuOKVHBAh1l2>xy1yWP?qIp zpk*xqSKWn~E(vZcyDOE(3u{51O%|k2En2le8+Y39k=GvKKT*EbTw#hl{6C_y$3VWTWq zbr8_GpoaBY^qMan_%sZ5jfHm83$MgzJJ{uVW1?i`Kp0Xk@_cF#ylk}DF zJS#YLCxb`QQIZ;|8I;&tLndNa}VhB zi$7QMPy%P4Dm#ueS{MzvfC}fqKALkYc zboB#k4TYASj!s&4uPVoZos4*ZWL4O-uE z;lms}jpN=UEJSHFP(WTdDWeC4V=6x&S zHfv_z!*uQKtSWfaNm?i%FEig<*b@L>6{xXkMCg z{cE%mH^3hew2I}k6a3bQ`+Zn8hZDPV@i3YM@X$kaQ6slNA6j7@xBkU=bbxf3YkWoaa``b6GtE11bDQ2l5difm%L~n3NaoOa2>zGTj8s+QB7f z@Ihs5njKF$FzFRzM#~;ol-4;o?ZnR8;G;b0x0tiPBEeI@&vA6w#cl`aQJfj3sHl2T zsuq*t@T0weldj;X8sx$%ky}czUTf^o)yLXSvLdB(1j~D)gWALjBjj>R+%R%=bj#KL zpZ}3}umjs>3nBrp(25y3Tnv`Kz_2XF7Q(T1Qn%0mDPA8><9)pFfU(us!IQ-g(yund z5?J6qPnz;tQ)ag0moPS3%N=i6bRo0fao``CPUgq$Xf#9`7#AYPA7P+2%(ppjALo>> z>_%>w$>mEW<{jI(V|f`VtX+yHs?#xw0VUadD+WkM-PUupF)v4PZx?p_4Ffe_YvuKE z84Z&2Ahr25I57o6%dl4i2K)9;J<3iY|B|}FG;wxJb`mwZl8ye%8P$>SpOr^MFbgtiBE5!vYCJ5nsIhZ=i<+jW{t|@b;%;SU|^u5UtBQ}qx>0z!L&K2=+)IKi?VP-`B&YFjN zF;6+XSLMua7F)fD_tp$1}HLNlQVtX@_M0Wh)sG zjJ2@|lF!&ZKX=L5)^xamPNFI#lp*j4ti=oHa^aSSXdN*(5*tyw! zco7A~_^{b3{}^9GJiKFR1bgn(J6&aA33-+F4vJ8oyE8_rZHXHu>Wv6G-viL z=DcACYYvx0Bo*}j9w;FKkN0Y5uD9h=4;Eg<>>BixzdFa#_W+#Lb@iPo#cQgvcTJ2k z5>V0;c3*<;+U<51QLV02Y3wS9sWsp1M9-cAwwldO(eygT%f;BUIe%QB>mr`t$UZws zm%L!ixS}@F@hF08$^H9U2x8KKCdct%l7M69b4-pLd}qcHbkYZG6EnaArP#0*Kj!Ki z-5OoGz8EOf4W_&_0Es%YzUw&hJX(qj&|)r^e!*s$dQ>-)%YK#WS2`urBx}nhet5tY zWid}3;LdQNjyl2JFR@l^l;pQXJLOw-^(o#(>1rk~kz*TiN_X0C;hlG!*^F&`B!nOb z8?tz9PR&8It}QNw%B6ye(0fCcB1@g%lAnmtF3eK{Hp~%6)cieBYu(U>rm}6iC;wbR zq%Z@ky9w2*DZ+~ivcOM}7Mt1W63)o{@PY|D|7O>JY+Z{VqS)^?Birz8cg=#hVKW}7 zvFNDA!bu!i++Zj+zAVG*0W47 zu7=!nNEu$d2G4#)K@mYs0IKKhu~RGES&qXLL^r>pa3h7BcRn8gvnqW*c`&U9;;#yEw6`D`U0CNlKC8_$X~DBE@mYAn z3O^C(B2~_)cl~*iBhDg3CWq&H^MW6DePz2=Yy#f8%l<&QYEtvCuGS>?<#327{9nEz%ZdF7s4 zvECc*Oysy9XsaBNe^$zGWZEU3oWe#D_UDLf*yG4w_^pySD-uUli4IH`#3d6s z@)8IAWLye+q_WBve6^Ctlox9NSLqd+R#ddTT<(j^F|aVZNcISQk2@8NOy%ho9q1y- z1^Eaoluyq?xacdQ)uvCGg~1L|rN4Hns~c?&<3gx_B~zJo4kfk0h!HpGcHmD3ni_MYmQmZ@&qd}8yTaOx~z`9myy8)x)Uk){&# zg1Z;f$A*P`XflIuV0{SA7a07Se39^JYQbKWSyLe<+!RqvaJQ96x0mIBg(|3QJ>|Lj?K08Yfjt1BJ&tYsYP` zkW^hj*-CQyBeLBEtY3jv$8kGMz(X4ltDPCIwyv@X`zNt$HV;~1o|rHc2^Q*r*ZD~m zhKj86dlft@C?y+J#h;es>O^D~7w}b4mRc&?!TD8oDs|<_gFJgxK84{@Q7Nm^nWDJ)b9KpTTn& zshw}(uEt%ys7YGM*f@Mqnc68KVC-q+C4YoqfDTLQI}sWn{%NLR*Ds1-xoM0562Z{%pn(E?Tk!e6gQf4Z3ia5qxTAa-@?@?ynPU- zl!ad`q zH(BaCdwA1sE#IcGyBEVFFhfL(!$%@hdWgBL1t~BMCqo2DQVA;Akww?B#&@>K`_~zz zg|?s$UB1G1uz+JavdBi9Q#N%sVcojiHkqM6IO0!!y2+qa2IS(~I4L&2h8xDxs--A9 zn-0ciMe@FK)%RiLRJ2w(v$Nvm6f_mt#<22o@w1f6D}N~&=gc}1usE3kmK+7{8qbph z*gX+7m2WQ&O9n06t2NSPojt*zFjihP7o!xm*jE3I}6#KkXy22Ut=- zE?1Ndc?$*!5w(2@??^5n6Hcmy4{CjO*~mo`(c!Qv%bq3N@(#^Z;Rd(m^<*|V!IKME z@f>!GGeLD_)Mas+s6SMytS`j{H}a1m=j`L$A28HuHK-{UL(vIDPLoPSuCVM&MtgPx~&wBxyWfbI9f$Ot5GOlR&FY(mS|ghetnCd!ZMDL%+2lLs#E-R zDE8}+f>bL@Ril3sc6OBz@VxX38%3?TaStO;!d~aIdZ?TM=E!&*#ON2O*g$Bh+1&pH z$NLEAP=aUr!&Cap&eixfl=flFl%-1{B0z`J+4c|4 z_y|~crXIEKs$Qog_|Kn(7t&=Cw$zpZ)>q~nwc~)vm{(sw!-IVM67$sZ^livNk1?*l zfY*Fz8pfsjSlO5%vO!6uIJX%0wx(wrPN>hsH2fPQGcwwI>WIq_|5^=b%g4pGrp`C?YA-esOA_68OTGk zSZx_gJx8X97kviuwjVE_<@s_fGL|lTcv^C+9cRpU4KZEp0p668T1Q>DY5@FodW^=h z-?6+f72GV+?C=>o3lXhGs^Xgia+>Fh00e9B^&ObFN8ae|Y6Jp15;1T{^rIxp+pcs3gK z=LlGJ602TAoU;E+U9RfN0y_|{{b?pP0p~?wdAcGa>v3@_dMxFKc;5KQw(-22%ktlN zYA(|C^~X@PrNI*puz<38KeDEKvR6rl7!MBTnZy`a>DKmXHvCMrGEGVG+ zI8Az$l}n?^Xx3XQ{PmMdwyqqC){{$wNC0C?@TWhAJ*Ut5{L~+LXXpY(!$kSFp_f!? ze3`?3_G>s)w1?gn0<+rUdl{jY9wyYcF6bb4<$sGd8o{lReD#`z z+Tvm{p&F`;Tm3E`x-Rc* z0IG}?WOx@o>%vMB1YkLLCBa?QaB$=Ns3FFx9&UZmO*LYy_G^qK#>l|(lY>MLVDXbU z*hA>wmvj3QRBkQco6$TumxJZ=t~aC3G5abP|3JD<)IF`aqXgduvuqdxi_lv38|1R8 zBRjXk_S#Zdr#iz4D`Np`bYQ#N5`&T^7VQ2RMRby7t5?r0T$sVL)~p`KfxGywt0*(- z$Qnh@tc6bI_*+aH%<&gl9owYgI z0qb=3o^|8xt*r5znT2?EAIge~aC}!r?Wg%;_Bh8o&k?OwKH>~qD#`ut>;zfSiig@_ zo){E9c3|i>B#YtVG$*zl0(a3#nhm41Y@`-nE+?*;dy$K8vcWoRkZD6t74|9KsHEDM zt=w+dgeFV)ZznV37?YZpRFs>X`QQoG3oqHjkmonylAG4_4&Av(iLZYUloE#&3g zoc9RJTMCjXs>KiUIC~Xm?cj0~T6DwkqC$JTg+C6Xwd$`#1o(Xi8?_gkiom>@+?Jx^ zZ*Rwo{TZJ_qaIushfwu{yP7ki6^(%iwKOh0<#It4SN2D_wqwpwu1$f*IH3-oDb!i* z*gcJDzvwm>!^NXvh>GMqH(E-#SglpJvt0bT$fdBFyw_v+c^o222skVYNu7kgTzJHn zCAqmW!>##zHt(K>*$kmIFyO`@e%mL3A2{bJ-0BF;q81BV>i_o*E^o`lmk}z~fPD<<+5w%K2zb3YKR-d;?gI8TqkDH2pHCdaJvGsfmDA)qoXJsjyzbzo{4|=9qCy;95)Q zX=23LpdN4f;;(YLQGbR_=Cgf_TFx6c^Un);bz#hXgcwS3Qyb(62k}my7E^}PCv*5| z8my&z5*K{o@p>!}N6Rm~ntfGsmpMbk`^_v`MCxx=%xoOvY%s~GN4yMnjAneZMAnj1Qw8{Mzs;dVkMdguP{p| zVS6!L6g!CzsuqzF#Yi>`h>fAsH`M(fN!K0F zk`z%QBiSN*Z?fmt43WM4%(7?pUcYlb{qug#Iq!Y%d*6G{dCvX3@4e@g6nRU%V~J=! z+R8g${Ri>*Qp75r8iLpS(dG?Pn4M{+?lvNeZ3nZ~Ryy8f`SbV^Bd3dwlhc9Scxo2y zZqVc^yS_!LI1>iFLrLx5V?%{`W5v5(44FdT+4*0{HYjeqXvI%Q(MmzAaS1MK$0aHJ zYR!!f=%!j4RE(i9Y&4mRx^h=6>*lahVa`5;ZK4;99>sbBB@!C72mjlSo?74a;w-)l zw-qH!o65mn8`xMCs6Y}LtM(gin>aUrw&Ex1L(9pm_8yk~gsf49O;(`3;?a)6Oq$I{ z8yM_?Tm`W;YM`$wu*5$cP)sbgfaNY?t@f&OReoB|z_)xENY1Ct5mx9xpA;mDigDEe z{<=xzaEl+u--m^l$j0x)Kvfv0Nx~d&&pn6G3BvEz0hy=NF-5L!b+{*!u75RiZ=O5d z;%M9+ofJWe>go1D>?t``&SSnPs$t0%Iw}_JFUO3!FcxKGsmCa2(*|HEqsAqUA8yp@=zN`A$Hb9OQ1BlG6-*FhG! z$(7`U?x?LJmws1r#xYdpVE){bgX=mF%~~<_f9&~^M&+?UK_Xg9zN*1)5lGkWvkT+( zObk)guxf=BI%4&;hd(yrlN6fDNBF^9bO=j~L^kP_A$K~=MY-WA_?G`Y@?e;pTUHt0 z{6sP`LKvq)yyt~r;dw6%J>*)1Df2sk$6oW&Z-yC3xJe`k#M9HAX9BQTb^DJIznsa> zWme3W11BNpmr+>(q(}?)C6+}BInB?2DLAZyP`H$?7CfsDdZiq*WrO1v zSq4`y0~L#l=)FD0iPfQ-PUB4*(q$<|h!>@~IfwLO)({3aX38bQCpYdd!?q51q|GhW z4JQH>4lM^L;bbCNM#LVs3ZwL!t%ZOH3Na#wh94~yHZ1{+8-=TU_;!}POPQ2*uOIucHx!H ztR|m`X0Y#bUNc20Q#lsp9ihvyqsvBa ztjG#oc;r2eWO-T(jL^Q?5zF`^@y1A51B%f)s<+f~<}YUbT+|mG=4Bg}{2x-P z2M;b<}Y*kOz>(3FXEZKo0XEExR{}>+rgRC-g?o53q9L6*4jMu|7 zPR6iIj_--X+5^uOLwBylVwwD)yqdxDf~;Q|_f%0%$m*RK{MI>2PZN5S?S;TX06fWrQ6+55hgQ-gzOMnavF!c_AI0#2LY9 zkVv~$#zl3&4Rv&fRb}G@8Xf1unEfqA8?+k_YrM~PKpT9P)`b&m<#tgOV z6nkF&ibsmsPHnh6D?iZWg{Np%NNRqhHPIU z3m3FG_9^+%LM>_vlifrjlcSXO#d1&DZbgFvLMD#q;eCkgBBaSEj1V2f(6PeEUU`do z*j`r1gu=Y(imOG1T+<)1s#!&~3(7fjvrm2oI@b~+v{Y4TrH?f}+wjH<6BUh43}J3K z=BfuSUjzLsNTFn%3wHXAIn{)jsZU=$4m0)4&|$(j8R3MHFozQ4a9p9HzqZROQO?N@ z&Ay{CR@-~Ym^Sj7NbAb0%qatq(^^RH0rVS#BMMZqcdPvj%vO9n)D)|Hq>jSfg}GtP zCvJ2ez~w9WX}ck54Kr8s(*fLxmD77G;dXl|+g-bQdpE{ppsA`&y=H815#vV+X<3D7 z;}M|a{ND`JC@iJ@WD3X@6=AGX3~#+>_jFi`%ELlbj02O|y&58T_7i)KC(lWG=uHxiMY|)wX zk~wE5-(1JldLp}B5bw0VYBdz5!&VMBj34SWz6a2%7i#EDBNlPZqWmp9lUlIMVnZGU z|2LdbR~(C+w+uy=uT=3syW+|~UO&#SAH)h7yaB~@R4NshgC=%2Bm-g7{_MGgNw55m zvh6JTyyTDV-1GoL+~o3Zb6M#k3P^RlIR%a;a!pWxFveYZb|yQWllDQ)_t}*Q=SVTxIyD z10PjO7GdRR{f_T411Ds5h2H%|YVOa_N38aZYxW|%u1K?0xqCceiFaK1g|i*FW;fod za!9zE7R98%5bgP>P)ra+MwH&>j4iLq#+6D!W>;XD%P6P~Eq$2b5~-}VkeQ9()=V!| zRdA?)hl7PNtO}Qv@M9^=E*;tD4m|n<%eo10jH((Q!2a^0}r z2A}lOx)XWsES>}l*}6LGPr@k|AvYM~kG))aSc}M?7<)H{-(y=@6rF;nTK6|w-de$H ztC&$6Jw!<{LvOOwg2NMWQvlEZ4+jRKZW|GfJ;N8Da7lWM&6e}~|G4l6ORhu-)uK%l z>6p5-J&xsCfkZs}GlVy;NcKcTdrN`i14SC!63*p>>7-yV@;mA(0@T%~-EYAezGyN+ zNb{-KC+dY0QNnaIXNl>kp}lFm6O&a9pGueV!(4v61rIYJCCI?qJgiaOb1`E?byQK* zi7#gOAO>4CyeeJzv1giPtLsR$rn>(#XM#WlZ*Z; zQWo`L)LJz274l3HPn^MVsgE^eHTpFDydX{>S^5J#$=kMp@M|}4eMa9Iiv!6)i z%d^!5_^LsDmwvfs*pAAB4Y^O!lW3os6p`I%xT4)quR5FiV5y>2`!ocqYx7X7IDDMj zKjNE!EXP*j-w}MVi_@L?@hzIGISvly#KT;1TNC_Mc!Iy`Hx9O;X&+WT#&SRKPZ4yz zHt|$##CZtwQpdz@2jAXBH9sLIdeUSzg4BJF*^UO%0K99*-~6xH5yS zE^vMwx?DkJ2a$!jaokmeYaeDz&@?9=hxq;}<}{Rw7OJkUJB~b2R7}!7@U)@N0-V;$ zs;0AHE;?8X8EMW1&2V4zi81{dF@P4bk9HInPh{*I=76n-VS)TB;DW)dDoSvStxb?x zN9vp^ccH}w-0%`+u7D>WZ{VJN9C(|HI`ic`?l{3}u8eN4e>*(<`E@-lwlJYKcZKMN zq*ckheVPxlc%~G)KEpS?NBkNl{DGZ73T+GW#!)W*$KTz#O8yDG=kPgrCqo0{Kshb> zx7-@xSYsip_v6;XXfQ!Y`TLXg1)arp@{J3NK0&4aLc*Vk5%{GFTC_A{GdTGsFZuAM zB=eZhHf6Y}BA_-Wp*@@*VuPiSJ&owyi>uDDUJyt8hcAvIlMo=Cb5T{nWmh}8^}uH( zH!Z_%F)cia73P0aU}-FjowjR|3rEam@Ym!dONgvl>YW31^WsokO#6 zsJ@842Fc-Hh{(H-;-F-1`N8R_*eRv}{~;pH+m6!(gs~Vd%+FJ-E2)^JT7LeCJTW}9 ziWcUHH@}U>q!L1!H|Nz|7^A>)Y7STZ#X;4x@j+a(9%WQrO6=i{r`+&^3nN%Ig%9)C zK?3wF<>Ch{_Y@wg+RsNwxo7TlJjf3>SR#=1VtFiwCR2FtyCLx@Jr)=Y3m225q2EuZ5vH`4p5E)(`$&0m+;LRrW0)T1O8u(SeDc3D7PoX2i_m*dH!rZZ}+4 zd(AfVSA9l z%E52hIuh5)%e5LonmP6y@g38(`h#nTH+Wu1*GQtTU@j(45^+dBp7?|+@xr&22@lSw zcGl@BXIk}Qd@482Vw)?NFJ1>*$BDH1bJWqNT%(Gqwi?+!}|^+KOwnxxjMxlTzLXkchuz0 zWppTVM^eiCc#;K?-zi8Y-m?y?O*$tD_$J}tEbw{pv!LBJhB~jhIMb@z;4|Zq& z1b%Sl?+N_ymF}*rH3QB%l#gS0EQJ$uS-dV=4Z=ieGDZ}XL!dYjl zwxNADS?a3kh&!+3lNWp+r7_RfcaxLfCK}?H!AhT(pV;{q) z7aUYo!faW`1ItxE#?<1+RMyDm&(a+1&i|g%)r_k)v)M&mrC|FD&$Kg324G@oX=yXD zCzg`!RI(SI0@H*Le{qBrgm_#6Y@nB_Df*I zRzB~{+k;s@NBKLG#S zT09?wdL~j}YaWKF%74~+c2uQ*FI*cXWFJc&9nb%=SlgZzMsjTihg{@@>!_qYVpc)= zZe-U@4495#W991XiE`L%B?rSC#zi}}!&Q{i5uKoo+9_epT(~xnC+@=DSEPnKdY(rZ z|3Ow@Gin^$-jNuEm{?cN4V23NNMNGfU zo39mO7Hnsg3q*NVuSBCaTpNeq+8$4J0S)HS@d$iXV+u8t!$J=^7{b!dXvD^VuPV&P z(cHcW19Z^DquZUwa4#WSR$-0zuy7D^S}9f;m!IuA#-B5y_++xKdq{c%#D8EX*ZEgMG3=aRsX#Wl&L8n9i43e0&e)?sEEz!u|B3xF+>uA%!XZlIGvg zJXFXz_0V3iBSS5DvI)b^qoOoia=pRSM&u{dRBrpR@n^X86272J9grlB4VejYrmwjK z=%?!gF5Ae17vZjRKrh)ZZz~1Pw-DyuOZ-*X%2m~L>PU-wsH5HM=)kuV*lh}(9x?M3 z{{~WJro`tW!gR>yjz?n? z;EFy{&nXBrm$I?y^iFPvr;#wTs|sV=g?0nkZv+ckqmIJU7tv#8H>dk11cnPa>;dYi z@ivp8hPQgyehzVrDXM2Qaa;~H77jiqXS!K)Fh z^Q^;)GmDJ4a5|g34T0s(7(DE0*#@6KVeSU(MP_hR2DMO9j)A?yx|2~jhk2|V~;>J!nST~HC9vX zI=#U#OOaaYJZ6#^e`Vu&TOlPN{N3LCzEl5#zw3)@+KoZAaY~iqgJ2>1Hqx}x4vY6z7pT6H{ZUb&rvMxA=UdU&g50(#!Z;2ZB406Ur#0u;}U zVO9jQ&cIz!@rw3;qGD|&?b;&pEw?s)sYzcR$F#*9bb$Y>!dv@sRG!G+ST^J!Nb%#i z5xXtm)|Y&p%3Tt6Shd;h4X?e$Tb;*$FU{LMxlUAb8|KKw39n;B+PNmoMha6TR+zq( zxzz_19E4oo2wz06u~E&&w=z7{g{@cUvNh*faO+jhs>D;9xOP9o2Xo&q^sXr<7cRl` za#He6MPX)1?AtK5xJuK4yy}82(zQs@QHT;aK&0DQ>K6jk;)X@xk-ad*nhKNZ1M6b7Kf?60o9# zklE8{orR$?DtvbZR|?B*=LojQ6oOs{QNNLp(fajNV`YyDk{{DdJE+Q*eh@sD5FM!1@7W^`u**kbsV&8v2Uol`T)6p!f zm>QofMLt$xUuRC8p;6k(-Ni0-ryYwhpduSi`Zc%zqs=I8S%7}3w=ui<>Ktpo<#}J;iV@`Fhjm4AJA{$+vC%$Wlx$|dWDdUCa+RzJ<ns7E)3Qdk<^KA(9 zG%TkrGESGlOw=1mkc+8fSo0>|`S6zHf0P0&QiDxoGW(pt5j=IwutJ}Q52?p8)hUOK zGtCdlR{`#>!%TN}jpOdow7Q5|YJ+e3y=q{9$8WHI&~3rs+S7#b`S(2xWGT^cNO{1YOD~<7xDBi&t46%Ri2X(o*FV^ zdvhTp3$tMwcYI^({#aW`F50NgajnWhuW?$C9;vFuhW%P&^ft4uqJk=UTvK6Wlj+h_ zrheyF3&zbvthgy&w`Geq9KVcR+F_ko9ZE|Dyxo~`%k%$@Y_Qb8Ariw{Hs*yi!YTo8 zRxHGniVS?tRlaoSz$LTUY%!B1Xt_8dR_(%PYfxDl#{sh?!4ta5B#(F6!$}7vDngjf zy%>533DR+NiopSaOFY&&Wu?wsyPM-)@>oeaPiN^%tWbiPmT0fwR?3tGH!1wl<8~&$7R0?#|1DG+QS9Wn|cNk0UD3~baUUp>jxA}RSdX(gUZBRc@ zq-lxples$v#LA(!w){*5Iat(^bL+Oq8dTiY$F1BG;o6EvT9bb}#tmZ8xt!JGoVY*FMDnaf8^dZlLNglvk$N zAYr!1RPjLm8@}FU&`7(zg8J+J=}43+Fl&@BKVz8w96n-T4DP`x30y3}S;nAV11T`S zhe+c)uyZ_HeCNZ>x_vdgr^t?5bJiFBDJqD+Bws@#8D?C8qcp>|gVAm1+^^^MpIp+_SC=y6OszS|Z{E2g_va=Vyh+)ye z3^&9Q@K^i@ZB1Fz3lVyQW)^%Qmh^+|f&fL-77ij^SBmqRV!ygoi=wQ#AwQ7A%07sF2{zWZHK%tRQ&Dg%?s{CpD|v~5;TaNJzv zB}WV6P=ZM2WA)-s zb6&*9wn7dy=BPFp zs$Qpg5he{lUDe=ojrrw&yqm*ffqZn{5L1*_r=g$VjA3Upix{y;0LS;?j`QfG9<{vS z0F&L>sx=G5a&1xGT#XKDziAe%<;g<>x&8$2JwV7{k@>XbmNQ6Gn-~?riYMVFS}#GV zc&!(s7xI56aIcfp`CeO9ZV5N9 zuJyr+dLmyd!^^3DthEo#RHYnE<)GOU&wd~w0Hu=JcSIY#mjH;tGAHB6viCuLlqGV-<*XqzWU<32rTS>3vyTE+tTl{pZ*pl{E{unR zpU8?|WRoRA;fVbxsZ(-fN=qtRD{sAet9vYz-=R+!oXQT{iPB+rHEQF3BL zNlC%$=TWKOEikZbMxWDHBfk^%Ews7yqq;yF&Qr zPH3qX^-{bcs;>!rT9!>}akcD3sLjRly>JmzBKhbP>gtnyF3f+^X?2{BjM#Sy zTL^me<%6}HvYw|T1=j(?#xLF&g-rqlI29+C9F%t?FR)iNJF7R>rDMMuTi7w27Kp?; zZTJ}(?zT9fvx2Z9eC)ycD_E%_WBf5*m2;#!?dPDrG#OvS{4h`J_G&F>WHRh|lu0x9?q^oN6p2#Y>*sNM=H=K4Ee07Jts%wsbLL*q^08iv%w3(drAAt5! z9ftG}=1e($>dbR7^jpfOyWuO)sG*`-ET_Y2en?^ZBRK25lS?ptIICV`nkj8x;$&s1 zAibF!jKx}TNBeq$B?cM^GfYO1t+V;{e+X6lcwoz>ZuqPUD67?b*O$=0ba!NKGXK8f z^qvfmt%vWJk<7@=3_ifvDySxi4IiDmzH-pDhbFUGevmBhM1@3=H9E?;$1L@kBdX~O zAUn|rPA$W#{Sd1dRo#uZSMmI7ULK~2wri*(kbH3!Cu#bF>=^cv4+Ps8=YSbC+!3qkjMP_Bpjw{X#drgZTsPcrHuhkLT$Jd9H{FIb4Hy*RQ9Ta}Zzj5sck$8jZ?_6C=W2$?*P z*5l}WnQ`mb=nlTBB4q?}!zG-I5pq_9lQB~PrEzij7L34TAv-Og+h*MDBc!Xun##d*?Vz>YBnkz7 zX}4{)XWgmXC~tH&v+XTLrz=QrF9rJh^6V4#mgt0=Xm*Ha-?EW};NH!Vd-QKir!Pnemr`cd zEEmZ)k5NUG2nQR<;aFRdd;Ev`qNDkdWMnz)qW*0Coc+(Bg-%4H)UimEs)p)v+>?Zf zEy$qGEV`IZtqob6aYZLD^`~*hG~FhjZp>oAygHsotXSDbqoYi&#a3NlJ6StHq*wF;JDDK~0oW`!m*&kCV(ZFVQMq$j8@N`aR~m3n}ye z60=!gGux%}*Ks@$4Dg@CUu{`uDN~1Wwa`>g*{fb)l4Ht%9WvdVD6T#mn5hJ%`|Khaz zgkcI04JYyaay-@B-%aC$Wmwl)$S#f9tql&VInQxm`z!DjaAihOPFc)CADPgOjvE+v zi4Q7rwLKP;k(21AIi;)0_u#b{Cy<&SgRFfpE|wPNaHtgVyNGMz2JunbyIS^tiK*d| z>R4tdyHCQT?m|{MieR4l_TrJxIIgXGT7(%%n6KtvxiTv@2g)M}ctt$S%vP{2;3dMw6-IC3J;jQ2>v*izhv>&PF z!o2RmjANLma8=riqfX`rY`kyH{odFhUCKA1eD@j+mKB$+8>qm!u3}9 zDHJMn6sB=HLUfp$s|#Ls4yJ0Kow^CLZX+X~bLJn071XtO&su4UooP*Yx<9kZNxpGJ zX^(s;L}zm(>(wU$c>O5;4ii$=bJnQE;zQZE5%*5v+*EnFgtiJ6-Ni}3*HsQr+RGt8 zOAqeG+z$0Eg@4is-DhiW$&29 zLpUk)XC>gWKIIA>z{lgc>KnF;Epo9b&ge+QX!+}fxcwBmR}u1fQ#P85Hqu5uu;UF` ze<&`3#@IyI5_>P!SkCY^e0GJWb98D_y*X^f3i(mKls9E`2A_ut zHsEdpk$p49ZteEo`shb?BH2!u0ip%G(u1vonb045tVL8_n_^i0c&7vtX5pcFnmLwo zDCZyt!?(p+X*kwen6WxdN%G^`UhMXiBR%-~rXkv%L|{cNtt>wl*Fls~vwg0kU$!MB z50sDGgc)Y~xuo(-ezs=$C|6`7sD+4K2wJ)O7EY!+5Bp>gBU4eivye9$ z=KmXQ9WKncUA*=lDGJ18&oE2Y%xVk7c#rMC{SYAw7DK8&^W6c$z=Xx;!Ol&{8^w6= z2i7?XxkCcV%5ME0~rl|3I6@LcUC5;~8kKc09E; zTlT<7(GnK#&VRWmqz*NFCZ}hz$4ibZf>a&H3Zgmk0Ug!E($Gt>{D=oy84I&ZZRuMJ zZl90u&O#2W%ku4z;U(mAQ#cisBAU09Mx8KDr%j=15Y_t2!LV~WP@WG~TG4+Fa`ZO6&8akZ`TW#!OC)wPy*2U-=z4!z*u zIAI32L-c}DFHFljs3{H$hZTS}Ok?2;p1gzIHAECzTMlg$r(bnqrGXL)pB*dEZXGtM zY;skG$QON`jeMC%o7wc-z?>j%IK{r7S)`>wrI4p8R?VKpy5smHAqx!R=Lj6tfq2`I zx33|no{*B6qi!!=In5qV4Id=1HCm)&O5#RqX+f?G5(~V-pi;tks{)74G(-a1&*?V& z)SlM8Ic*-RUCqxWeSRM^Por)vDO^=Yy}k}evKn}`ElmG{T`oe-_>M1P*$9(~B$kNs zW1a$(owmlqhz-WWRJ5LVExE-W(*_G!Cx+8UbL>5u2hw|zEJ*M_qbo!bQ@A;qqi3P@ zL@9KAAx0}|WCsaTNb-S*Qs(bOS`@|bg_s~3BHI!9KjL{uAs0%BsaJR_YRBSsw0M-i zF7DI_%qt)l&Jq>n_c6FF!whrnz8=$&R6-a>?Lg}^Jh2rfR@HELP4;o+yr*n96(z;C zFiutQUJM%^#x^zN6Jya?h7GN?YoB-ElO3?_D`bxlV(Wk!`EiBs9iZ!DnCqkam@v2r zhh0N&F=bqn*5>D@&MHIyr|7QEP2P}NtA1JN09_x$hF9@fZ}qh=lW$=_AtA49V{Rrr zv-m<5InHDFKi+@Kbw5#Xtel*7m}PUh@eiMk;MxRa$}{s)94BR=x>kSNgyH72Xu=!g z_(d`^&*q0$$Pxg+J#BdB=8T?+E8-&f*O?Pus*{n=QP ze^&X%s0~c`jIyHrbarR%|5)}J2io#@JIpC5vUAq7n1sg3LdMMH#TR%SDCC5i5@i`} zWnlTtg74e##%nHjW5Z2`cfg1&Cryg7m%|gaF7L%WyN>_+#Ul-ISI1|I!jVN4-uL9P zY>uv>s{!h)qm%3$utaqyIa%=s4ymT}86r$>ajx&dtU#LBF`x^4+KDXaCX9Whz$#7jpxi_EkM zc@3U^Le?qCSWm>e3;BHw18(KNi_a>|+&!>Xjg6_w>AjIB*vqTobh?a&I^njo<+U-e z)TXaBWmXUlNiVTyeHM9!pL$#Ga4uPZT$M@^!TU1Cn2;dM+17Mui*BO5tSKR1Hgn8A zHcsWtM;IVYW`w-{SjUmCxw|iae!wNw0>{B@7|vF2*lqwh1aG^F>`zUaO8nlDoLY}R z|6qoI4#P&V!Uf#cZax}@W2NPm4F?L-(S%Wj@mPk7>-V5-aglrL^Ga5l!5$pp$s3aS zw;jK}*K`g4{=r5EGT2PgeC0>&_8r3|JMdoWqim3?Bt3x)_54T6^29}y&<;J33~w28 z{Ln|dS2TY&P@V$&b9rCZ9Y+N1xH6b+@8hS!RpnVIsMc-x{=Tv zbxzOZ@pLR0AqD)^INrCXYdW3wvvN6fR&+k9W0BT@-og1>0=vj}?6a7ninX#BSN5jY zHtee-1sxPUgSF;*qZqRWowU!VC*w;^ksCg9KJ0|a+9gZ1S*e?un46#R{E#0rx#GOaD?i=^MvtDP+S0zB;n0?07#;OLqp2a_>^7kj5FyRVw zc#aY2?6N!)i)sp9QLdQLPD-EE(g_o=v9U0{6pl{Xa7AbNU`>y~w4K2A>4wb`s3ZOp zANBcXMH8b~>NgKLGc=C>vRR}yyY4{~wfhIgxDX^I4S}o&&S#$$T>OsZNAm1c__UW3 zKg-DBp40>PaZ1x4Kv~7tod@{?hcAw+y=|2ez6~BA!$1d&IvZ{u%U_mo+p_+Eu z?~VNZ7Znx3&kV#+Ymo;^C$i&mn*I-S3JJL|jW-r^>Mz+$!oO!wTG3&X1jh`A2TI)){xTmrV5`3T+$crI@2wg;_L3zkbnXT4jh z4rZU`^352PiwfD@i2M5kJ%mh);-1}Ts-=wz;gi&c%4*57G$%5H+itOhF~bs3K%e-2 zbwucFYK2%Et;{KTjq2RynMzy|iulqZyEKPW4j?#I$fagHu_iw$^PezIj)0YV*PJZ;0fk-QlWSw0&C?m+*68AQR?SE?E z0?!~cR43!#fT;`fqikB$(@!J|rm;dZdX3`D`5e%g6M8XEcF?q-$0Ho@kqbUo<6dV& z7$$ZpOq1G3F&63ZChTwrtsR7{umj7aw~(d)?&pF~=^5Nm2tQw&jl04@3sw0Im%1Wv z*+!Tl6WJ#Z!xM%4^9Z|i#6DFPrj1-Izpzy`FDu)PThmr@ml~n9=q0MEuXwfr_4H=D z1ljnpA4gwe)EnmY;ew^;BUZsrfjqUGd(SbcIbZ(6%SIxzpTvSk*yso^m!)wK7N~u` z48lXv62z-dXxxFe*=+PhV}$6=uB&V)`>F5ZMO!(UA?r@%1703$HK6r6q<0nBlK@uU zgu6NlTVv>-jugH3&nYz7hk<@V);DI?M{si&^0}QZ4)^-Xnbi@gR$Nxx2iJ_01n(%X z2G{up?sXUWH+67b#?x~PlfJU|1O_}tLv>FVB6#c~N50}6bHs;8$&ZQ{+hce>hD+9R zqN7gMJUa1VBA?E~!B%o|P&wA>#x~JBwv-pYLBcJ_ z3cMP036PyF{)s%%f}1X|bYZ3prD-BxjiJ#DELA1h=ff{UuvTD<&K*!%lo6)p!nChX zyK#IzQ$AeYt*5WWHoaxn;T-r2cNGnKR^~uAgsTbIFQM;xIBN|{<}>#x(iCu}I`Q@g z>?$B+)I7-7D2c+Wa_9N-`2|$ay48_C8Xe-e z>;WKNiHD2w#7P_q67u6kHu!;dI!?x3?0pO=dQrKl7^6DXK?nUrXZBc#MFKdw1v>F6 z4(g1ie-oOtMn)AW6GdjI;NT=5Ev)Cm~RN3bY6{_7{qi^epLLkZPEi#hyznW10#PD05E zCZTVjNdI+UOe{893fZM4?`5%M9%t3$*o_Q%z%TOdVh}4u>7I=_Gui4FOSM(lh%|Um zbIhzQ)i^bjYjdyD^Cm~$<1s6`j?h?-|rBm-MeWIXBMc5EF*jfH@$RJA)0T-*g-;G?a9K|a8zxkpqZ?|X52u|7{<9DFh*guj2U~o(j$?h z@bq_QMv`uHjU|jSW~hu z?SQ}71&4Rc52$xiN7rm8o~t)#EylvM*D$1q8Lq93sG$?G$47X+CcmG;KDDc`N^+P` zO%4atPZSxzNw45KQAo>&xFFUG=TKq(mBRr+3+#6hrp^?cQNtY2TbPHz65c@~>akD= z3rFLD%HWMlj#9uu{lM`NJa8MkRo9z0;<}+syQ_a)cCWx^^#f}{Snq89N)_ugzF3d* z9Yy*!hLhf6m4lESQn~gw3fB?xKq;oxpozPF&5zH+sd$kMD#V|j4EAPSnXe7TIqgKB zD8|Ro`Vj{i^N%kJzGP!7`n&Q-2hJmUMYcuOGlt`>ws~`3{H-CEEmq|lP@XoIS@aoa)@7%$+%b&~ZYVTNPG43l9}>+T zSx68NrRRJO%D@6?8$MK(gKuX!ywI+k9?K=k`P&YonqqLc$d{>2W{&2Bxh#5|SFHJb zHTH|K=)QW%AUR4=*wurzXQPg%kncLP;{u%2ZkgLy!!5qJ!H^{Gzle=}MfRpN&8N`u zHW!Y=!0uB0sGcHi+?SEt@Sirb&pyt%o*yu_{UXLZLzJpjd>}1i`6!7iS}`*%KM-g4 z#q97hzvLeac5r6*NPVZ$Fa`&;$&TiXAIQT;8J59KAF#Bh$mT`!dnPU_TFcJlan{^9 zgvs&z@f9tqi!8R6W;#FqiF-zJ-(l=-A+qD;d96IoNjLfjaHBxK4nYA&zMml>%%o-x3gje-`M01JdH6917rEDohoEs77 zq)OUD4va0yO!*@6mP@X4$vx~+JV+|SlRkWZlO_XTCkBo)3ZFH0a^_XEP*3^BicRM8 zNFINM(l#Dzi%OXTHgeePCkF>DZDPW^3AFscJ=Tmnh2shtCM`MCQ-W^E^5eKkj8a(vl! z8HI}@E15hq%QSX_%h5DXcB92*Gv2{os9MhSTfAM#9zH7sidF-;7Uayg- z_vvlLGn;VPN66c4n7s_A1$LSH8V7nwt*h1fj-F5RH89aycb!Ei8A6=VULNX<^fJQq zRYRON#E{k(lhw33rjS`Iab3Tj$4uAVQ9C4R|76B4WsPObd5TZvq}1Hz3|s?Wg~}!k zSky~Hs0Db_@e^Lin6aocGj?IB+RMU%jJk-eqHl;&2Vx|>ihBd)%o_(D2a0JkR}SX; zBxdGm)M5D-Z}OFu%rt}3fSVj`jwOnxHu{)NmT>M1Y!r*6byGf=gVH+fs@sq@{Ww3J z&4T%CJYLlnS#}|sRHElz2Kr-4SGnFWUHU$n88S<}i4GM-^j9n$Q99RMVa%tic<&U0 zsvu95!bv73$Wq`46752mm_K8j_;xS8Dhyv<#bT!z_1iy_ha&iX6dPG`(js)|BncPO>80&U$Px4JCA<5@|@+%d~pL z!d+Q!8k$Q#(4Ze873BQ}36oQo1G5?YNE5s6*^NtDpnqk0)?`};{j~1%4og*QyX|>0 z1XBcg`8I8^r1-er0xDKkprMWK%H%*0M{15(u>#v$GlZ2?fRWk)&3? zx+DrKGh7>BZ^%XKv81bzbKPm#4v$3TEZC5?!?9irN395U!o-BIvUHNZUZT~WC2&m-f^{%Vv@7-CZ-w)*};_={qa+!6MDnZLP{r07AAEbdW-Ur zDUQd@*%+r@XsPNwo4^9AVA5L1Ij-z7gpHOmv^PJ5^T%3VuE?q8M{q@n}d+mI`HUo)K+qXEgFei;kG*P;TVp7jA`0Ovt9Yv z6A@}fZ)b7xT?FVbwbz=a_mQJ$+S8sbKSPtx(kYO4LRjDcS30t(H#vo`N^tfdB#M%` zK7{TAP*SfxZpux!kkmy;pV8zze!akx)6reVJoFZzfM-ED{HGc+lcAcqF>HJqZXJZ| z*^HsS`Fn_-^ka);_RZmC4>VERovfqj%K7xXf}Yyb+pF?FhN|3C+Fjlt1!`{g-OdnM`e1b760DCfltv{ zCkggdG$qqsd2aTun3t9pfzq*@XNwx*Wq2sSf*~d3FjZYGv!$FnT9J<%bNpGJwde89 z7-}f8Q%e}V43|{FKLWYy2WqH3HfOTnZTQ#=8D=4ogS*JQD zJi!$0o{s^XBdO}NDIFz@&d&UqyTs~QmyRS+14nsqHF)6=-&JSl0hlCS&mZL|TiUV? zvB_u_PC++MkyW*1;XnDCX^M8HM;uzIu8I!k#5E{XN=WmeT)P&zs@2V-S??KNK4bcF zj8OM4T3e*64Y>Ch+|=PliCG{~`Wy#kykbmOZrX=2gM_^K8m)SZe2}(yggwKTaO7>a zD#>UWzkV=wIy`I0>D@!+^r&Q5h`V5jcFM&%T;Yv+>I;9TAVL5-KR(va?`W({2}O~{ zW+*HjgxLy5z1Onidsym_&P5k}q8Yxq z%r<{Hv?6`_@MRj;NHjxLk%JCzjjHo}J=!%xKj{YSv64fQ&OMfGhmEKZ8v}*uosI`; zNmnNbv!g$2pW}!px_?>XM||2q>#>}FOoCCNk%JW4B7KLdqH}hw!>v2f%1B6=a(=iA zcYTO!t+7fK`dt-j@g;8sHEOjLrf>jLBCt~N{gVY(_kp>SkO^jZ7$D`>>tlCc&3zdN zjui6N6IjZ5Jk>^J)#Uh72vt*l-jvA)dE_^r<~hhg>Pbd5%GdVY28tAi?v zT7NFG>`j#O5i%&8u2=G3V{{B+k;MEj`AH}6LwhJ9Mv9<1t(xPXOb(d#8U31yJTJMf zwImu|$Ief%kD-!_VJIKYX82K7 z_{Cad8Fzp&Cs?dMkDbFFZDZA%>=eM-_ZVuy1~oLi=2izT?}wKPu)jQb@&kUVML34= zW+tZ{qP3@fEVnfm*_o=`N|ZGb@~bDC{N&7EOg?}^Vq~bRI<6LuaXNh*-$9te4s5ao zx5ewY?~ueMp;Zp6hO*UU9zDQ}jvO9L=gn+7m1mc+Wj04lLRFc(V7T-c)7|*(ZC(^o z$+}MSG`Oh6gfwLAF*>~C<1jXS3cIo*o70tv@%r`f)O#4HhyUm-()UBS{WP`>5VA-O z)NUnmJMApPSa^$Z<|ngC-pW~7^f=AN&MeRwZHGyLh^DNwTLJ{q?+e!aCndvri?se4 z$#RWEMa?tj{4BVqlaVZ0n%+x_+!AYJMi_e>gUuu%CsbkwKm1V~o86q(`ZX;Xmc)B?kj)HB7RMWy%4*o;raCVfOF*RhVZrnG4XQ%P+Tig>A^Yvzt z2iT&(`FGW(YQ{U{{fbWyB(@)6brD%AKEv~VX zBd^5cjat;cVw|49M_2jBOcMQ&`z4o##O{Ds8#(E*n+bn#e1woC=cBc?RKI4VFg695 zI5R)%u=;t@m^1O#Ce-7nD|`*>RfRALE%?Y2)== za1QP|0Hlm!&OQt&FJu8*JQx3$m$bsnj>9}JVJ1m0ad{xkrf~Ti9$lE9s3StOsT~mb zA}=@_*R|lx?RZsHq}P99y>v2+e1++jg5EMjKsN6UlbRa9k~^^hVas#J`3@c6dmOS6CY$Ad7H!zPeG78D28ZXpXkrMBUpYNOUd+e3>{?kD0wzJ z|G)m}AQ)&JQ99|$aAf*7oRZeE;wQY&hpVAzQK@%cj4~8a=2Ah9ArFk^>3P`QOp3e^ zFX4f)x<&g_4lmtBg90L5t)Mr_o0~S_ue!q4>UqJ<@JQWhYAJrdguIm14FlQfIecZ{ z@e!avN5cH^o(%aT&%6+@^OhP;bz@t1$9H zWRH9*pGeR0Y*m31J2PIAbybto4$t3ogdfc1vDL1sWT(P6hdY*+lS}7b~#W0r`u^UqLjN9qG5( zWs@i0ut6boJ&f(7k_yjGSMyK~ECPW0#IG&bAEu66mnJ$h(!{oFJVSmmBV zuA0aPe{fFJ$8}Z=J&7&SBJ?nlLv1rTgedNqRhK>L@DT@Qun9jl;*@u6ca83U@?$Bx zN{+C{T=JEcp;)M9JzcSULn%%QX7OA6>dkFS(M;W4CX;v1a`s);ThFO4kgF}2Q3zX$ z%SCPqOsNlXP)1pN(GD6|fJp|tF`GRa!M>apQ6SqSX#y9cVo@Q#%I6|Kj(N)W%~<~~ zo~n_4j?Ry36{89nZpzn|oSMT&1~{SMI#k@Aw~J$f-cbYn@InU6?1ZW8AWWZNuIdMe z$wCg5yhAa3{Z0fNyd3L;MYb&%XY8eHh`MdSbyQbKd#o1@?}xVP-8niHsN8_Y7rF4d zZgg$Y3-?tUaklI>6>G!}S>1>`-ZLtfEJDNKJhPC~+R2mwJ*7=N-;+0F4&W?gy{mkG z2Vr`z8_jtp4q*bGh!yKZOX(GS(2+=9o_{`|Xe}YlPT`TQ z$n$2)lD@j?RSa+y`T9l(l4rvA&cckGP2a7WOnA-t{14K3@8!z+F(iQw>Uqi9N zP)gpvgj4z#xq#N;EyB)`lrJ6PG~?73c|0U* z-{yw#LX-jyy4X^aXVYQEH_wr-AK2~6P zbeJ{Iami=C?v67uW?-R=%Uo^94lT4Uw1GUKt{K$ziTS)5soTgGCp8jyrTc<7HOYB6tYS-%F$wq#r< z`fWucopcm2k$77upt_$dITp_F@CUm0XL>5U3ybVPEq?!nA&Rn(jxk6gdFcb4sm1}% zQO;M$Uq(Dv4_(zR+K)w~r?g<6qEBFBnz`l2opd#%VGmZ^!7ZIM^lIs+G_|LNJ-Ui_ zaHJ=nuBF{SCR%aE6PT$Vw2_Qp(v$+?eUUPW$GcaWSP zF`msI!z*6M)z$c=DF^rFTFJCHfH#+M&T2eV4;iAP(XY;IHyA&{h3sNM=k2Jc^*aw^ z)<{5LqOO#kuh#i|mcF=lt1jgEd0cxR4fF;c9?aZ@!~s%jg_`$3d1yFkg6MyqPqJzBgisYx2>}bhL{%k8DSW2AFZ@KeLBhE zyFPH<>;Et6#aFk;8hFedDr9^m&b@^HnhQC4BM#`pM(SUHpmZFU=HgPEFfP7a{t8y@ zh3xCd^IZ@ursg}03w&_QON5J!iAfB-#eJ{wDL}3|qDFMG3x3*Yea(a!u$%=SqgY8H zt8}E}U)0j3zofh%M+X6U?s4IddDtWkrN?mo$;Du4J=;p6P%pF)ykVUL$``58+Ne%y z;gI@}FU@X5iw?1yTI(G*@4SmG}aB>0>o^;_C-o^OILZYGo@<>W4xy9c7|B`z&V0I?kRZ2|qQ0 z;wKBa*FU*28a0su5^U7}JN~JmEWU=pqCNzL2(zw8{(^H2giZSZ=H9>}yELHJ&%Qk`QvmaI zyy)%E60=xlD^n!iiw>gYB1Jkoj4s*Op>v83@;C2!{$|i^1^Cv2TW&}kV+JH)h?|_Q z-U2-Zq)=16=tznr5{8Sa(JvCa#Wrzlk}&cS(I^4mbWUt!%zDjf)ShAU=(-bE8;Go` zIVBnPXmLh<9mvd#{CPoN7WIl#pQuFh_yMt`zsz<|{% zAX5B+1$?+7kyDqkVMW}rlKX4YNe00JgU32Lx|HLH9Bh{kW5vFh)LP1>br+`36-+H5Ox}y#J4Iwlh)+6hI+SJg zsc={4Gc#lK!F+_x?Z{~daX_@o25tBz5eIcBs$81AqYzR=$Y4vBoP`vrkxBB|u@*ab zW$Obpk}p`QzL=|d->2|HFEa?>{xB}M$BT_HOB<9I$gSfk%#{Y0nF#QJSEilVpm25qg)^k~WC(RpjeI`$z;YVk_UV-|9rKGHPkfk}k+n89B zG2J+|C!OkZ<`^2TV~LRb_$?dNTz8IU>`hEl1^hOWr18vt!CHa&lgYe|=k7B(VHrm1 z_}ro%KkcF8AKwz3Ux#OoacW(jUx=0R)=1)!99lVRqJY=xX}&dB zs~5Ls@P!%c?qP{LtXZ4K>%&NF*S7~xwL@pM;tzfKZ5Lj}2|3c1b!))FK}feM+&D3R zH{`lhK3I!V<3wtiMepN$@qklHGjb%JXd_zP;zHRbtK{@xF51Zdo@#D_h7WOAUTQF| z7H{6b!iGZL-KTquDr&!6aLWt%jkyuhmKd6*()$UE7o??RqZh?6~k#WiBqV>+LNaykVdX}M<60i8*_ zf;)!7+*U7s+Lrd6S>ZP>sS9U|2rt$44|U_Wrx+`3XK)moq_Ir~O^a~Qa%__>r(u1b z`iIR`ge-Fl=>mzUukO`yD&3B<_eo|Yu+B1shZ$d|gHZpG&O%_frWzS29CQ$HUug3n^`#!tvMri}B>&nX$u zgPTV%{urA!MW;A%IxDT>dQ#O({<6ivfSx{%9kzUlml?oW_RDo8^2INyCBJ) z^^@~H{?m!9A|J+1GH3;7Z>7g;TDD|*7=3=T+ivbSo0qtQX*F5p3Cq6W+iKhtf>NS2 zS^R2M8e!ttn66Ly_9$oEhN0rKZEv<&1ZN#;_YUIN`ON;q(tS}%O`_-sks5D?zdRqx zMhSDe7M&!zjy|NBCHIBldubtkV)O;@JoVc2TfF}(Kc-)kUhF!OMV>KaJ^MUCtgoCN zKLRCXI)S$l!W5mt5ns?&P40CSnCNJ@RORbi@x)c!SHH%v!-mF}N#sh-fvsMx}HU z*5-q}JBRM_XGxmO?Go1E08+$JId(7;#52hq)4WR70UeS=XlSK+5!$P|U) z*Z^S`WTCEFo1ab%tfM*oD9oi}FjdEy4%&(KQCWwq zVY1nG2AXO!YDOTvg2;dB+`jfItQ6b827SaR3;ynpKxqZvn{Z8E)UPC!XV7;Js_Fog z-H4BeAVV(Zz=@2Wf&r@J1LyPBTjP$p&7!kRxQKu1n_JHF@qL5_3n{4<@0XIhn1%{t zp2)otP|Q`x1r@l~nJc@nWH4_Xhl@BWZYtnD5r9M?F?`Ny$SF}MqPk8Rm(G=ocya_)JgtG1p`L`N~cychVi?8gqj zkt7(;m=$oVrp=BNX7`c2X!@`oD@gnzDcP1n7a z0}k?A6Lz?tzhr2aA#Vle4eT_65fiA)9Zzh!th6W7(3 zN=9?#YW!9k<}`HBk@c)tHLbk3+=pY=v)2+1{taif&R!d_R=a(bK9+Mq{%9wmw~?#p zH$*xSLqkPAWi;z2Vz0N5wIk>q!(H1rup)aza?A=k)Il#%CTyh}_@ONA+~^UiU+KN# zF-q~GOcYFON&#~ndJNvPADGT7%V1Fo?`E!uh@ zQSIsbL0O;3NAEePCf`YJxEn0=4V%SH&~Buh_6fv8y={~@1GgHnr4xJg;I>k{)0AsR z^VeQRe_-b?JhNUhZ(^0Iv{iQw7$^IWh1}kNuLj|Ml#s99v&u*O6jPGfZ@4G!cNU?) zFYiA@E49Zuv232g~H1Dj-_po@^5%-C-urWyf`k7IJYr>{C}Oss1(8j%Oa>Pdy>MO3-R5%(Q1F#&TLJE{VzdhOwsy zHZ>RFCTm^~N2LB8VgNS;aKUvplb0j~r7pMPB3)aU6-Kb)RTQcvqIPxV;3T%e==$vU z94m?mzfQ{Ggxn3~2FMxX{k(gUf!CPR3aMJpTd{jCImud&(PXTUUA)+2D(tna?E0x6 zhbr1N-sU`Kt0^FyWO1Gd(8NQe$EveyJv=cIQW6ACJc|C(0?BPktJi4mB&6dwhNiGm zF8h_|`ct?j0|%qWpjm{}a9G`BGaj}rdx^9*5tVk4{ z^4|=$-NV&?dG0yv+spN<73zzf$0ddGqcOr*mgeQ&+k*VJ2e-P2qCUh0N z^NnWROT7G6 zcP|egq)T;H56~C^JxX)TT)3z*WsbJ!07As{IBqlVU!&6xJ}_X?a|Y&UpnQp$Vw}qC zj+_#Pg^Fi>fx0Gb@iSf-!G+^_Wieffv1M}T* zx16Oqv4AY0l6EovCYGzkJQ77P!-RF)qDz>N^8ZseL!*sa?=pYbRTjoc`y{X-3;)Ez zI3eqrvVaiSD4k1A*<0wjj*ToN{o7pF0jd4$PX_u6>Qfr zsb>;{*3f~a1 z4ED*egBvmzU?X?lNaKY2WFX51;kB8_%xth*o8M5OzxNpQQRvdNLHzX*_oVOOH&mEY zm06hdJ)x0Gp6R%=ShXB8nZXaytEiAuYT#c-k<(w8j8IN}i?a=dd~uWBPqC|?knjAN zE?*RMNS2t$&0jJ07w5^==|%`uKikn+5|qKXu#jC-xh<1DPBEop-c${>)oKU1@KP)) zxeGb{6ZVK*7&A29vg0T&zRk5Oc`S_s?`jy+yQf*=33JLJ zMaPMg>TFSa`SCLjga{da1D)H6Ja6H>O=tca!nP0C$d*HzqOkfv1s4X(=7XLrRFbzl zV*Gz1+Y-o#=@=xZF{Zp6@_I1ug^F0_jo)Z37{^iv*-2t0yrfShRvgLbCldDrh3iXk zV^#BuO+0uFVRk~=#q!$~7JbPj*_`z%KLO3a%3L~&Z(j4HHIFyqfNy;A50gYmSk^-> zsoamIhhVROcsUR*3T+;$%r{o-vj_v#v204vH2}l3DY?5D`Hs%-d7=jwyhE-|Fn$}s z-AXPSt}cDEFDtC&(hb~InsGz;Ig+X7j9o#C$NbNe`jhBcQHZ)=zKHS zfestEZwH%%GHZ9<-ZYvvX4)K<|_weDj?E0JD% zg($UzW@@u8b|W4|)koW2Zh=@dC8*z#A_i>znbN>;ZjG zqkZ&wke`jV?7ckff|I(WEQc9C9b2M>tT2m)PY|XK9c#|(#d#x}g}pdr5;kec!IjXW zy4+%%BGuk9T<*^eFMA+RK2;b3PcL9Whge5VX`u)Jui3{bGkWTuKhR z%E=*Eu_Mk71G)$k7a+{^`s}k2zj_NPmS?yDZlZLSH<95BUj&|H9WW;@X2o8S00$1G%|6-; z!;PMD_lMdI1<7@N@&ZmUeIWb4Lv7JIyLm8S0n81BEYVlC3$xz`x=u!dn$J{q*JrJ1 z-GkL9@zq#P%f(a$rg5Y3K^1Ujk}%PdBDO2eSqoVvgNKfwk&Y^r#&G@|R{q1z9*n$$ z844tA)4BHwlGNh9y5OLW3w{d71^roOA?-hM@OX7MpHybUHe4fH_lt7MOFUMKnNR}%DRwRBD$H6# z9ya8>SA6V%Y33sRQ&FT6X6C4ZN^gC*!^L>Xi}N4S&Vd%)P+S$>wvTMhWa|esy^M!O zQu3a3I42E}&@$*PJRi7mkvk7xVT~vr---unCVqxIbR9c9g!D?qJkd6i#TNK#I6Y*& z*j*M|kLEfW9@ds^Na5fWT=`5L+9g4v1MyfmN1lR_8B8T4tuuYvTs!{9#r@+5C17^^JB6S)ve)a~mxgI8N&?y7CC3FD4= zXd5KtjFGUfCh|$4!dO<};z8UzM8YfZX9R}H=#GK<)TO1ja8jMEUZz|yFYh%PAIz83z1Unr%550Vt%>-kW^309&H@Kms)qX} zof8hS#a*6Sz#cELSry`E!l6}}=0&%*ToC>U$V1Mng+GHax~6cUajOX;K{; ziXz#)A@}COQ+uq8IRl=fnP`z!Y*}Xr<1;wXl_xr~+9}^ajw*{~3j5_AvBoppQJ1>V zg}w{fAem20X(^elezLV>^o`@VR8DTo1JUpiZSYnvR(c5&b<$>4G!pLM9BwSZI&R2` z5t*!fGmFBMGD0qvn57bj@c}<{=l$Lc`OeB`a9GFkyq%L9x^w(mbkWX~3~|T*qMts& z*#;T|GG`B4n6OPnwm-qUmZ+#!Y^VL_SVVWoo^)mVHO!GuDUKrhV$Fv&@LBtAx9kJa z8^rY%ruR)+e#gSmLiR5}y9aot=v(6x%7}3z)k~PFjW}>8FW%sbUi@;I2OrYdhP%$< zWD_}g-j2s&Sn)G=*5ayeOddju4jlLw8NPCIeRFn6L3{CIG^!#8YsKPKI@*L=Ys9y0 zV}!hIz@n0^Y5|82kwCX_(!bt3eLJl9m zbBptHdv+TO_sVjgF^YuWFXEC6=jf&neXcegefVnxPqaWAv2GX}iqv^2CWw6_QH|%d zk>oJPFEJj?Kf7Oy6_#onJ$iEJYP?m;{GEu?Jw)!S2)ES~M*2|w)oQYfvtvE<)Qg=8 zbK_rB=q_Z7B?!_vL2U&**9yFG55D$7J_$yB9fvfYJ{>OeH-X3}vwLbbkYm3XZxn?&NNcm%Eqc;SUMd7J^u z)n|e;k6Up1Xw01~GRuw}`xv8iLSr&lV% z_grnpR?*m}W8SR>=u%K_V5AUv$O*?ngjuM6CakY;!woD|R~^}aPAPcSM##f+xi5uT zSsX!ZQD3~Fn$0YY<~l<%YAZ~)1h|zG#!3CL#Rw+f#z`$Ci@TF9V6OrokMhvVyl*3D zrPsNO%^*`}HwDVVNdLMf=*_%M^OFKw_7mod2gdy;XKK0$le?YPr|A8fYb5r-Y#OGq zR4d-e#Y{DuW2qQhR7y6Ks+n9C!*s0dry8tKm9B}nsD-AiXYv^w9Vz5LR|fdeD3#r7 z^LkefyURwVOqhy5xg8zv!fu3IKSs@cjyWBg(E2?0KFi;?T2`fh*7DMAZhIwhLf|A# zMYhZfxNQg)2MXh=ur}J2hl9{haVxpH{FTa&H<%jA%2PRe2fchbc5_}HI{JF!TnV}C zZ&xYXMdHGAmZT|kAIW0pP(*dN_pz=hIjZ(PeGN1B^VJ*n9mEN{kt*$EKr!xW%W3yC z$m*v>43{sE)p=tz`i+s3-|BPnIDWayA`RGUA)>U?&v?-mv@fP}7@~Jk_ z)q?{f8GDK+jM*<1>3O4lQPv9K_VaY{o2fDNsuOJ@Kj$-!w#% zrb4FJuzecRwYxs`Tb|Q66i}smNKAnhbV=upeK4&rm0cG- z(%hPTNc$zc=F1+t@t?GjCCymg5yzA?+RU=wU^79;!$(k5ae9=3K}o6Uvcw2yQ*%yi zN5h_UtxV&yFx8VVVKYarisN)kdS+s?jw;^!`8yYj6<$}yv%(ITNE7&>G-^r*!&my9 zHIv!>IXq2-^j}582YCzBIldLgjpgrD#+<@H>CgNGIcKa{*_TZtSYbP#ok6owa*<_k z7CMUz#osY9nV!MI7id+HU3YTwCuZN~@}K#uvFrx&>QT(rVeiFKF8==_^m=BT<-p^i zOd87@cTiMK!JsoD6}wUu@}3psXe z42YLA1;%mRK3tYI=KA!|7$-a6uKFSL3}i3KdVc!Onr583AHQTop@$itr(>d` z+POe+8`jK_9IGt;3#A8&taEYZ{=rm#`MbW?Jl(^6K~;(`q)4p zZl25|$2Awq$b~HYi3O`GHvUuSIX<4-;uw071?%xuOX&7Ru1sW$y)f+~q^U1+hH>~v zCN1ZRwHPZfD(@BY)<$89I0#ou`Y}g%2rRK)F%BMqBYN4GHf)rTAJ^w^OV*u&eui2= z_EP91tS5w-V##Mu@&esx@Tvo?aYvqn&$luv8?)OB`MD~OdEv6Vkc%tv@>&EG7gAOf zE>aaP*KSU=%1>l}MiKQ?X_mBN(>VDmM*Z<>pvk=JNHv-VNSZ}(&$k-0$lIK{sU1vR>-h2ENGwi z(w${v8TuTJ#n2en19cqa!X?4N^caRGI&hth5#~V$hHvAl-~45YucA&oP<>=|Mh$5O zf<_AyRRksVdCc{B21+PgM=VqeNQvj5Ef^?{!|!&y+>ob7u{votlto^1zz1IZij)p= z(%74S`ypFUn=@oZ=njl7B; z<6&t2wu;vZ4kIS9!4i~LjdpjY|9zyW%M6UB=`38)0rNvs9y!S#4|!xJw{GL+``qD* zQ3a&3hl&y|zmclF^wnD!A0zH{g-586kGpe35}K&7UNUC7DYmM`9EoM{EOuYZyLQa& z$stSGq%_}3I#FLa*)5$jPoa;RLf=5%h@jm$p0+?^!2)cE5GjkpQicvthdGlsc%$85 z;~~tfGW3u^Rn`6VB*R|ig$Q6oRn(J7Eo=vid~+&quR?{1Lf&>``~!6J6LP6B7mh>| z^|Pfl*<=~Kwed+Id^UyiGud@A3q3|db=Q8TD5T)KPRE8Low%YqUms(MmGpUx&#KnL zevBK6w>pbHCW{dEqKyuTd-u}w1kNgmNq^iJ#&KWtTa|AR&exUN3RI9o4ITdS@;)Xu zX3ZXa9U*V3P`Z^!$N0#FOKLJ}8FOB8S_CVPM@lo1SvAmnN%wbfQ8kqQPfAWLEYfSW znYx~B|Dv&q#;FZ{k=xLJH%f}3pufyvG$ikE=BI%_mT9$}zbi&X-r-oOVP6YJZtMG&@VDM=b8FLj;dFkb!b_;LQah$@qX zyikfSx3cyjUFi1A8>`hEZj_=~2M*}Kw=!Yzl8crO6X}Ds{C$8|zS2-;GEZS8s^*_0 zu9R2x20|u{X34WyrM6jg2cPdiD;FU<1kgVXLH&dr=f>3!QBiMNc?dfXY)E8fF;o$?i5!Hu`^!BNNqncVORQ`PL8r}5ie)T=C2=jucKmEjD7)!HVS@OTmC zxajA`mfEK&s-zOYM!7H6cnY&Nh=u0!>?`^mfK^|SHdR-y)sLNy;;WM93Q7zyOtTa+ zr6Qd|IAjsu&)~$(2vVee*9KPqcd|g` zIwF6h7&om1C*MQqcp(RvaQ#ZIU(K=;_~Zl~Uof&MYb?a?K5}yDSQ`964Y78HTkx|7 zhN)%8+QL*l#BY)?>npH97Q9;vIcoqnCFQ-g;o2%(aT3!+(Oh{GyVP?>=%p!jG;+TJFT@!?=4G9X?{dKGQreHrosL z5Fs0#W8eiQ|KOQKtP)E@u42!QH5__H=Cj;g4Sv-`+FA$X-Z4mBsmxLSlU3gnCXZXIeI9=6fD#$$Aq|UuU#U z=5XfH{5ZEokD#PJ#@%R;AZ^17%?uVe#Bv4oh@W zAa-Tn-7}cCso+i^-b)3jqpd7D zg6?M#Ef&k7GkD-d{=(k?M|!Nln<^sxuL;ccp6|7mxtZL29P{RQ5^&e;&q5ZF6H=St`#ZmpP#tf-R-izFkB*(~%up z<%a^jkwn+uDB ?#4_?MEAx*9xlZh4S3v*vs_ps0xg0?_Q0NfcEV1^dDa@jaZ&V_ z#ag4;dNZo1BcCY5T6T1N%A;{CmkW<^BD*dD=XYV0!o#bc_-QTopP>(4Is+l%t>~hf z|2dK-(aaoAla}ne9WkoZCg#i>Nt?^8UyAOtU?`}=*Q>biFpjELib;f7Nm(5#WY^+! zUcegZ49>-|0I9Q@PTFQ0Bi&b+D7}G$fg~=&-U32qdU3^k4*kIFD9KKNdkVsn!njU$ zx2TtFXYzky!sY>#q1c_2@egW$Xk^!_F>3H zm}^(P-pew#F{GxD{+9rdhY&#K6^}?au zHG$UTRzgO5AWQyeVYDiIy*=G-=70A+Jc%Vvqmp*7aU%>#v0N4J@5zl=-$IeIGMdyA}he~y;O3DqCF1}MWt{TOD=V@^VIf4%8J4OoJDMy3)%xcdq_31g6 zJ97C(lGnb4SwT73DoVFxJ{9<*)oR{kLS0t21Mo>yOl`S`qk3fi!oCXbjHj&3?k4bZ8DMH(00L&@esPM8K8 zW04yU7DisNLGL)NKVPrI6Lr+!o0!m8iquv7C|f&!U7)dceu@eG zJa~3Dw_EVwEPh$Q=FVuTU|L)(i6ft}_D@8pUH&SGItuiO3cX=1c`y_{n5eeH3u|J6KeD4Z6sdxGxTlSg zOe`If;jJhre^#qW%i$&c#)0ni-+(`g#B;qkxIK?d;i5)}>nH{8s!@d(V)Yt`4Hhyk znC&jG$#0s+YmC20h2+ACa4achope~8KAeun^0yVQJWk`wxFBvpmjHNFmm*EY0GP9k z3$MaStE;q)74PD->cXoSs||%ul#o}p@yZcCyu=k&>`;NfgBY@g{(I3&o#WYVOll@o z?bk>8+KKlA>9I}MJzw60!|MAMwOHg7-i{NpKwEZ7MpKpgh9S#UE;~0+7}*Iq#v}jV zwc`lclY}Q?wcOc)??&UeKn`t6a&HUfNQfFqfGe?UU-4U6bWtZ-sWuTZm>Y*|3AWS$QEJ$$H!ws54o} zo^$wbMSi40XA2(f!LQTsQN5y>I#!4NQbbmKjJ=2wf>GS$%tn#~H(to5FVRI^X|LY% zeKZ`U50IhE?1J1eh5nZ~`6~Qdi8LWvq-UHNbq)4{PAs~FgD>&iE6$4N-sQNV9`(as zY!B-rgiKz+peI<bzdLs9QnEQ>*Yu&GhTG%cDjc@S@>anTzz3>H~(n7;KZ zDl>O^>3bNSf<`=?14C=M$W}Wr!kn}H@kQ;V{%<6Te_)(?_=4sH5cs49fFm($@mmZ-suaAWg$tdV|U zG07V0#AWVGb>ZMQm>@T#X**6hiQy1(@=dv z+`-B`HI3otcn=D^Lv?a^a0Q*$vO)%zEydj~QqoPI(qS$d$S+)#@$x2k4t5R43(XOcksEMkak6Mhx3No43juHO{DB~FOdc(@#+%x|HBTl zHebgGTSt+uGRgbw4^M^Uj2Ddlg9INTn`G1a9d`5;GToFzyXNm25A>y12sW#?b*oH+ z1PRJO3&}$*tMhm2nxe~nIV6##Byg&c+@MBFDHk>reyV~yiZZMFv1BCrmm%{?t zF^szwvQ|1gwTbP#;3onmQc8JDmzM9!cW8&AMx1%TXTbohg+iqPL;S$PIL#tV6`pe%~S zIJJtM5?B2@e7g!MfnS`#FW>mBC0s{HWmEK7Y!=XGGm_L6r*~l4r}*V3q(pm7l6K;t zswUts>c}sax(nkYLF=BNuvTaikG;}6SQ{$Lylj{o2xCEEV#_e?EVhfm@>P4(?k@7b za$p%F26xcKx3i47#sRNIbDXvT3FcDZw|ZcB3{B>uhT^tlzZ!UqPQQ6RjGmXc?g7u0 z=Dlc)(NQq`F!z1LNa-7%u;Ica+MMC|GR&xpFf|>A!SuMm-205{&*J+z_XPa{82<)q zy2;6E(>dcMY^;T}uw<^R8uQ~4XMTymSRG29SCm79uN%V~ zRrTxFlD0V(@1*D0$&WQABQK~-|1ym02vbG2la=UD9Um3aZ(f&gokoh;|I}}4zQ!u` zU*`_OysE;tHQ*a1WRvoYz5#1B%lpY3_5nW>MOh{G|^A7Q7o`qu`#d}Y()f_vv8ZwG-Fa`DG=(D=+z)c0%b}~=DV4)h^v=@IpL@Uq=-lgsjvI;NfZZ<=C8_Ju@z@D5dIBEPa9q0 zjzW$u;K0?q|CDvlvhx-EP9j>$xqQ9fvFDP@{B6(Fzg4{C%gn3!bvtuzwDimmOv}El zWj3X+)S8n!vvYe+`b6{N1LP{C#=n_S6kQpgs4clvlwDHu<3w~VEHHC1M%LxawMb@` z)J!A62~*G0fjkh4k;bMR+M<(F^q>Ah7H{CA-{@kxqZeKuSK^&%PL&1h^$Sm=jV$w+ zo4=ruwcR^8m#5_7>1@2z!eX|wxwe06UfheyYR_KRh2CbqH{9?QLZP=RzM{ zo`~UaY?(PdkFT#FSR-XEUsmmaM#fNP<@jnAFSlF*h9*LgJTfb{qt|KpL9_Y^VezCKZ&ygbW4>m zQJwtln`EgoOn-)--+`4y``MZWA7Oy0aO!v5`5iaSQ7=ivbcwliHw#zd5MTb8$>LcZ zdp=RMm5Li_J@^neg9JvGWx@d%Yu)oaz>6o)w3EQG8Mv%Bf2?C%XC^p-hM(VbmaWEIBznWlbH+dvGFI)PRI(^Fr$rVBMPy5E5K~G zc_{a9Kr^%Hp@o=fEi0X3iDQn$G)QGrU!LRK`yu{t#27z1eL=E3q6Q~ouTAi=AwF%( zr7MuFrofeR*mV=L?%}E@@jLvA%eOPG6#W~sB4Oh7OM>BZK@tyfc@U$TS0+|_9B}M50{N+ z)vNJX3#>O*E%<=ESwv4cL`apS)EcZAp`a?u$aXnoFERmk;R z99)vlWh`vL${uw6k9)K8Yh5yQEOz|JgvC(OG~z{jUH+#T9us9%C~xkqL}@g&m1~?X?B9j`24He6 zflbTsdNgtm7g%>Q3%y1M6GpX_EbSLB#? zcwxMp(UGCundT>NEaIjuEVZA9+?lsOIh|PoxMV*T**fLic3wS%fkgx^(>4-Y-B&U; z%}T?6^-$PMXL>s{FntKL;icZkOb;}U?=S&B>3#_UT{aet+d`H1tOrzulyI409 zyfW&x&e=tMl!g};&}}t6=O92{0ToSIbnxc(Zgf}U?CHc)Ik~eU$KS(icUAacCfRoy zou=c4yo2KASgz@=|CrQ=KUW~aCfZ@0u&TJ~9yS>u6&L=-9Mh=wDS2cV3&-(EATNDD z!(yWCtHO-k*?Au4J6TxJpuXJc!W$Ww!H=VtGp`n;Qb;D4!0`(?`6p`^LwHd&JzVm) z908thk#K;(FW}}d25;nqf*2q#gYzMx&dZLTvREAMEyVk_Ue4L6-T`EmyNFIE+Omr% zu3uD>weWCW4(fu2sRede&V~0_=poC8qonwbQs$xR>&1E)zwNc1u{AGXcNIe~pfZP}7+7~emj z(^LNbhQYQjITGXz;zp_>keRjgFt7uQ16d<-$$|>@iYdFf)V!`7 z>BVKcxF-{9F6E3bETHJqdOa{mh3#wNUn|{|L$e9T=jHce{N>FkH)i!=&Vejign9QO ztb+=hZpTcmx)In+$Sxmln~k<&G|LuZXI}>4=8r$S&rJHn?;6b{v*y>AQ`uKVf;4z?i29QCCnmT!_bZCfE}nLH6Y( z7JY;6W`Q?~aOW7z%O`MdMn2t&wz6ri^x~fmygij`HgWnkeb{{SkwNpZFs&L}XnK)r zJil&^KU8seEW5mRywYcKFLqss>6&SHAvr=NXt?ATa!K1I_p#Ooo{hnGGw4&M#@EB? zGl9R?(j|=ZHX&V2(ezc$-@Nwr7DAYZVeRlj8p$Ht`QjR{y+=V~|7|%8M+P&NR<7Go z3Y1B=r5qQ7J5qEO%fpZUSn_H6g+*`Lh$x9^~og z{L}-Ft+#JYt_skwYa3>p{Uxi(e`7d)8-FHYovL_YYa`cWe2|+>+wgF8CLfNOHm&D4 z#Ha62u!O)y`8c*D&Y9w7e}z+WI(RCL_-ASsy^+4kQKp`MK1)*lRrvn%*uVsqtwvaOqqgxY!RrS4NHn-`?Fa^sgOTv8?sK&svh&GkJ z-UtpMY0~3rfjgm8_x;g9@nNjHNJN`UST#=J+HlaEefomj_yOZX1*TNyj%5hxsQ<~BP8UZ+ z;uEG_#ame#&EnRrn)})J5M7?~a5a`{jB1(|8Iz20o8fK!D3FMC!ue-8Tc+ZkVQ6c@ zn12|5P5IxL>f~B(iCVweOgZaE{M*di<^&sMxiJ z(DCFw^ftq&`v&thI7~Aq)Fm5BY{w~cgNNMst_Bj?xSJ|7{@#fD)j{7{aEm(YJB*G*)yXV_|5`(Fa7 zGsc;5-%rRKJ>z5YY%9r^ukqPr`sfndU&D~W0;jxzo3sc$&5(+RbNo+qu@%aIvOL=k zSIy`b9Y)Res`B3I>$|{@X#V)Y^bb(SEU=! zcncv;$}c(qN6j-lE2k_rO#F|D6r4X7uNGw)^65P|`>L>mCqHgs!e?yUn`uXL>nDEe z##EQ^L*|O14Rjf6E~b}_B1J~F4`PA-yi}QWmBP`+`!yV+y;PyQx%eg%d1@7gWEGgv zhs%axij5#N89&a(6Dc@vWWiJ^8g`Blvb!zEPv@DJESiE}Ucos?G$uo1sT1x|$n>ea zxDoxj3%r?&QLWi^fKo?t+&Qe3^JeTtOfu#F;vr;Q62>&<+&0{sfH@SRz<3bcgDaMy zwU|by*Ub14^*RfTDTLl8{LA@-bnVQ}t58e2%?*>8`Yw)Zv{WSNDMR^w8_VmUxedQo zKT%7JL=Zupr|4Q@5JK5-Z-c?78`{t#?B^fcSv7w@^9mr<;P*C%b?*Yzuhsano+0zRNG!1+C7MYFh)5-{G znT$OS^7u1mZ_JO^!SbRxZG=Z|Rj6BBNK7UseT?kw1YQkgoDv5}lpFv)?v5anV*3$X zbOwJ?2^^P=?OI@$tr(oW6|WDktxM^8(|G^_g9J_wV3k+|=M`9}D=$pI-%0|juETnH z6#N}2^C!~2o^fOg^TT#ds7xt-z_Hu$;n}Vs=Vu4Kq8-3{B zo|!jtbY?b+V2X7tSpp&N>i|Y{hycgvih*B&D*Mn70pc?LNjbKQrQ@zy;S@U+9d`LsB#%4SQ^FS}}G$ivoaaL7b^e;`+jse9Nm z5w}jnlyK47IxD6e`i>GfrGygQY*5JAQs4hoq zV+eBk3OvvS`Ax$X$Vj-roy!ihAbLmum zn`O)B;jX%EUzDh0Ct#foprZ|-=yB{5qmfn=dZuTdH|S$ycbmmM=jn5mUz+pyMRxmQ zkKz?V;ZaA0-T^$Z3E7$n{5ctsvQ&JMQ8KYJ3S<DdnrWetix z&0>R;EQ$9Ok~lAVloBmVasHi-?zVQ%I>gS~Ieq4aCVc(}xl@R?ss#u1NB3$1hv}V0 zFx!o`?DBtmqn*oX>^L0nE3njZ9j3++A;7b6TOI!Cw|;rRa%?V{W*~Dc4J;yfzc}%{1}^z zo6Gj1kGW9iAwpUu<;np--7!f5!suQ?I=5z%2p)LA zgIX5)^U(n2jo^+s2x_mwbg3B>iqG<4{B@5ZzYx{Y5qCC!20ki=iPmn&I`+PX=aB;E zmu0|P_}O1vxyI(&abbS5qA#aT!A3KI4Y?7PSbuydjgX7!**Y49Gx>JNI>Qc0gdJbW5uO>C2rDC)9p&M2FdghW$8!kJeM)^ z7<`VAO_=!ry&m!Vg80pOebqQlR@G&_sclUgNBahR*$gLL1RhR9Tu@p_n=_z@4FMD`0Q555@^4xHH zR>^LKMY^G_6bn8MBiO)W7x1Q&=#}$YN}s{?wcJX~7r)V8io#|I5oZp)x%E^_d)h?e zVt=^Xomn>Eyz#frFdc`(1Jj=SB~i7zsyLP%t@gp+I-S~7W_w;_a28TjlH|7<$e2*b z-x5MDZ@?^5oIVf|S%?QZYo8sXE5prO)ay+}om!TG%Fo_V;0`yQ7|(_Om}MxZFUG0C zqJ_FU9vx6d7RrG1{1C#l(VU!#^F3IhEGPfRA(v3eETr#K)Hc`Q+*(LP2nOa7lE--O z9K@LmS!OY755jcoTfPyZHp|1kG37iGiD~c;b4Mk~I2{5!#Lp#ob`vg0DR?a#s+v$7 zVOWtQ3UAb4)fikgx21jWpX~2H*zoyC@!I9*2Y>=QI~6Ig3Be#8z$zX{lVCfl!%&mXm6EuAjW^|I|6owyzT161ta zmtNZtQ%K;g8043C$8YQA@4jrm8p~}u$(xTaRv{>dz_V%W6?->VfgXAJ>>=*e7C7q> zR`u77L6Jf_2XV_#*1N_>wRo^A8dx9BWk(%jSR2X9cM*%}1=t);NX_;S@z3P*(uqS> za@|*^4CI$ftay*7(=cN@9#bNf3LJ3}r))(Ol8%L%!P$(||0K#wmY8k*yV#vKry$aL z?cJK6uOQ_pfv#Ct{1RLJq_TEZjznxm(cbst($PF|k@tf6Ihvhca8Edc7GjQ^4ReR^ z*Ak$-z%Qftzh8JMU%_-K*(Zy|^;S};%RBKrk!bB(aJ@f0Uol40)>u4iEZU@O?3kM= z+Hw3i%$3kly|kzatK+cwz*45z%?HtKCi+^JYfVC6I?>zf!Xcx%>>>Kwv~wYqg$q~e z*`($zY|lJA%wf+wjauSA280S(;LLAbx#a~jMRLhK`n_ORXU+^lDpSXU#ZXNw#X{0nc1uwQJn*2?NbVe$UKOnvEyEMHb!$3&;N{Qx~a zBhnPVtj27U<}E|E7h|JF7*$K)U}tU`8-KXCoNIjA?)GN;)lzeSH$QD9yK&M$`fOsJ zB8tnw66?4p3Hvt1AzOkjABw>2YW0H&EqX3|L)m-$6FR_gU#ly_s9&m zRu3bWIOZz*gI@Jnz90YYhHDiScZyPR%c}Gm#Pe^NHGm~wVQd@G{x(#mP(9=F!xV0x z6(7K?bR;LAq}xx%WZB zO^)zyOcZHxu|ApMMx|r9jr2Uk=8L%R7FJ{s?f6V)I)pO)b!T6jcpZa|sY9=? zsFPS=x1?M?2IgE5?S$0FPjoWZ^27Yu4GjsG zOpY$5mn#->_%fU`H(ED6lLYh84Av~if)yF?#ga7E>xU`Ufs=)K_5el|6F9gf&dQ@= zs^rf%C3!XsolMbI`LX_7>@ZW0$;mh0;cm7#C6%H%VxQcg?a(aMh&j*tDvfGwdxPjb zip^JW$X+(c!ghgNdzwei$DihWXOqPEb)2=EOZKvUItxKK`WDk_BltFMJI0M;5h9LZ zP`K(H&BC`Qu}%zU=w=MI0oFHu1P`OvN))oS(bR%inniSr`^q!fnV>gQJ>;RZJTZwC zuP`7VLS)rgWcoCE3c@5e#8wtES8ZQIE-fNh^snO^F#ef>edxqV;W%&qId(ETZe+S^ z%$kP1H^L4>VOnZkhFg=pZ6s-%(W3>=eZo|^UKFjXOJ#pue6*NC7pWm`O6c^;&Os|# z{0o;f<=$4f*iN*-hMc*a-w$$QQOvL#JLyK-_E6>>dfUvNwgq1gLR!^ zI6p~zy2)meG&|>D+u^o9qx2peRYfE>XIm{R)A=HQTY-hf;i$YdPTK4u_vHB)R|W|j zm5tl-aPb?*xm38z3*eqTY7TFKx{@%&1yIO`)kO?uf)RGUnvM%QB03!FA-?##jwF?{}r>0J4_3GQ3}g2%Gm z1?K;R{)u$QEBP|~S5NdM1uc3`W)pT$WA+T^oJ;U3pwflvC29;8{b+IiX=#%~$r@aL zn6K`TS24#r|HxQgEjN3FGB}2BjAAKHPsT7uVs7ujzl!9v zi)(*lW+xRMsmU#)QP8~b%YoWBi`gdAG>KUK6*s))0zX#S09Rw(lwp{iN`G2Pkg|+XE+WI5i&7S$k{dVL53=ux_;ft zl^-1oOZKnJ^DQydMtET|XD;R5SPN-d7e&Syv~qk0X6T z(f$s?n%w$}ls5RZ0i1jnIc$wleKp-q>Hse5ZRO6ps3eEVzqu{p)@1V>3zYii5O(Ah z_-!QX+(BdORk@Bl7U2kL&9DGo`HJ@DO_Ilf-pg z7!XEAaNTL*Dqs$vr8TNY=f7j&>?UwoHulKN6Kgp9PJFULOR}XP#k|@I&u!w4_2jR* zsAK|8lblNxBYrI>CgqM!Jh+U3<^`BQzDBd7?ePun=5k_#W>BhcmZ7sN|E7Y zj^%knT+JaQskxA}*Bsf}P}Nj^Yzn%rv!{wDbI`?1^gy_%o42uZEON?jxz>q$oATK~ z&MOsv3fSG+STU9b4E^viu+1lN|6uE%;_b9&4?WpK7Gc4_{v)9nCm< zwdTPysB79ir7HgoSEe<_RbhqAxGCp=zvk%*R^j_pM@~#bXMr_?2>b*`xye9Uy7*a2q~ zQL)L4xPV6XX9M$F7A~EfvmJC|K5p7To)_cw@~CgB*}MP?m&7KMSpKUxXev}%D#DZr zIVcCa2jhrL3E#~lWHHkbgSN$CZUuo6+i+6O03X#G+vZb#JWfd5T;s-Xz6{#NriXa@ zx*fiLHi;)LVX*aet_^*))C+T)sIFf-`Y%Fnv49~{a6v=IL}`mf9$Whcp(fHAcNEnd zx#jIy#g&^oGvzXV31r8sXk_cCwe7fQ6}sgUSf~nXFJy{4+@GFDw_=CUaz8>Mv-<#> za$l83Uh@c!usdsd^WPxui{j)eoS`#u)^Gk2QwynAVt&7@C}Q6jP^>3eUK*nHz^JVW+a}x(hKuq9rN7 zj8T|nlDKRWd}>!+E=f!1k^>brN#K2BUNjZx{iD8b#Ww=Je7)HD>3g`9@*#kG=uGCnl1wwe$A16gR@p(oXrD^ONyR! zGB>YB8msc#lOy`#du@RuO7rn-cy$%1!!>FD?{k^PtkP$yoxPuByWkh0I z=_HhWv1)SmJ&k?c1RnEZ-+GQj3id|!@I0h5{$JX{UwhG^jlfa+nBfFcn&l0v$YDcx zcqUy+F-ru`|KO=|)W-Hu8~ohsD4k7z;3Lc8p_Hhu6%7s;QY_FulP}Uh6viBbl8gQy zg+!j>&r6tSE%*3|Yc^0vvL)YCIAH3%f3Qj-$})D41t`d+Uqtc+c3hD3ea(_>Y`W4B2I?@kbO759RDv@v&o) zC1R^|Je{7dclrA>lD1W2ic7ofS^Vy)kE!5i7If7^^gA8+-#K)XX>dbg7Rkd~>ly4y z{~HLcDcY81bYFtz1qELIjyhF!+X(3m_SgV(HPoeBgf0n;5Bto>6o5#^lbG5r`@0c) zEMuC@*lqTib~etNp?O%d<&ra37(?_SJ%mjMqm#zWRb}{9`^ikCI^K139Bwrh7~TuD zG#6lSVIkVdwe1?F77=n_E6;tIdLML`=whor3K$@v?&r5?LY!QL98H8{*_7a9GMJ?e7(JTAG#2t@?X zuYW1fO2y}jGGHb8))ROtoSt`at(rh3Q23v9JB4}Y)|uI2vZdHvMr}glqm{N7r{^K0 zu_ksRED;ks_Ucf`%a5bAD?!V z3a(b?l&)NKf+3l)%y^o$yr_8-^C)z-lcP4U(>Hvzx%y#I?9ZSId1?zuRh^6P@yH`S zPRu8zEne;we>-A+QN81sIxIdHMP)Vo-&{xRb}TbhO=|X4&b(lgP?bGM%BC@V_>>=V zqLV50Vsj*A60lcl+aW&u7nURv^`ohiUkduokB>tYU5gL)^WP^HD$Y!UvE7==+l19V z;)nP|=XqG2ShsyPWv^97>3ewjFON3HC3zQ=ZXjyGdzfs`SvgF;uX#e6}ZS9(J4fa>m+1PYGxRK2(g{-Ml$oy_=L;D{5icZ(~e{D!7MhG zzVp~GfR6{Tr}9fH80}T$v8li#h%;{CinNGHqR`F!+9;D__*A5D7jjD-^leIZ=B7LB zQ-(K#SmrRBXGXNKEJh~I{Mop-HI~@lw^snI4x<0-BIL>whP}sTb(80&@cljfwSSrB z#%$Z*lv!Y!=6tplk;4Se@4#Q*anx>`zKA3K;JPu`JCvBqQGb}<2h;MXU3(wN&@NoP z2Ohx!^@VTWH{`WxW6*9iG*Pb95Ew9--VbrZe9!R)Y%vMZnFP8VV7YUwb(Md+Fm+dc z8Oo0Cyk87U+vvWi61p7LY5-X@o6)mA&&)xOIs#v2;XfZ#GaFkx6m{~dN`Lu09!SF- zHRybV=koJgJqB&%(av1koj#A*{2pe>^5dt=t{xn=8kbChKYOEx{m(!1YA2FmtJ%$` zMne1|d2&A*8!zrVaq(7Wyuv=oSs{eU2D3{LlMIZ1&MHzAyG&tFbu4Vo`csX3)unuf7 z42Mla8@I=w+^W*u+SpozlZRtSK7k!<-y*+k<*g-bx&@JX-eM(Us~PbZtDvu66Z*p4 z)>I|kn0PUZ$Ff&F4j+c;CW|L2d0)BLtkukS9b5De;Vh)II}g4_QM0s4)!F+KPMgIZ ztcJTLj~gbBuisH2iIBTxgzQ=iXJcII7jCV=6SKK8 z4fAxv{#>Fd6J4C5xgF)(>fE7Z3OD&I2|GQf#}D5CHqD0*#*^p$&|-*MX<riX)ew-Z2;V&GAcTuCKsJHWSd=n0v%~zG^ z)&-%m0Jfclva%`sHdY@?!?r6KbB*q`8PLX&&5{rDazh=?T+JetI478Y|8Pq#E}a%1 zj5kSc{#e5&?^*9ETA5=UAScc-3D|u-KAEO$zU?@vk1mCTTrbVKa~PmFDZS}&j=7$* z`fMcVt=l&AQ*pKA@p-DZ+4_C*8prWoMAa0Mq&t&-#~N$9f)BSeMl$^ukLKrr*GwJ9 z5GQW0iHP!|MO0$)x_Des;2mXzc!F})i%H)xTZLIZltKz?JDeJ(+3>Jk{LlB_*BW;=_Yr@Ifj z%b3vBB+_Flv+K0S0WQdfWHm(HWc;Y;MUS!Z`>Qf%XJ9a9nKii;!ccV_BdqsnswguJ ztM$eU^AWGJ=+ePkbZvR`nxV{jTssLK&45!#rKPta6lwS%uoZsy)P<``(P4Hi)sS zdH6H;#G%SS(RwDgl)wj1${p9}YEHm1+n@9KN!Z7}Oz-&GF?li6hs!&hNR|fIy zapq`%NjAdC4MlA-8YR*T8SNuP8w~ojVoU^^x$wPS8}$?|G9U8hQH4{+%*#PYX-_VD z%-Oava;LhwWV80a#o}^WA-$xBoan{bRXMqx9v}E`og-%@Gx*Rq440*xe3ylvn_;`@ z^xFz7)tUY)*sU%fTt|0PkP>aU;5uSE2|OOk{~n{J#L3vT9Jc`-D+(jUWJ7q z4Q9|u{w4dd1@ z%^%+L@JvY2MGy`vvGbnQgr2J_NTUdB^tFL6&l~rm0SM(}?%huj$z_NUJWamUZ(?J8qoG zM$uee1M|(-I6>5JtME&vg2F9@9GU@FNeey_2~S)@bCc6M^EY}gx&0ZMn*5lK-7@Kn zCKonm%uaMLF&|Q5=)uTI+ZRJZMd*L zwm5`z#?#f-8;>5G9)chJ1@7@-=eO8dRp6MkiqVVP*2D0OyycBGM%|Q-X=3qPvg7Cw z9ZSJSTUgxH0_-RkyyEb=-1Yub#JXM1>$ zo?^Y!Y#N0yNrbDCXibC783pD_LEmT`C@1hoeWE{So%KD;NS!f_;NyI#U=!?dGlU$a zxbiz5+U*@C)8i;sm}@%Mo!eidsww!9x!e?k_Qv=$;XL!kkp_sbdN6z-dPIu4Hygg0 z)VC8SB(lG2+>ISB5U<&CAI_>hOxAQ} z`6SDqMaH56pSf^HG=|ApvR+}G@I$s-0=M`h!u0;Xu0r1S=8y+?XVcDuVJtU}+h1~O zW43#Nzvhw-BsLdZU5dlWZRVS&Eq4NwY}j+V2-#HvZ^ccVH;!p5M$~Xt{KRPu zP|}tJW%XZ-&CFX}5pDK*<`8$E)iwzxPRxrL(AFNmmW9SYTYnfXq^-jEROXls^m)cl zFWB@IQ$?eZWQ2@1orSGIAu%F8RPBKKoc9{_G`BKc17wkM}V_z~6ce$85E6#yT~l1AE2btsWTYK87vyX4b4HR|?10W3;wDE>6xW znUSEn(W~&cAD(*)EH{T!=Q`r9a&uR7NTUW<*rUJ_#c^1Lp{5PvJ#=}fvkQ3sJ4Qwc%yNux z{yJU|@O1^gt%a4QF3nwery>rU@ubYeG`To&AJe}^nEm~OYNCGbk5=kF#`z0LoC$}l z#L-~4>@0l||JlsrQi&B?aOD*~YQe-yP&`ny(jE+3kAocrCOF3oPjJM1+#Wx+XoKT6 ziEVIG?r+wLW1n1w*XU*Mh9!mv!oL0vD_gv zO{a=C%*SmhBl^C|tk4IM&H{7i;N4#F!A4W0;I_vS}Mlf${E^yb zf_730UXN7PPF}oCh0*@H5^uVT_OFluSOw*P?u zbG8+AYGhITd-sLP{Sij*lN_kD7(rYWMfamjcZ&OCc(9h^z&}PC<6ksms^@sFUeXgf zCXMn%1V-xs-2(hDtqW+%tpO-mS)f}aUS(2W|7UXeUXd?uGtW!zxyoK|5ZgzzOxfr^ z952letJ zsHQ0ZjcVu;XzMh`=}1R1sIx`UQs#oZ=JT#eq4wd6$)l+o`_4xJ8+oT7x_!nu^H#A5 zI5#(2PvzUTOf(qPZCzY_I6E!F=9&U^&c=Hestpy`ToFpX7 zDN<+@*R*HNJ_zU_+R5zrtRdsNX>~|_^pu~)dQ&jZ&HVBg$>kS#G9fBUUhs_+5?7wJ z>oY+Q*13LIR}Z9K}sv6q?hCF8yzL_@$BQ@jgZSotIezh_8t7Ifo}^$eZBlGONyrL6q_|9WV4R% z%fxRnIOrv?pUzhphb_$$BAe^dS#A%dOxEr4bKFAw>@P4`5k4!<)ltm3hCR>Q%Lo55 z{B)2}=Xh)lXWc@Y7OGV^Jtq%ApK1cDq~Q4gy2f&4E$$D(OEX)&zljXwH${I~!K5EC zbdYGFCD`sP_Q+2%OKx7A!W2*VxE-$t@ZbmE&ulpj-wLa&Q7c9sz^POMmG5|jHogrL zn5rH3+`^ik0+VLq%q*N&pDE5V?l)qr(*wIO(_JQi!Dqu^sd!PffT&eQ!p~;tG+l-4 z+{(6lSoEBwSrW(r| z+X1RM<_NOy#Y0<=HaDv|?akiZ(c6SxIywJ%Be<`?iYZud2Yk&zEH2MMZE?<+5IK_b z{vt~Wfzc`H70l%yxO52z|G*C`?y-{l-pA*U=+c{`B5~KcIleddKgY>@0<#t1-;#Jy zTHvif{1&&-#2TAEj$O`Uk1;2<8JjMEi#1nxF1&52+RG*_*Wz^UK>xQ|!}G*8-rdb@ zHF-!cd8ooAPF$3Y4~w(5JF}gQe+BK5l3^LS{hggTY?PY~e7UJ3yI;rQQo13qBMS#J z=}KnO))VW-CsVHoSKhx2Pjlv1`Xe^A=qEILuy7&1r~*%OT5K znMwRjWSf2(+~&mBXi-ws%JoJ4nVJ4s=(&oSR&o7DWHPQ?mgB^CsRUZvJl^&w@{6z7 zZPHT`yV){6+^{C6gfq`p1X^EW$}p-kCjU?1v~d3KCeE0r|6PPvs-vf7Rlf1XT=54V zOuZw!qrdD1B}{!{!*E)Lg6YL{nV3wMJ{l@YnUeR`s{nT-HWSR@$3ue=rk-$ZQYLi9 zM{~0qs<6i=WUwymSMtZv^i#CPR=m>A-WsOy;fIZkJIK1ueA@_z>Z;a7C;olQJO4O5 znB7O?kSR}wK3pH-c(!8n0rvWY&(^P)+IVLyY}ZK0!>{;fT`O(9s$Y$J-rlN@Yl>kedrwbW!}n zQ^g)kG6E}`i`roaZkmv5NrLe^#(JvfSZW4cw=yH@b9uOuIN3q+IMrkKGMqIC@52P{ z2xH6R$ZvmCrVZO}!duPUdacCpc6>I37xHj;8`LQ%nqN&;I)O{=)bJTompbKjap+9J zff(Q~q?S3N1})(#Hluc+kijJwd;=clL~c6qb#lgarE_`okZHu{ubNy6iKJZkD;eOt z@!au!=uI2lu_`Sl=#TNHk}f4Be>@Q9Fxtu@oUpTykYd$^Bu{Tyg_P4JpeiQy6V<+; zpiDwt{#Qu6v#2s1bca=|d80rtU8S}%_vrP-!_7oVg5S`4{2kOGM$t<%_9W(G<1zFsi z@0&7Bd8{^tTWNpLK>-Qs;Xn`Jv9`8&WU5<8Jmj$z^xKC=-U7XJK6@*jzH-bM=AH@9 z;i6@Vrqd~AJj06nSn(oSC((Tctc8F)y0}-cwpUgbk2wa?25 zu#qq8++&G2_DIhaE$}=*w73&E<*EwJYYRzMlvB5`cj{WR7%YXzL96iqP?Pccr!bd9*o>)z- zwI!L0c}WlT2cOJ%j$h}fmk2iPbWg!z{Si7;V9K->TYB^}{&Hq`Cv-G#d9*$^x8Pib zPuUy)wXA@RIQTSz%psh&0cagCc?#B=V1|@owdW{wv6SMY#4D?qt+| zQli8N>u-+5SYZ?kQK6WIynaGa7>r-U!KsXS}$tGkk?}Hu>!?pZ;Xw zcl7&%bLRM(En@vUI3hLXT3@E=9UuGjd|Nge!PuKTnuJ}0xZx>-Yt!ur0*k8NRez@2 z!Kt5EcnxZ59fEFhM|#$#|1hkmCh(REON6uLbM~*!Ji~bUD3$Zjag2O`iSEB-d`w*O z6S%ZC3&rA-X@0ankI#o&B7uEBI3hcsmss!X#j>Sv#r$QRYD650o3X{MXS(Nb9W2nR zHOiX#Kt18}#2iwQHS~0lfDIZk)g+!(Eau6AK!kb!cR%8T(6*8g8IcU1-PPnVn|@A|r~fFr|K#7Ayc2@W z*1OK*@h7b+Y!4AKDJ`>C=QQPtIF6PXMBQLsB>DhuSsU4#3AydU=oY-Tp64?2KsEd` zcYb0pyKO>5S%J^b-w!2SnOIG4cSe%e8b#by8stuS6L1?6l|+q^il8hUBv!ER4M{V(P=5;AQ7 zmYWy0@Mt{Vl|4flyMv|kv5F_xZe^PwywE7o*T!8bBj;9(kEFLhfXzFw-BGS7%sEv! zw+<_85dT9X?a~#20 z&4f(54fRW_%3#fwJUWwW*TrWFI$;jum|iMjV-J2$W^X-8(0Wtz{@H!)YrgspN!*k(Q>>u+ZNjXhFRNeBPwsTR9! z2+f}1nXL>enQsm}%hca7z*pe-0QP!;s_6u>2@Cl# zf%s3czs=oj%Y+-Y#PBkA|L_8Si0|;W#ccX2RDk)*0X&kJoWvWa*<})M={(q1p77>Q z1;MVaT75z}A{>q+*r#*COKuWf28jObJnG8d;6-C0SF&>Xc}v-F-;JOBnd&F2j>k+B zVljUe?@HkaT#B8>Uf+ByTLHDJ3cQ%o7Kw4^**P6IM6mh{tQU*q6LiUD{G6PS=PJg3 z@rixL8K2O1kf;NbGORLk=Mm_gl7q6)wGJB%W%xSOH?269iL1)9u->cta@98W_(Q)* zY;qD6imULm61QG~r;WdL2c(w;A-A#VY$E1(h~}msOI(pf>muYcAzojF+nPpj&&IKv zoHheh&FB58&dAOzFo3m+v+QiTZs7UK%+w7>>!|SfO3bRIo1U4C`350c9s*}Yu^c2n z!VqkF+|Hf5PVi}qv9U=rxdb5(+m%~Fm*FT zx(m#$4NDif?KXE;WbG*yUA?V0k9KZGtPdA`v9S-S3k9=|TGB2rl)qo`z*6(y7qGCq7FvPVkMpok(Xl`^s=dt{Tn zw<3G*O~}gL{H*t!djEO8=bU@L_qq4nGw$;|_nyN=LlA8$jwX{0#^SGXtW+iL?ZmU0 z^sYts7qs}oUiOSXhGvdZc%vb&+`&~9g0qX|TTI@ETb^`gT1Q4kwm0MOIcQQtO3$pK z^>O?YOG@uDh!g?Fzd%8zwBnd3{F7U9=1f{=qo1w=RzzTuFd5y(2{PIbb3}PjN~P$2 zc~+~0rSSrmlfzXbVWU+7I_a_X>pcWK^a|OHr1pAMeWONPA}?Vc@`Wdt#`DnuJ;^jo z&TnNgr4A|-ka`+8gC=$yHw~8c1*|!nSFWM7_9Cqxig-$ug|hIcffH9PLC^jIMwY}0 zbrpFpR$f)))uCl-*ocEJ((MrIfX3TwvMwO-36Y)|=7Gc0VeXbhU znTbG(EHzY$J8!0WCKifwDSv%OMrhyz^8Y{8%I%lRX5VDr3Pa9Yr(c&9Nv1DsQY?36fo$-PY4=Kd)Wp z`j;r6;@hwce_1lM4s#;uvVc_%W4!PP9mQy%qK-ba5N(U|w45%LaEU{4ewff2XTVR` zhw)B=cs=E%T$Gnv@_Q*RUyf?+1-wy$L!6j84ilA``%1_qO#5A61f%!EQ=QUQUly0W zg31&B!}5gzK1y{gn-???w{)t02C;1jo~W5UJc#Fmu}oFQekRu*I za{7M7M^#yqx>!|B?q)6ufh(%)DJo`TwQc)SwDsiS6O`D;vK!8-lF-6ZkZdCrEMykB zeF-`g6eL77*z6AHeuS0upIv1$N*AG5ND^djY5JYw(*I~UkF{2@>N$2TiW{QVsO>Ao zn=8@oGq#xt*!v~@zadBE;o%HA9>?jD0>-8DvE)QmrIgp{1+ZINF08{f{eTIoOD~mT zt!mR-xfiCq-Db@`txzvSz%9{wWTk<+vt|-5s5)m4qG4SYoX)0)c~gAAAM6np(0?^& zT|$mZ+AAj-X5grdja`PY_HeXRCl#4QtNZ-+jx!3=r!wo-b1s{Njs$V+1sHXOus?&F7+KwC;#DBZT%olFwE#DvK7E@I~t5R=7}`dDCYqUElF( z3YYxA$>u_}St7%L)|$QRAiL(qHtiAe0U|NE1`pVTHIU0-pC4O4@WsRa8YBC2FrVDuIFuNDwg8;OSmcmoj^>xpUGzO$ITfTqjA7(D$*!B3TvvtV; z%k8B{P?2t05NF*52@!X|u}%2+6u-RU{RzmCeqe_7KoaO||HFlUIie{mpTZaip&55& z%vA)6r0`cklvT&MN_8r{B42gmpZ8q6f@@A8|GeE+?*4;S#iY2!0E|@i|0x{dAPbIn zW`O{FsV5{`z29}6`{awLq!z4v4MAd8(0&t6DN`ggk=H$V)D>`sHM729h^Q-vHQ~{n z|IcM#mbFsxP^N@m)}e7lX`^{9LF~t3j|@ETupFPB$xFS7qH5x=yD{=LTmuA*yNT_h z6Zoskk}(0Cd;;%O)M`Fp-RGDl9pb0LJd(^tIXp3l@1LTin0gNVi;+6|Ocz1k?_#4r zXehRZJ@zo*CN8%U@LWThjbYmz5;ow1J3bi*$+GF$x7IyLS-PXh@DEabf5g- zXl0DhUmaOZ?d1q#UMnf7SN4f^Qg#(T5oO5_W0IMTrKPl5BUw-WVYmq@bdx$u9wI>m z5oIF;`8$NGp5Udj&F>*oAUZv7e{zvz8>ZmJXp=k`(VP%~ff#XkyrW z25iLJ7DB7&m=_}&gVf9xwx>@dBc9QyGDp3|lLVm+HsiJ8tn!)(z1Vp>lV5Xd1ZRxk znJe5>k8As4mavtFOYm+@&i_f1+FaL{0Uv2`n(JR-{zNG(6^1hw(upT(I9>bUTtPuX z)!FR5&iOB3Cd$K8ZQ&*5@X`sYQJ*2v7_59+SP^SP6!LdNw)UgvNz_sqtkax{ajdfd zA9Y$^3JHC5kVOyC=?E^VBp0`$^F{nN6>#lLZn=eiqL|#1#Gr-nResqYmG`hPlC_N_ z^+ZKAJvJ&gv+BT18pzwk!oiE=%sE%zW#nGmZY|W~9i&R*;_^8bR3-N=NB1b~ZzrIn zJwNG-m!f{$TZ@UFsMlY>q78XHCONND$(MOBK@hlh_!IX~-_=mTJgql@OsB@EO zlg-ng*z5y5#a?5SPQxWHejkx{7Ke>$u9vIxFE|WdR3#91HawoiDg`I z6%)G%?SLIG*2*_4w^MOMMcYOh{H7cY(hw|*3`sr%LlI!y(iQM~Gr6?UwMXxvQr6Ly zhSeAt&5l9nDh>;-D%}$spofa?QXRzRHrzj*L#}h+3N|}~0I}12I+>N1!6{C_Dy?}T zlsCumZxRZtCbU$8n(2X9=^p-RA8nHHQb&I`P>_CeX?YPRbh(q%j00O^l5~qV&cQ~7 zV~~pMV`EJeI^ieR?#EPJft(#K)XTLvzX@;rLXL%y7KupVfEwEmyRomZAVYLfaC#Cy zuEQ;5sAn-+9^uxL{O-z4D^RL&CSu=euwLN=5Z}Q z`urhtRvAW%*_>5Yat`F5U$-j3-j#VfOL9YDqLKW6sw%FW{g-G<8}HC;7@Hh}sq~TC zob)4`*(?mVT)=@A*rhJSQG5Vv6k_vt`2kuBnlL96U8Oec zw0xkYTr5@oJ5}eC!Tf$3x#F6Tsq*r=mC&=m|6(5+F0Rh*w zYbMq#Jqvx+G_G2qA$utOqi<_A?~6KZ1gzSLQ9H3m*%;lP7oTBzPXWXG@XZB=JY#|p z8&&4+EnGaGqyONTw-ja@XnHC8Z|oP2f=%RhXe!jNBe`}b-{rDpG1eRiE3y0RQGr>P zFjN*OtSFgJp|!uUVMiD9fjmYdC-zg25E@mk-=Cj!=|wTt4j=pTsG^?G4o+4 zlTS-K)^;YO z{xn_;D>YveA}~h{(raA}?cB!fk7zMM!27=tplt6HD@ebUOx}nsYGmhFu<7Z%BNwb9 zIexqHXao;<cg)QK!rYi49`bP)8tR-5ec_N;jyr*9F$cV4qFJjCPowcP=59nq zmFfZAXmyRQk9dAOYUwJgo9I6`*zn&Id{$v_3FG5fd{+G#*@Am|B3xO&{5K*+YVuQ1 zS1rkNYoXc5xOgISU!jI@kY~#9Q*WMlO2>xWI-i$z^VoGnmX$x99W2G8QgK3T4+7ON z#WrW(69_FQU}SF|AHil1IIEEaIY5N!x|}6lk%|%ONcyzq?c;2I8$U!Cu%?n+-e_|> zCiBT0#wP4VF98%i6iQKaXNn$SfzOj6o$Pa#=n}!-Hi#}qNIJrOC zsX6VSqCKD^%cd~nFVEU(wClDRoWGL?Utpz796dbQd^L*s3fOoBTU&;i=dXPLViY@r;~Ddsj_ABP%g_vRnuHbU|YqX*obxfTRFfqlGeO2~ECga`LDI z92ZgMXM4uH%Kt9Yr8vt4GVK&^wUQXLtaFAxpQ4UP2cV9uyD#T|L@}Mn@FR42j^C@ee(p_R?Phm?# zmNAE+fzXB=V6_~sd8x_ap4R2cc`Vz7;WN2nJ%^X(e^rpJiqIyA)kdM6T9t_v*dT;H z2YImx2eiO*nQf*nWx_A~Q(IND12%}&KsU7lj;%Cz_T(M{R!w2rGFCc5w`!c7i5@Cp z8@h4xVuY(*N+`>do_ORWphIuT1HrvHoSTLDG6Ecw+qNG;Mwmwm;gj$|$TEAjMObbJ$~Md_;_`H1ky!KWL@Gv~DgZ?Zwcx0&efh zM`6eqB;cE_sHDQ5_YQlo8;dl7jo1qoS(g6RN{iO4hx5K$z zI1^$pSW4(vkY{|bRA*221jkLrdHw4!Tbk`+jAU^t%)yy(=qI#bfBO7}OSpiQtmxAM zH^sHHVHGaO=8I1ZsLW=yc_NF2Jv6z<#FcDQ1;tdZT)N5SoUj8?UUF%zn&ZD*)=Ql8 zitmfC)BrYm%ncdLe2v2~+GZqge8(Ph0bduR-36Q*E})4e?KYsYOa@x$lhaTgj%RNv zndHK!l0ZY1s;4dcyR&vItyAdnokssLXb(?(gtOe4zGay{i-T8j>=DcsUBXQLOYUSA zSgv_5d#_`$Yw!*cTKasZZf5tpyyC)xYcNEu)PGOW#Xj_+wlHc{L$goE=HGBrX3XiGkO(bRWWRf@>&}P##2HetrnAoMAaPAGfccD z2ctNoGA$Rd*I^oja?V^NO}l1!sb{cJ#U~(${eEF$Qvv*aCLK*+{4&goc;uv>c&27;}1DjE)zt{rgRNp z>Nh5cB}~Ru?Uq*+rp(IE!Xitk(N|%wOX9Q%8dYw+m4NqL`Fk85*AVccBoY!Kz*ZYU zh7aP0t0=B>c+HyQ`yoNR5hlCJ<$wqm5@hPxqcW?`$K(hBw;y1g)2#DYUzTSsVR6|4 zKZ`Bi;d3=9yk$hYn}|^EeXGoS%k-;n1=;fyf@qNp#2Ct@vg%#cI#T6CRbG+2YXRJN z4!$lz{ZGx|k2CCX0sqwcoA+YreRv?N6V2LXa03HGUSKARxcm>x^Hk1X72%+YbX>vn z3-Md$dvOP$N+`vEMjX6}KWx~ks%}D#eSyj{dJI<&AGd;MKH~iZ0iU^X$7mc<7jtAe z&33cwC5HBgi>K6$?<>@L3vg0gCsNdI_jae*ddyc>I%7ZQyud}3q<-d%Y(S4NHfhCK zlIv!q(2QJJc^r)NmRcwOjON9$QnI-dEjMDJ@PX)xdmd6~scomls9Vnn-Gxk}6 z_ag*!pTtq}z#1oDupc+fyjhu*XQ~_s0nGwkn^4 zgN`t(6kDxFoLaugzBJjEAF=FX9o}EU7TbBOA}We0L!nMm!EHJ$MOgEqT5xqCE}FrO z``E~zPnKhWFojP7cy}nj&f=zhc~OWFsncdy2zjCO_UU3~!zylk!sP!LIS3zRB?GE_ zO)amHXwMfGa8gO`cETSW>NzJqZ;S)>0=8ZcCv`2eWEy$EkPZIAQv3}wR%5Z)8*EnY zNz~CpX{}c69zCq*fGq8D-_6KwQ&- zCHe?r;G!vm3hZZ(26U5?gKJpqtR#)*rPmDH$_9UsuC*4*H$NRkt}ZBSY&feew}x}M zIm1WcnX%9o4`Ychh*onrun(hF;r$Q+`)^_LJ~Wdd^I;=?p2^Q2Iiq-fd_>Psp$;mJ zcA^fLuja6IAr1;fhTMnl9e89ot>?2x8IB9aWi>WiI-{D*3-Ur@z6zzo0#-cDo)R-g zT0)XK`18K3FcfKt0v3`OAYy5-PFGH-M61qtrQYMJBw@?QKOYjbEk9#-U~{3rn9WZ+ zY4M%8DeU_Ir{uj1)AqCU3tUs#s*#QEGCjDbJ(2u_Pa3myE{}NdXduRP7uskOOe`i9 zGW90EyRo3G%5;`nwB&VPUi=|3>#?JtRH#}~s80*?!akZkW8hLY$!5hr?9-1!L%DVz z`?%2bFmn#msu%W)M}b|K{6ThugpS5HW%Y+1On-%tdICNPW6pDw5!1x2CfK6pHC81j zpdvROgNfRaetr4-C=Tf=AYNh+-^owM=ROIZ(mVKf5_+fN_#rMAwkm0>g78MP0+)24 z*LLTh<-4ypvl~sXG5qnE!_4T`i_f0(S(Y9}zIKOQ%5m0x{8a_2QkWZBaD9JTujSGM zDAGV^?}FGf6=#%>&(g3*7Jay^bM(fU-!foPRlrBDkf?ULlb8|RF;ev_x@w;bnX_0c z_G`_^aVV(#t)+H3tPkz|;j9+m`~cBLh9vTFah9ryHC2S>ycSn=496!5QaBzH)f_qu z5Tto12MyGoBHjzdRW~!DX)bv){_DZCUyWyq6 zcI7RW>R?hP2vTGSLsRfZtRFAg(V>@SludGAt3g<*%y=koWBsLWh?@7ZK@6SDtsl7A zhF>QjP;{CBR*YFi%RMw+ou8EDkPMf;+ptijN7EQ`(J+i@DM*5+kYp_Q!+IA4yhQZM~#Gwhhp2rgHseK8q9)P-P&i~!Qgc8zf%L;-_w_;W!6sRlUe7J{ zW(d}_63|V80Hkrm6ZVr$7a#CwywD`3Y}<+0t)1~K!_uvhq10Y(dSKfqmv&LCas!u4 zgm$~Nyd0)|lxA6!6O1QyqJlTE#y(EI%ui+Y8FJNEmUcihv0Lb_Mk>7&`vt*Gd3wZ{ zZA$RWAC9fT|FZB+=AZqGb7vLQQe&{pkk((}-%!Ak&G~2)l2v#_MMt*wI$NlX7}E9ZU3<-Al2mCy&okcW8Tq&UcCOC?yQS9d+x+ zvav(N2j-*Xa^F!dUsR<0bd}VwH}4KZFRj+71V=2!+ynvd6rx)LHtNget&k#;fOa8r z(X%L+Ai{v=Qk*l+JTe zH@LeAQc)ik|4v}S%={;;YmMoi%HXT4{}g6HQsK`~sW9vY_Lmmqh)(?bdzjHfkSe+^ zEo8v%jq$9#;EqOeQ8~ptmGTV|rC)YK&E&71EPV+X%K5efWUDAfsJ**71HE0PZfkAd ztq^z0f!BTP)Co1k)MBLypr0Ev?_;MJA|5kfRw4NH5pddg&WPpgpFHA+A5sl<6NGxU z9ShFjvb#KM$fNC$W+yaR8_wOu>^Gd>kj`znCX(?@dAqwVo=f^NBoO|pA#n>C^$+Fj z1$@|!H3H~AoiU#DT}M9&!W$23aaXA6EXC<@tg;LgXUm_R@KA@l-dYeNckGoRAwfii zE!r~SJUXZax;}_EB$t8CRQf=q2?@`A1Zii?I#cnYtANoBSY|$MI|w-9T3(Poq$xvs z^+KGi-H@cS=;_04xp})kd88=X3L{~w3UPcIoW)$AsQQUVn>qIjPO2?)24lkLaFZ>Y z^2!j*S6+m-=4@|7h-9-@QI3|>0PL4l{951x1pr&b|p(RUpf~sAn!!Oce2qXR$T;o1lNU zW{y0ekLF36{L`pawT+_lP)4<5fsV4cGn{QjWSsu+(NWP*uwE z;e+)^lVP)V4Yr-bsp}XK#}?c8?k0|^!cS3`m)lAzNH~co32dtmkSU;HU;IfFFkK8R z*eqC%65x@c)IF<)*mghm$S=;Resyy}bWK63sLXgr@zUG;qecH5C9?d7lI4P-?pmeSx;f}l`zvgI(+7TKX5u+z{AF@JAmg;w@=cQzU?*c z>V_(6GMo06(vIhFL3#@-z3*~&w*H2A<%w*&=ywU{M0@F0hfb~0Q2Ctt7Ab1qr?(Mg zTYcVas~a5;7h$Lk=Q*%hA(ZVb#ZPraGJ*v~1u0cUkjrh*Q*M`c>aM*b`@BT1zmUCU zBl{!7drQe_?L~;F6;e7$Nkjy5e?ntf^LAGT{lGL;_yVoCCL2LPTET%0zu}OMp>zk# zQ&o!5CjGL}M>Wz*ZI0nh^jE`FdVnBFk6`E|NJEv~?%nCR4(C-;KX%7@wNm3L$h>+C zmse5~=x9fucCZr5!Nt|twLcD(lRA+Wa_QerE_sWEebGF60s96^rNBYV9LALs^kL8A z8XSrVZLm9^eZju60$PUg*lFz7p?Mc&KR+}WBVd*(JJz7XJoY(`vdMCZ4IVL74wC`yNVD4>36%U0Ikg{mr3ajj@Om!s~ngAHq4pzmY4 zZsNe3ob{Ab9eME%7An_*P1wST{XFT>oH_l`REE~R4ZrPygO2=02X4BBKfwZaXv2)_ zJo$yE4ubN4h@Hw3GpU7(GOakGB6P`y`@3`EOP0w*1s%6dl2A*oWqtWjtx{vy5+78B zMyh;EU<39K)kpf~N{wkfoPNf-Ys)|j>nIq?u% zXENdmEFiSW=KPt9Y2tAiRZ>qIo>ti_R*&cRaO!2wOri0Hye-arL6#lNuylTrhsYrs z8pGL@?}p)}f!w}geYxZXUQAQL+|`ZS-=Swu0Z&)r!e%sX&V?&@@+01;@YM{X*Fqdr z_VwDu`S)P2;FsBKl%bokjD~aUYuGdtnmp*7tA`8~kiaf@Eh2@Qsu8P8^Yvo<>?`1b z-V92CLt_D}8DT{Msge;ONG%CC?TZSg*D+p$6mc!?3@A)y6aB7%n*r7}^e>hD+tfae~b2OD;ufBLNrNvR+e^(qaD@ zzynL+A`Iba2`&7I4}a3ZlMezpV+)7%wvZEZ{AWO+d>)a*pNaLa8B&^e5q%@ViR z?jE1_pi3G)TMDhLe1WRUj&2;}n3p>eUb^@zFDCV1{-(D!g&EnDr&scP5T>athYyho zyE^j20325%AJCLGN4e%4tp?H?KG_{UR-Ya9(p( z{EF{7TkTu&*BuN}DZXD=7I7^0ljo|_%LT_92<>_;R-c5u+EB_F`M7{aI+Xp3xPBkk z9bls}yk40OEBLK19T#G%3PXjS-187Kwej0u@KZD)@38|d)HCO8eaw4Jwo}3ePUGSu zJZi%N?)W}Y>UXQgITLVLG?nJHxHbyuIuGk&xaTFls7mZ}ep9 z`)8=(EwoL2IU<15lIdHHub1S1Z+lphweE3_*NACH{Wp|YPY1eX= zc!5~G|M|j9YmIRQ1^m-SGI!vG>U~ZX8V_fe6xOQDtkqn0l-=SODW>xR!{kG7Hdcz& z;ucFd=sN3;%o1C4;P1&;qN-D}25&t_SGBl3O&KaVeN7p8FFJZvx*aCi*=?xf)hMwX?W4@?4u=5kawYJOE=a41ak;%o|Tw%2dZ z#~xa#5?yv+l!~Qa6MmF@Q}^g`iO-+lxsA{|$v3TF zP4Z!2#ZyPnK&NDF6Atsi>@Lz;AzQf&oFJF8YJk=*#1$3T32OYe58%o77_EBx`T*vd z3f)5Iqi{?q)Aq1>X=YXDx?0Q{tSJX1 z)lI>QY_^x-C+Sg*7LiEO+nz5$mteNcppgOHr(kkRp>?Rk%%?C>#f&q>+e*^(aS>eR z%14S0Op*6&Y3%SFV^!|6jQD9LPh8~n9rU}vMgKT6F)xB{UPu&fti$v$PD)|eY9?P| z`5SmuL7H2oj}QfQ-d#KJ**X5mm8TJebrR}b;Rs8#prsEx4dwY7?Ci_WQyE!GvIojj zWMP>I?kvnszO472&MmoY4@S%2dB~scYxwIq9c$xRMQP~8XstOC<(mo;t_FX#9T&C7 z6rC@dT^#X>j$b%gmX1sCT-n&IE8mSofSSRD1vzsJ!eu@adY2a3^? ziT;XqG6eeU##OZ~c~OcQOEL?QJam)0bH;KG*@j^vL$oty#!d`Wk&stQWsl*D3add& z+Qi|y&OypL20h?~=NwRi^;38ymnC}g=tR5_&NIP_MZ(ZtP3!p-{IHT6d{V}l^y9V- z+`myiOyZMF6$-1$rPkCho7MhuRVmCXF4T#tQO}#vc_i2GqOB!gTcecP2?;jmcbQv% z@$*TfiLJqVm8zKW^qbEm-&k!el3NM&no>hfGwKFn62%`*WTp*#+X``k6$|>{ttyCv zhvX1vu?1ZHk;5duf=Z5GDwlphXGa0c+(b3$21ZDO9DbcOAL{w_4QcXphehC$^ z3sx(bR2PMcXm50_S;-XBWM&YnPgt@cW#s~dXoJZWnHqx^Y82$%O!IBDd%`lNv>b;% z6@>P~2N&h*G=f9YF;2NxuQO}=aql0N^R3II9bzx67v>NBruyPKMv&GPY&V7OM|jPgr8PN+zFNO{IWLnc zn-*p7XuMY*2EUVKVpNa3Z;_D%}s%A5ODfdA@AxEQ<_mN4op zk4OrX{sQj1$)H=9(y)V_C6TX;FUl$_t4&0aNTT`x5&XL9kAafChbO@Mgra{ zg&(SE9n~LY)Mxdb`R5B+m}e$%{BI4jV3Ew_5*J#sS3cvvFWl?THT#hv_hBU`u3gU! zxg0f+hFM%Ck;Sa(*OO1OISuVap~tud=FVahLV>nnS*v0s&UwLF^2S`T|h3e`4% z%SW-+OBOWd;6oUyOM-o) zH~ece)<`3qf0@BQP=^AJsLaSZTzH+AYjcGg4y#byPUG{f=&g&506Xq?XYX#TSzlw{ zI)2uCnw7Vsb!#c?F8eTMpivnCSEcj70ro!3;Aa?FMQ%A%<@s5%=Eq9;%B=ug{5%SO)h!FBfojQHyez^6&+B;HoUiq zS8lXl!_FgUn9kP8v|GTcIgG4|@eSk_O9x7|SzlTI2PUb~HgC*`MfjnTw|O58j-$M= zndxbK_z0!i3+OnU+h-%nTEMNv*=8B4X@%Hje0K|ux_+9okqM76TzP+J8zz>Lo5YqC z#618tnhEkl4c@4!$dM7@m-1=66@RrwRki6qg4lXF`~JdaDZpB31UIy$N74M8P5VDw zZNTVZ43M{|W%&CRW|xq{x3?Mm0PbqheayM-ME=(HQL!v{kId0W%th;%wU0x4^V3j_ zQbBSp#Zt4`av!f7V~c^@rLUJzy-oS0FLP(Gz+47w#c*xh&xQv#vB+J9j6^Xt!Z*YL zvchOs$Y8Nfz13$IR!+tP6{d{l=%LAn!0UWu6+p@UBlr0mnv%1inJX!r7rb?gDP}eQn2cTQFUX?I2le595&S?f0@qF-&(6(uzQiT#2{c1-xuWzYG|vIodsdM%Oi; zsi7wqcF0S-OY5$@_z@3v<*-&>52ofV?ATf?&Q^|k#R7#H<;8a^nb;1KO{E{6;?x+w zip5{R)kDB%@)>speyO0XmgC*4kZLcW*rZ@N@1@?TdJ^C7gnMHF&&x9E8xD(jv2YO{ z@j?+_0jnmVh>rEIvmkrR!mN)VyLI}C8Svj~geXrsnbV^JCwj0&QQm!lH7famPW-hS z8NmW>Tg#xGFcwu|*))2m@zWLVC`*%r9RE(^Ak_bj6cs32Q>Go~VEKS4vDdd_mrmKo zYdm=i5GFICC9VAUc0TKgF_}%LO?*>{3tZU2o!x5j-pPE8+waOcXK_~baOzH8ctZb= zJUkN4>MIWR66(a3ObbDpYD#KxM%u$(g{DS%mXzR?Lj?3}%|%^t&Qm}ONf9D~fUPH87e{6D?ML=lMwgo~>nF5* zk8w>z630giBC#+!C8B#L0Y^3F;LTXB;GxPKxt<&Ua8)aAYL6jNLTg-?2a;H1E8Dz4 zn0SBGRi5^*%cN7V5}bu4T+11B7oWuA!`O5g>Z_abiDLPKsG&+?*Mapmu=`c|$|NPR z$wh`WKw~v3X0@dFZ5$8p<>gDPWQ?m~h%i<)Vp=*UzQSP@Y>y_Gr*<{(fL=_04v(Yv z8qVy`f6K6@xl}N_l@}g3KMvr@{=A&b^!+SY3wKo88c&oeo|D+>Hp;6;$iq{+1`-L1 z%abugOgQ5FWjVZ%NlUPbQhuT?r(eZJ;X9pO@Sv#FxU0G%FZ0hC3NmYqAhIvXPJ#

@yh&E4nZnr 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 c!D`T;m5{Ro_9DOk0m5`lK`c_-Y&b=IG&t+a8oR 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 &j;LeeI>wO)B!lN%-a$e$oEyilmnCvG|)8k~<1H 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�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

t#1YRCV=-f28h&$S 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