From 02fb3fee40bc0ab8371dc555662900e06916409c Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Sun, 30 Jun 2019 08:51:50 +0300
Subject: [PATCH] Remove all ref to bucket size

---
 .../reconstruct/include/ftl/voxel_hash.hpp    |  2 --
 .../include/ftl/voxel_hash_params.hpp         |  4 +--
 applications/reconstruct/src/compactors.cu    | 12 +++----
 .../reconstruct/src/scene_rep_hash_sdf.cu     |  4 +--
 applications/reconstruct/src/voxel_hash.cpp   | 32 +++++++++----------
 applications/reconstruct/src/voxel_hash.cu    | 10 +++---
 applications/reconstruct/src/voxel_scene.cpp  |  8 ++---
 7 files changed, 34 insertions(+), 38 deletions(-)

diff --git a/applications/reconstruct/include/ftl/voxel_hash.hpp b/applications/reconstruct/include/ftl/voxel_hash.hpp
index b2c355b37..4a8e8ee80 100644
--- a/applications/reconstruct/include/ftl/voxel_hash.hpp
+++ b/applications/reconstruct/include/ftl/voxel_hash.hpp
@@ -36,9 +36,7 @@ typedef signed char schar;
 
 #include <ftl/depth_camera.hpp>
 
-#define HANDLE_COLLISIONS
 #define SDF_BLOCK_SIZE 8
-#define HASH_BUCKET_SIZE 1
 
 #ifndef MINF
 #define MINF __int_as_float(0xff800000)
diff --git a/applications/reconstruct/include/ftl/voxel_hash_params.hpp b/applications/reconstruct/include/ftl/voxel_hash_params.hpp
index 821631017..cb94404c3 100644
--- a/applications/reconstruct/include/ftl/voxel_hash_params.hpp
+++ b/applications/reconstruct/include/ftl/voxel_hash_params.hpp
@@ -21,8 +21,8 @@ struct __align__(16) HashParams {
 	float4x4		m_rigidTransformInverse;
 
 	unsigned int	m_hashNumBuckets;
-	unsigned int	m_hashBucketSize;
-	unsigned int	m_hashMaxCollisionLinkedListSize;
+	unsigned int	m_deprecated1;
+	unsigned int	m_deprecated2; //m_hashMaxCollisionLinkedListSize;
 	unsigned int	m_numSDFBlocks;
 
 	int				m_SDFBlockSize;
diff --git a/applications/reconstruct/src/compactors.cu b/applications/reconstruct/src/compactors.cu
index b1eb1eab7..373a71fc2 100644
--- a/applications/reconstruct/src/compactors.cu
+++ b/applications/reconstruct/src/compactors.cu
@@ -68,7 +68,7 @@ __global__ void compactifyVisibleKernel(HashData hashData, HashParams hashParams
 	//const HashParams& hashParams = c_hashParams;
 	const unsigned int idx = blockIdx.x*blockDim.x + threadIdx.x;
 #ifdef COMPACTIFY_HASH_SIMPLE
-	if (idx < hashParams.m_hashNumBuckets * HASH_BUCKET_SIZE) {
+	if (idx < hashParams.m_hashNumBuckets) {
 		if (hashData.d_hash[idx].ptr != FREE_ENTRY) {
 			if (hashData.isSDFBlockInCameraFrustumApprox(hashParams, camera, hashData.d_hash[idx].pos))
 			{
@@ -83,7 +83,7 @@ __global__ void compactifyVisibleKernel(HashData hashData, HashParams hashParams
 	__syncthreads();
 
 	int addrLocal = -1;
-	if (idx < hashParams.m_hashNumBuckets * HASH_BUCKET_SIZE) {
+	if (idx < hashParams.m_hashNumBuckets) {
 		if (hashData.d_hash[idx].ptr != FREE_ENTRY) {
 			if (hashData.isSDFBlockInCameraFrustumApprox(hashParams, camera, hashData.d_hash[idx].pos))
 			{
@@ -109,7 +109,7 @@ __global__ void compactifyVisibleKernel(HashData hashData, HashParams hashParams
 
 void ftl::cuda::compactifyVisible(HashData& hashData, const HashParams& hashParams, const DepthCameraParams &camera, cudaStream_t stream) {
 	const unsigned int threadsPerBlock = COMPACTIFY_HASH_THREADS_PER_BLOCK;
-	const dim3 gridSize((HASH_BUCKET_SIZE * hashParams.m_hashNumBuckets + threadsPerBlock - 1) / threadsPerBlock, 1);
+	const dim3 gridSize((hashParams.m_hashNumBuckets + threadsPerBlock - 1) / threadsPerBlock, 1);
 	const dim3 blockSize(threadsPerBlock, 1);
 
 	cudaSafeCall(cudaMemsetAsync(hashData.d_hashCompactifiedCounter, 0, sizeof(int),stream));
@@ -129,7 +129,7 @@ __global__ void compactifyAllocatedKernel(HashData hashData)
 	const HashParams& hashParams = c_hashParams;
 	const unsigned int idx = blockIdx.x*blockDim.x + threadIdx.x;
 #ifdef COMPACTIFY_HASH_SIMPLE
-	if (idx < hashParams.m_hashNumBuckets * HASH_BUCKET_SIZE) {
+	if (idx < hashParams.m_hashNumBuckets) {
 		if (hashData.d_hash[idx].ptr != FREE_ENTRY) {
 			int addr = atomicAdd(hashData.d_hashCompactifiedCounter, 1);
 			hashData.d_hashCompactified[addr] = hashData.d_hash[idx];
@@ -141,7 +141,7 @@ __global__ void compactifyAllocatedKernel(HashData hashData)
 	__syncthreads();
 
 	int addrLocal = -1;
-	if (idx < hashParams.m_hashNumBuckets * HASH_BUCKET_SIZE) {
+	if (idx < hashParams.m_hashNumBuckets) {
 		if (hashData.d_hash[idx].ptr != FREE_ENTRY) {
 			addrLocal = atomicAdd(&localCounter, 1);
 		}
@@ -164,7 +164,7 @@ __global__ void compactifyAllocatedKernel(HashData hashData)
 
 void ftl::cuda::compactifyAllocated(HashData& hashData, const HashParams& hashParams, cudaStream_t stream) {
 	const unsigned int threadsPerBlock = COMPACTIFY_HASH_THREADS_PER_BLOCK;
-	const dim3 gridSize((HASH_BUCKET_SIZE * hashParams.m_hashNumBuckets + threadsPerBlock - 1) / threadsPerBlock, 1);
+	const dim3 gridSize((hashParams.m_hashNumBuckets + threadsPerBlock - 1) / threadsPerBlock, 1);
 	const dim3 blockSize(threadsPerBlock, 1);
 
 	cudaSafeCall(cudaMemsetAsync(hashData.d_hashCompactifiedCounter, 0, sizeof(int), stream));
diff --git a/applications/reconstruct/src/scene_rep_hash_sdf.cu b/applications/reconstruct/src/scene_rep_hash_sdf.cu
index 152722a34..4f57bf370 100644
--- a/applications/reconstruct/src/scene_rep_hash_sdf.cu
+++ b/applications/reconstruct/src/scene_rep_hash_sdf.cu
@@ -98,7 +98,7 @@ __global__ void resetHashKernel(HashData hashData)
 {
 	const HashParams& hashParams = c_hashParams;
 	const unsigned int idx = blockIdx.x*blockDim.x + threadIdx.x;
-	if (idx < hashParams.m_hashNumBuckets * HASH_BUCKET_SIZE) {
+	if (idx < hashParams.m_hashNumBuckets) {
 		hashData.deleteHashEntry(hashData.d_hash[idx]);
 		hashData.deleteHashEntry(hashData.d_hashCompactified[idx]);
 	}
@@ -133,7 +133,7 @@ extern "C" void resetCUDA(HashData& hashData, const HashParams& hashParams)
 
 	{
 		//resetting the hash
-		const dim3 gridSize((HASH_BUCKET_SIZE * hashParams.m_hashNumBuckets + (T_PER_BLOCK*T_PER_BLOCK) - 1)/(T_PER_BLOCK*T_PER_BLOCK), 1);
+		const dim3 gridSize((hashParams.m_hashNumBuckets + (T_PER_BLOCK*T_PER_BLOCK) - 1)/(T_PER_BLOCK*T_PER_BLOCK), 1);
 		const dim3 blockSize((T_PER_BLOCK*T_PER_BLOCK), 1);
 
 		resetHashKernel<<<gridSize, blockSize>>>(hashData);
diff --git a/applications/reconstruct/src/voxel_hash.cpp b/applications/reconstruct/src/voxel_hash.cpp
index 72395506c..f5e6b94b6 100644
--- a/applications/reconstruct/src/voxel_hash.cpp
+++ b/applications/reconstruct/src/voxel_hash.cpp
@@ -8,20 +8,20 @@ void HashData::allocate(const HashParams& params, bool dataOnGPU) {
 	if (m_bIsOnGPU) {
 		cudaSafeCall(cudaMalloc(&d_heap, sizeof(unsigned int) * params.m_numSDFBlocks));
 		cudaSafeCall(cudaMalloc(&d_heapCounter, sizeof(unsigned int)));
-		cudaSafeCall(cudaMalloc(&d_hash, sizeof(HashEntry)* params.m_hashNumBuckets * params.m_hashBucketSize));
-		cudaSafeCall(cudaMalloc(&d_hashDecision, sizeof(int)* params.m_hashNumBuckets * params.m_hashBucketSize));
-		cudaSafeCall(cudaMalloc(&d_hashDecisionPrefix, sizeof(int)* params.m_hashNumBuckets * params.m_hashBucketSize));
-		cudaSafeCall(cudaMalloc(&d_hashCompactified, sizeof(HashEntry)* params.m_hashNumBuckets * params.m_hashBucketSize));
+		cudaSafeCall(cudaMalloc(&d_hash, sizeof(HashEntry)* params.m_hashNumBuckets));
+		cudaSafeCall(cudaMalloc(&d_hashDecision, sizeof(int)* params.m_hashNumBuckets));
+		cudaSafeCall(cudaMalloc(&d_hashDecisionPrefix, sizeof(int)* params.m_hashNumBuckets));
+		cudaSafeCall(cudaMalloc(&d_hashCompactified, sizeof(HashEntry)* params.m_hashNumBuckets));
 		cudaSafeCall(cudaMalloc(&d_hashCompactifiedCounter, sizeof(int)));
 		cudaSafeCall(cudaMalloc(&d_SDFBlocks, sizeof(Voxel) * params.m_numSDFBlocks * params.m_SDFBlockSize*params.m_SDFBlockSize*params.m_SDFBlockSize));
 		cudaSafeCall(cudaMalloc(&d_hashBucketMutex, sizeof(int)* params.m_hashNumBuckets));
 	} else {
 		d_heap = new unsigned int[params.m_numSDFBlocks];
 		d_heapCounter = new unsigned int[1];
-		d_hash = new HashEntry[params.m_hashNumBuckets * params.m_hashBucketSize];
-		d_hashDecision = new int[params.m_hashNumBuckets * params.m_hashBucketSize];
-		d_hashDecisionPrefix = new int[params.m_hashNumBuckets * params.m_hashBucketSize];
-		d_hashCompactified = new HashEntry[params.m_hashNumBuckets * params.m_hashBucketSize];
+		d_hash = new HashEntry[params.m_hashNumBuckets];
+		d_hashDecision = new int[params.m_hashNumBuckets];
+		d_hashDecisionPrefix = new int[params.m_hashNumBuckets];
+		d_hashCompactified = new HashEntry[params.m_hashNumBuckets];
 		d_hashCompactifiedCounter = new int[1];
 		d_SDFBlocks = new Voxel[params.m_numSDFBlocks * params.m_SDFBlockSize*params.m_SDFBlockSize*params.m_SDFBlockSize];
 		d_hashBucketMutex = new int[params.m_hashNumBuckets];
@@ -78,10 +78,10 @@ HashData HashData::download() const {
 	hashData.allocate(params, false);	//allocate the data on the CPU
 	cudaSafeCall(cudaMemcpy(hashData.d_heap, d_heap, sizeof(unsigned int) * params.m_numSDFBlocks, cudaMemcpyDeviceToHost));
 	cudaSafeCall(cudaMemcpy(hashData.d_heapCounter, d_heapCounter, sizeof(unsigned int), cudaMemcpyDeviceToHost));
-	cudaSafeCall(cudaMemcpy(hashData.d_hash, d_hash, sizeof(HashEntry)* params.m_hashNumBuckets * params.m_hashBucketSize, cudaMemcpyDeviceToHost));
-	cudaSafeCall(cudaMemcpy(hashData.d_hashDecision, d_hashDecision, sizeof(int)*params.m_hashNumBuckets * params.m_hashBucketSize, cudaMemcpyDeviceToHost));
-	cudaSafeCall(cudaMemcpy(hashData.d_hashDecisionPrefix, d_hashDecisionPrefix, sizeof(int)*params.m_hashNumBuckets * params.m_hashBucketSize, cudaMemcpyDeviceToHost));
-	cudaSafeCall(cudaMemcpy(hashData.d_hashCompactified, d_hashCompactified, sizeof(HashEntry)* params.m_hashNumBuckets * params.m_hashBucketSize, cudaMemcpyDeviceToHost));
+	cudaSafeCall(cudaMemcpy(hashData.d_hash, d_hash, sizeof(HashEntry)* params.m_hashNumBuckets, cudaMemcpyDeviceToHost));
+	cudaSafeCall(cudaMemcpy(hashData.d_hashDecision, d_hashDecision, sizeof(int)*params.m_hashNumBuckets, cudaMemcpyDeviceToHost));
+	cudaSafeCall(cudaMemcpy(hashData.d_hashDecisionPrefix, d_hashDecisionPrefix, sizeof(int)*params.m_hashNumBuckets, cudaMemcpyDeviceToHost));
+	cudaSafeCall(cudaMemcpy(hashData.d_hashCompactified, d_hashCompactified, sizeof(HashEntry)* params.m_hashNumBuckets, cudaMemcpyDeviceToHost));
 	cudaSafeCall(cudaMemcpy(hashData.d_hashCompactifiedCounter, d_hashCompactifiedCounter, sizeof(unsigned int), cudaMemcpyDeviceToHost));
 	cudaSafeCall(cudaMemcpy(hashData.d_SDFBlocks, d_SDFBlocks, sizeof(Voxel) * params.m_numSDFBlocks * params.m_SDFBlockSize*params.m_SDFBlockSize*params.m_SDFBlockSize, cudaMemcpyDeviceToHost));
 	cudaSafeCall(cudaMemcpy(hashData.d_hashBucketMutex, d_hashBucketMutex, sizeof(int)* params.m_hashNumBuckets, cudaMemcpyDeviceToHost));
@@ -97,10 +97,10 @@ HashData HashData::upload() const {
 	hashData.allocate(params, false);	//allocate the data on the CPU
 	cudaSafeCall(cudaMemcpy(hashData.d_heap, d_heap, sizeof(unsigned int) * params.m_numSDFBlocks, cudaMemcpyHostToDevice));
 	cudaSafeCall(cudaMemcpy(hashData.d_heapCounter, d_heapCounter, sizeof(unsigned int), cudaMemcpyHostToDevice));
-	cudaSafeCall(cudaMemcpy(hashData.d_hash, d_hash, sizeof(HashEntry)* params.m_hashNumBuckets * params.m_hashBucketSize, cudaMemcpyHostToDevice));
-	cudaSafeCall(cudaMemcpy(hashData.d_hashDecision, d_hashDecision, sizeof(int)*params.m_hashNumBuckets * params.m_hashBucketSize, cudaMemcpyHostToDevice));
-	cudaSafeCall(cudaMemcpy(hashData.d_hashDecisionPrefix, d_hashDecisionPrefix, sizeof(int)*params.m_hashNumBuckets * params.m_hashBucketSize, cudaMemcpyHostToDevice));
-	cudaSafeCall(cudaMemcpy(hashData.d_hashCompactified, d_hashCompactified, sizeof(HashEntry)* params.m_hashNumBuckets * params.m_hashBucketSize, cudaMemcpyHostToDevice));
+	cudaSafeCall(cudaMemcpy(hashData.d_hash, d_hash, sizeof(HashEntry)* params.m_hashNumBuckets, cudaMemcpyHostToDevice));
+	cudaSafeCall(cudaMemcpy(hashData.d_hashDecision, d_hashDecision, sizeof(int)*params.m_hashNumBuckets, cudaMemcpyHostToDevice));
+	cudaSafeCall(cudaMemcpy(hashData.d_hashDecisionPrefix, d_hashDecisionPrefix, sizeof(int)*params.m_hashNumBuckets, cudaMemcpyHostToDevice));
+	cudaSafeCall(cudaMemcpy(hashData.d_hashCompactified, d_hashCompactified, sizeof(HashEntry)* params.m_hashNumBuckets, cudaMemcpyHostToDevice));
 	cudaSafeCall(cudaMemcpy(hashData.d_hashCompactifiedCounter, d_hashCompactifiedCounter, sizeof(unsigned int), cudaMemcpyHostToDevice));
 	cudaSafeCall(cudaMemcpy(hashData.d_SDFBlocks, d_SDFBlocks, sizeof(Voxel) * params.m_numSDFBlocks * params.m_SDFBlockSize*params.m_SDFBlockSize*params.m_SDFBlockSize, cudaMemcpyHostToDevice));
 	cudaSafeCall(cudaMemcpy(hashData.d_hashBucketMutex, d_hashBucketMutex, sizeof(int)* params.m_hashNumBuckets, cudaMemcpyHostToDevice));
diff --git a/applications/reconstruct/src/voxel_hash.cu b/applications/reconstruct/src/voxel_hash.cu
index d80534393..7447a1c54 100644
--- a/applications/reconstruct/src/voxel_hash.cu
+++ b/applications/reconstruct/src/voxel_hash.cu
@@ -23,7 +23,7 @@ HashEntry HashData::getHashEntryForSDFBlockPos(const int3& sdfBlock) const {
 		if (curr.offset == 0) break;
 
 		i +=  curr.offset;  //go to next element in the list
-		i %= (HASH_BUCKET_SIZE * params().m_hashNumBuckets);  //check for overflow
+		i %= (params().m_hashNumBuckets);  //check for overflow
 		++maxIter;
 	}
 
@@ -50,7 +50,7 @@ unsigned int HashData::getNumHashLinkedList(unsigned int bucketID) {
 		if (curr.offset == 0) break;
 
 		i += curr.offset;		//go to next element in the list
-		i %= (HASH_BUCKET_SIZE * params().m_hashNumBuckets);	//check for overflow
+		i %= (params().m_hashNumBuckets);	//check for overflow
 		++listLen;
 		++maxIter;
 	}
@@ -74,7 +74,7 @@ void HashData::allocBlock(const int3& pos, const uchar frame) {
 		if (curr.offset == 0) break;
 
 		i += curr.offset;		//go to next element in the list
-		i %= (HASH_BUCKET_SIZE * params().m_hashNumBuckets);	//check for overflow
+		i %= (params().m_hashNumBuckets);	//check for overflow
 		++maxIter;
 	}
 
@@ -104,7 +104,7 @@ void HashData::allocBlock(const int3& pos, const uchar frame) {
 		}
 
 		++j;
-		j %= (HASH_BUCKET_SIZE * params().m_hashNumBuckets);	//check for overflow
+		j %= (params().m_hashNumBuckets);	//check for overflow
 		++maxIter;
 	}
 }
@@ -231,7 +231,7 @@ bool HashData::deleteHashEntryElement(const int3& sdfBlock) {
 		}
 		prev = i;
 		i += curr.offset;		//go to next element in the list
-		i %= (HASH_BUCKET_SIZE * params().m_hashNumBuckets);	//check for overflow
+		i %= (params().m_hashNumBuckets);	//check for overflow
 
 		++maxIter;
 	}
diff --git a/applications/reconstruct/src/voxel_scene.cpp b/applications/reconstruct/src/voxel_scene.cpp
index 831780257..a81680490 100644
--- a/applications/reconstruct/src/voxel_scene.cpp
+++ b/applications/reconstruct/src/voxel_scene.cpp
@@ -263,7 +263,7 @@ unsigned int SceneRep::getHeapFreeCount() {
 
 //! debug only!
 void SceneRep::debugHash() {
-	HashEntry* hashCPU = new HashEntry[m_hashParams.m_hashBucketSize*m_hashParams.m_hashNumBuckets];
+	HashEntry* hashCPU = new HashEntry[m_hashParams.m_hashNumBuckets];
 	unsigned int* heapCPU = new unsigned int[m_hashParams.m_numSDFBlocks];
 	unsigned int heapCounterCPU;
 
@@ -271,7 +271,7 @@ void SceneRep::debugHash() {
 	heapCounterCPU++;	//points to the first free entry: number of blocks is one more
 
 	cudaSafeCall(cudaMemcpy(heapCPU, m_hashData.d_heap, sizeof(unsigned int)*m_hashParams.m_numSDFBlocks, cudaMemcpyDeviceToHost));
-	cudaSafeCall(cudaMemcpy(hashCPU, m_hashData.d_hash, sizeof(HashEntry)*m_hashParams.m_hashBucketSize*m_hashParams.m_hashNumBuckets, cudaMemcpyDeviceToHost));
+	cudaSafeCall(cudaMemcpy(hashCPU, m_hashData.d_hash, sizeof(HashEntry)*m_hashParams.m_hashNumBuckets, cudaMemcpyDeviceToHost));
 
 	//Check for duplicates
 	class myint3Voxel {
@@ -316,7 +316,7 @@ void SceneRep::debugHash() {
 	std::list<myint3Voxel> l;
 	//std::vector<myint3Voxel> v;
 	
-	for (unsigned int i = 0; i < m_hashParams.m_hashBucketSize*m_hashParams.m_hashNumBuckets; i++) {
+	for (unsigned int i = 0; i < m_hashParams.m_hashNumBuckets; i++) {
 		if (hashCPU[i].ptr == -1) {
 			numMinusOne++;
 		}
@@ -376,8 +376,6 @@ HashParams SceneRep::_parametersFromConfig() {
 	params.m_rigidTransform.setIdentity();
 	params.m_rigidTransformInverse.setIdentity();
 	params.m_hashNumBuckets = value("hashNumBuckets", 100000);
-	params.m_hashBucketSize = HASH_BUCKET_SIZE;
-	params.m_hashMaxCollisionLinkedListSize = value("hashMaxCollisionLinkedListSize", 7);
 	params.m_SDFBlockSize = SDF_BLOCK_SIZE;
 	params.m_numSDFBlocks = value("hashNumSDFBlocks",500000);
 	params.m_virtualVoxelSize = value("SDFVoxelSize", 0.006f);
-- 
GitLab