Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
imagej-elphel
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
3
Issues
3
List
Board
Labels
Milestones
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Elphel
imagej-elphel
Commits
907cda8d
Commit
907cda8d
authored
Mar 31, 2020
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Using Marco's help to make jcuda work with nvrtc with cdp
parent
0d087c0b
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
770 additions
and
73 deletions
+770
-73
CLTParameters.java
src/main/java/com/elphel/imagej/cameras/CLTParameters.java
+1
-1
GPUTileProcessor.java
src/main/java/com/elphel/imagej/gpu/GPUTileProcessor.java
+99
-59
ImageDtt.java
src/main/java/com/elphel/imagej/tileprocessor/ImageDtt.java
+21
-7
QuadCLT.java
src/main/java/com/elphel/imagej/tileprocessor/QuadCLT.java
+3
-1
TwoQuadCLT.java
...main/java/com/elphel/imagej/tileprocessor/TwoQuadCLT.java
+4
-2
X3dOutput.java
src/main/java/com/elphel/imagej/x3d/export/X3dOutput.java
+1
-1
TileProcessor.cuh
src/main/resources/kernels/TileProcessor.cuh
+641
-2
dtt8x8.cuh
src/main/resources/kernels/dtt8x8.cuh
+0
-0
No files found.
src/main/java/com/elphel/imagej/cameras/CLTParameters.java
View file @
907cda8d
...
...
@@ -333,7 +333,7 @@ public class CLTParameters {
public
double
infinityDistance
=
10000
;
// Distance to generate backdrop (0 - use regular backdrop)
public
int
min_bgnd_tiles
=
10
;
// Minimal number of background tiles to generate background
public
boolean
shUseFlaps
=
true
;
// Split into shells with flaps
public
boolean
shAggrFade
=
true
;
// Aggressive fade alpha (whole boundary)
public
boolean
shAggrFade
=
false
;
//
true; // Aggressive fade alpha (whole boundary)
public
int
shMinArea
=
1
;
// Minimal shell area (not counting flaps
public
double
shMinStrength
=
0.2
;
// Minimal value of the shell maximum strength
...
...
src/main/java/com/elphel/imagej/gpu/GPUTileProcessor.java
View file @
907cda8d
...
...
@@ -26,19 +26,29 @@ package com.elphel.imagej.gpu;
**
*/
import
static
jcuda
.
driver
.
CUdevice_attribute
.
CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR
;
import
static
jcuda
.
driver
.
CUdevice_attribute
.
CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR
;
// Uses code by Marco Hutter - http://www.jcuda.org
import
static
jcuda
.
driver
.
CUjitInputType
.
CU_JIT_INPUT_LIBRARY
;
import
static
jcuda
.
driver
.
CUjitInputType
.
CU_JIT_INPUT_PTX
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuCtxCreate
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuCtxSynchronize
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuDeviceGet
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuDeviceGetAttribute
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuInit
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuLaunchKernel
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuLinkAddData
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuLinkAddFile
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuLinkComplete
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuLinkCreate
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuLinkDestroy
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuMemAlloc
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuMemAllocPitch
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuMemcpy2D
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuMemcpyHtoD
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuModuleGetFunction
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuModuleGetGlobal
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuModuleLoadData
;
import
static
jcuda
.
driver
.
JCudaDriver
.
cuModuleLoadData
Ex
;
import
static
jcuda
.
nvrtc
.
JNvrtc
.
nvrtcCompileProgram
;
import
static
jcuda
.
nvrtc
.
JNvrtc
.
nvrtcCreateProgram
;
import
static
jcuda
.
nvrtc
.
JNvrtc
.
nvrtcDestroyProgram
;
...
...
@@ -66,14 +76,17 @@ import jcuda.driver.CUcontext;
import
jcuda.driver.CUdevice
;
import
jcuda.driver.CUdeviceptr
;
import
jcuda.driver.CUfunction
;
import
jcuda.driver.CUlinkState
;
import
jcuda.driver.CUmemorytype
;
import
jcuda.driver.CUmodule
;
import
jcuda.driver.JCudaDriver
;
import
jcuda.driver.JITOptions
;
import
jcuda.nvrtc.JNvrtc
;
import
jcuda.nvrtc.nvrtcProgram
;
public
class
GPUTileProcessor
{
static
String
GPU_KERNEL_FILE
=
"dtt8x8.cuh"
;
String
LIBRARY_PATH
=
"/usr/local/cuda/targets/x86_64-linux/lib/libcudadevrt.a"
;
// linux
static
String
GPU_RESOURCE_DIR
=
"kernels"
;
static
String
[]
GPU_KERNEL_FILES
=
{
"dtt8x8.cuh"
,
"TileProcessor.cuh"
};
static
String
GPU_CONVERT_CORRECT_TILES_NAME
=
"convert_correct_tiles"
;
// name in C code
static
String
GPU_IMCLT_RBG_NAME
=
"imclt_rbg"
;
// name in C code
...
...
@@ -112,6 +125,7 @@ public class GPUTileProcessor {
public
static
int
CORR_OUT_RAD
=
4
;
// output radius of the correlations (implemented)
public
static
double
FAT_ZERO_WEIGHT
=
0.0001
;
// add to port weights to avoid nan
public
static
int
THREADS_DYNAMIC_BITS
=
5
;
// treads in block for CDP creation of the texture list
int
DTTTEST_BLOCK_WIDTH
=
32
;
// may be read from the source code
int
DTTTEST_BLOCK_HEIGHT
=
16
;
// may be read from the source code
...
...
@@ -129,7 +143,6 @@ public class GPUTileProcessor {
private
CUdeviceptr
[]
gpu_kernel_offsets_h
=
new
CUdeviceptr
[
NUM_CAMS
];
private
CUdeviceptr
[]
gpu_bayer_h
=
new
CUdeviceptr
[
NUM_CAMS
];
private
CUdeviceptr
[]
gpu_clt_h
=
new
CUdeviceptr
[
NUM_CAMS
];
// private CUdeviceptr [] gpu_lpf_h = new CUdeviceptr[NUM_COLORS];
private
CUdeviceptr
[]
gpu_corr_images_h
=
new
CUdeviceptr
[
NUM_CAMS
];
// GPU pointers to array of GPU pointers
...
...
@@ -143,9 +156,7 @@ public class GPUTileProcessor {
private
CUdeviceptr
gpu_corr_indices
=
new
CUdeviceptr
();
// allocate tilesX * tilesY * 6 * Sizeof.POINTER
private
CUdeviceptr
gpu_texture_indices
=
new
CUdeviceptr
();
// allocate tilesX * tilesY * 6 * Sizeof.POINTER
private
CUdeviceptr
gpu_port_offsets
=
new
CUdeviceptr
();
// allocate Quad * 2 * Sizeof.POINTER
// private
CUmodule
module
;
// to access constants memory
// private CUdeviceptr gpu_lpf = new CUdeviceptr();
private
int
mclt_stride
;
private
int
corr_stride
;
private
int
imclt_stride
;
...
...
@@ -153,7 +164,6 @@ public class GPUTileProcessor {
public
int
num_task_tiles
;
public
int
num_corr_tiles
;
public
int
num_texture_tiles
;
public
class
TpTask
{
public
int
task
;
// [0](+1) - generate 4 images, [4..9]+16..+512 - correlation pairs, 2 - generate texture tiles
public
float
target_disparity
;
...
...
@@ -267,6 +277,7 @@ public class GPUTileProcessor {
public
GPUTileProcessor
(
String
cuda_project_directory
)
throws
IOException
{
// From code by Marco Hutter - http://www.jcuda.org
// Enable exceptions and omit all subsequent error checks
JCudaDriver
.
setExceptionsEnabled
(
true
);
...
...
@@ -274,13 +285,24 @@ public class GPUTileProcessor {
// Initialize the driver and create a context for the first device.
cuInit
(
0
);
CUdevice
device
=
new
CUdevice
();
//2020 - making them global
CUdevice
device
=
new
CUdevice
();
cuDeviceGet
(
device
,
0
);
CUcontext
context
=
new
CUcontext
();
CUcontext
context
=
new
CUcontext
();
cuCtxCreate
(
context
,
0
,
device
);
int
majorArray
[]
=
{
0
};
int
minorArray
[]
=
{
0
};
cuDeviceGetAttribute
(
majorArray
,
CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR
,
device
);
cuDeviceGetAttribute
(
minorArray
,
CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR
,
device
);
int
major
=
majorArray
[
0
];
int
minor
=
minorArray
[
0
];
int
capability
=
major
*
10
+
minor
;
// Obtain the CUDA source code from the CUDA file
// Get absolute path to the file in resource fold
d
er, then read it as a normal file.
// Get absolute path to the file in resource folder, then read it as a normal file.
// When using just Eclipse resources - it does not notice that the file
// was edited (happens frequently during kernel development).
ClassLoader
classLoader
=
getClass
().
getClassLoader
();
...
...
@@ -311,12 +333,14 @@ public class GPUTileProcessor {
"#define TASK_TEXTURE_BIT "
+
TASK_TEXTURE_BIT
+
"\n"
+
"#define LIST_TEXTURE_BIT "
+
LIST_TEXTURE_BIT
+
"\n"
+
"#define CORR_OUT_RAD "
+
CORR_OUT_RAD
+
"\n"
+
"#define FAT_ZERO_WEIGHT "
+
FAT_ZERO_WEIGHT
+
"\n"
;
"#define FAT_ZERO_WEIGHT "
+
FAT_ZERO_WEIGHT
+
"\n"
+
"#define THREADS_DYNAMIC_BITS "
+
THREADS_DYNAMIC_BITS
+
"\n"
;
for
(
String
src_file:
GPU_KERNEL_FILES
)
{
File
file
=
null
;
if
((
cuda_project_directory
==
null
)
||
(
cuda_project_directory
==
""
))
{
file
=
new
File
(
classLoader
.
getResource
(
src_file
).
getFile
());
if
((
cuda_project_directory
==
null
)
||
cuda_project_directory
.
isEmpty
(
))
{
file
=
new
File
(
classLoader
.
getResource
(
GPU_RESOURCE_DIR
+
"/"
+
src_file
).
getFile
());
System
.
out
.
println
(
"Loading resource "
+
file
);
}
else
{
File
src_dir
=
new
File
(
cuda_project_directory
,
"src"
);
...
...
@@ -336,11 +360,15 @@ public class GPUTileProcessor {
}
// Create the kernel functions (first - just test)
String
[]
func_names
=
{
GPU_CONVERT_CORRECT_TILES_NAME
,
GPU_IMCLT_RBG_NAME
,
GPU_CORRELATE2D_NAME
,
GPU_TEXTURES_NAME
};
CUfunction
[]
functions
=
createFunctions
(
kernelSource
,
func_names
);
CUfunction
[]
functions
=
createFunctions
(
kernelSource
,
func_names
,
capability
);
// on my - 75
this
.
GPU_CONVERT_CORRECT_TILES_kernel
=
functions
[
0
];
this
.
GPU_IMCLT_RBG_kernel
=
functions
[
1
];
this
.
GPU_CORRELATE2D_kernel
=
functions
[
2
];
this
.
GPU_TEXTURES_kernel
=
functions
[
3
];
System
.
out
.
println
(
"GPU kernel functions initialized"
);
System
.
out
.
println
(
GPU_CONVERT_CORRECT_TILES_kernel
.
toString
());
System
.
out
.
println
(
GPU_IMCLT_RBG_kernel
.
toString
());
...
...
@@ -968,11 +996,12 @@ public class GPUTileProcessor {
int
num_colors
,
boolean
keep_weights
){
int
texture_slices
=
(
num_colors
+
1
+
(
keep_weights
?(
NUM_CAMS
+
num_colors
+
1
):
0
));
int
texture_slice_size
=
(
2
*
DTT_SIZE
)*
(
2
*
DTT_SIZE
);
int
texture_tile_size
=
texture_slices
*
texture_slice_size
;
int
texture_size
=
texture_tile_size
*
num_texture_tiles
;
float
[]
cpu_textures
=
new
float
[
num_texture_tiles
*
texture_size
];
int
texture_slices
=
(
num_colors
+
1
+
(
keep_weights
?(
NUM_CAMS
+
num_colors
+
1
):
0
));
// number of texture slices
int
texture_slice_size
=
(
2
*
DTT_SIZE
)*
(
2
*
DTT_SIZE
);
// number of (float) elements in a single slice of a tile
int
texture_tile_size
=
texture_slices
*
texture_slice_size
;
// number of (float) elements in a multi-slice tile
int
texture_size
=
texture_tile_size
*
num_texture_tiles
;
// number of (float) elements in the whole texture
// float [] cpu_textures = new float [ num_texture_tiles * texture_size];
float
[]
cpu_textures
=
new
float
[
texture_size
];
CUDA_MEMCPY2D
copyD2H
=
new
CUDA_MEMCPY2D
();
copyD2H
.
srcMemoryType
=
CUmemorytype
.
CU_MEMORYTYPE_DEVICE
;
copyD2H
.
srcDevice
=
gpu_textures
;
...
...
@@ -1104,51 +1133,62 @@ public class GPUTileProcessor {
}
// private static CUfunction [] createFunctions(
private
CUfunction
[]
createFunctions
(
String
sourceCode
,
String
[]
kernelNames
)
throws
IOException
{
private
CUfunction
[]
createFunctions
(
String
sourceCode
,
String
[]
kernelNames
,
int
capability
)
throws
IOException
{
CUfunction
[]
functions
=
new
CUfunction
[
kernelNames
.
length
];
boolean
OK
=
false
;
// Use the NVRTC to create a program by compiling the source code
nvrtcProgram
program
=
new
nvrtcProgram
();
nvrtcCreateProgram
(
program
,
sourceCode
,
null
,
0
,
null
,
null
);
try
{
nvrtcCompileProgram
(
program
,
0
,
null
);
OK
=
true
;
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"nvrtcCompileProgram() FAILED"
);
}
// Compilation log with errors/warnongs
String
programLog
[]
=
new
String
[
1
];
nvrtcGetProgramLog
(
program
,
programLog
);
String
log
=
programLog
[
0
].
trim
();
if
(!
log
.
isEmpty
())
{
System
.
err
.
println
(
"Program compilation log:\n"
+
log
);
}
if
(!
OK
)
{
throw
new
IOException
(
"Could not compile program"
);
}
// Get the PTX code of the compiled program (not the binary)
String
[]
ptx
=
new
String
[
1
];
nvrtcGetPTX
(
program
,
ptx
);
nvrtcDestroyProgram
(
program
);
boolean
OK
=
false
;
// Use the NVRTC to create a program by compiling the source code
nvrtcProgram
program
=
new
nvrtcProgram
();
nvrtcCreateProgram
(
program
,
sourceCode
,
null
,
0
,
null
,
null
);
String
options
[]
=
{
"--gpu-architecture=compute_"
+
capability
};
// Create a CUDA module from the PTX code
// CUmodule
module
=
new
CUmodule
();
cuModuleLoadData
(
module
,
ptx
[
0
]);
try
{
nvrtcCompileProgram
(
program
,
options
.
length
,
options
);
OK
=
true
;
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"nvrtcCompileProgram() FAILED"
);
}
// Compilation log with errors/warnings
String
programLog
[]
=
new
String
[
1
];
nvrtcGetProgramLog
(
program
,
programLog
);
String
log
=
programLog
[
0
].
trim
();
if
(!
log
.
isEmpty
())
{
System
.
err
.
println
(
"Program compilation log:\n"
+
log
);
}
if
(!
OK
)
{
throw
new
IOException
(
"Could not compile program"
);
}
for
(
int
i
=
0
;
i
<
kernelNames
.
length
;
i
++)
{
// Find the function in the source by name, get its pointer
functions
[
i
]
=
new
CUfunction
();
cuModuleGetFunction
(
functions
[
i
]
,
module
,
kernelNames
[
i
]);
}
// Get the PTX code of the compiled program (not the binary)
String
[]
ptx
=
new
String
[
1
];
nvrtcGetPTX
(
program
,
ptx
);
nvrtcDestroyProgram
(
program
);
byte
[]
ptxData
=
ptx
[
0
].
getBytes
();
JITOptions
jitOptions
=
new
JITOptions
();
CUlinkState
state
=
new
CUlinkState
();
cuLinkCreate
(
jitOptions
,
state
);
cuLinkAddFile
(
state
,
CU_JIT_INPUT_LIBRARY
,
LIBRARY_PATH
,
jitOptions
);
cuLinkAddData
(
state
,
CU_JIT_INPUT_PTX
,
Pointer
.
to
(
ptxData
),
ptxData
.
length
,
"input.ptx"
,
jitOptions
);
long
size
[]
=
{
0
};
Pointer
image
=
new
Pointer
();
cuLinkComplete
(
state
,
image
,
size
);
module
=
new
CUmodule
();
cuModuleLoadDataEx
(
module
,
image
,
0
,
new
int
[
0
],
Pointer
.
to
(
new
int
[
0
]));
cuLinkDestroy
(
state
);
for
(
int
i
=
0
;
i
<
kernelNames
.
length
;
i
++)
{
// Find the function in the source by name, get its pointer
functions
[
i
]
=
new
CUfunction
();
cuModuleGetFunction
(
functions
[
i
]
,
module
,
kernelNames
[
i
]);
}
return
functions
;
}
return
functions
;
}
static
String
readFileAsString
(
String
path
)
{
...
...
src/main/java/com/elphel/imagej/tileprocessor/ImageDtt.java
View file @
907cda8d
...
...
@@ -3867,7 +3867,9 @@ public class ImageDtt {
double
[][]
port_weights
=
new
double
[
ports
][
tile_len
];
double
[][]
color_avg
=
new
double
[
numcol
][
tile_len
];
double
[][]
rgba
=
new
double
[
numcol
+
1
+
(
keep_weights
?(
ports
+
numcol
+
1
):
0
)][];
// double [][] rgba = new double[numcol + 1 + (keep_weights?(ports + numcol + 1):0)][];
// need to pass keep_weights to the caller
double
[][]
rgba
=
new
double
[
numcol
+
1
+
ports
+
(
keep_weights
?(
numcol
+
1
):
0
)][];
int
rms_start
=
numcol
+
1
+
ports
;
if
(
keep_weights
){
for
(
int
ncol
=
0
;
ncol
<=
numcol
;
ncol
++)
if
((
ncol
==
numcol
)
||
(
iclt_tile
[
0
][
ncol
]
!=
null
))
{
...
...
@@ -4069,8 +4071,11 @@ public class ImageDtt {
rgba
[
ncol
]
=
color_avg
[
ncol
];
}
rgba
[
numcol
]
=
alpha
;
for
(
int
i
=
0
;
i
<
ports
;
i
++)
rgba
[
numcol
+
1
+
i
]
=
port_weights
[
i
];
// if (keep_weights){
for
(
int
i
=
0
;
i
<
ports
;
i
++)
{
rgba
[
numcol
+
1
+
i
]
=
port_weights
[
i
];
}
// }
if
(
max_diff
!=
null
){
for
(
int
ip
=
0
;
ip
<
ports
;
ip
++){
max_diff
[
ip
]
=
0
;
...
...
@@ -5026,7 +5031,7 @@ public class ImageDtt {
System
.
out
.
println
(
"iclt_2d():sharp_alpha= "
+
sharp_alpha
);
}
boolean
has_weights
=
false
;
boolean
set_has_weight
=
false
;
boolean
set_has_weight
=
false
;
// not used
for
(
int
i
=
0
;
(
i
<
tilesY
)
&&
!
set_has_weight
;
i
++){
for
(
int
j
=
0
;
(
j
<
tilesX
)
&&
!
set_has_weight
;
j
++){
if
(
texture_tiles
[
i
][
j
]
!=
null
)
{
...
...
@@ -5064,15 +5069,15 @@ public class ImageDtt {
int
n_half
=
transform_size
/
2
;
int
lastY
=
tilesY
-
1
;
int
lastX
=
tilesX
-
1
;
int
offset
=
n_half
*
(
transform_size
*
tilesX
)
+
n_half
;
int
offset
=
n_half
*
(
transform_size
*
tilesX
)
+
n_half
;
// 4 pixels left and down (right/up when subtracted below)
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
tiles_list
[
nser
.
get
()].
length
;
nTile
=
ai
.
getAndIncrement
())
{
tileX
=
tiles_list
[
nser
.
get
()][
nTile
][
0
];
tileY
=
tiles_list
[
nser
.
get
()][
nTile
][
1
];
double
[][]
texture_tile
=
texture_tiles
[
tileY
][
tileX
];
if
(
texture_tile
!=
null
)
{
if
(
overlap
)
{
if
((
tileY
>
0
)
&&
(
tileX
>
0
)
&&
(
tileY
<
lastY
)
&&
(
tileX
<
lastX
))
{
// fast, no extra checks
for
(
int
i
=
0
;
i
<
n2
;
i
++){
if
((
tileY
>
0
)
&&
(
tileX
>
0
)
&&
(
tileY
<
lastY
)
&&
(
tileX
<
lastX
))
{
// fast, no extra checks
- ignore first/last rows and columns
for
(
int
i
=
0
;
i
<
n2
;
i
++){
int
start_line
=
((
tileY
*
transform_size
+
i
)
*
tilesX
+
tileX
)*
transform_size
-
offset
;
for
(
int
chn
=
0
;
chn
<
texture_tile
.
length
;
chn
++)
{
int
schn
=
chn
;
...
...
@@ -5082,6 +5087,7 @@ public class ImageDtt {
if
(
texture_tile
[
schn
]
==
null
)
{
dpixels
[
chn
]
=
null
;
}
else
{
// should it be better to multiply each color by alpha before accumulating? No, it is already windowed!
if
((
chn
!=
3
)
||
!
sharp_alpha
)
{
for
(
int
j
=
0
;
j
<
n2
;
j
++)
{
dpixels
[
chn
][
start_line
+
j
]
+=
texture_tile
[
schn
][
n2
*
i
+
j
];
...
...
@@ -9278,6 +9284,14 @@ public class ImageDtt {
}
}
}
// fix: removing extra slices
if
(!
clt_parameters
.
keep_weights
&&
(
texture_tiles
[
tileY
][
tileX
]!=
null
))
{
if
(
numcol
==
3
)
{
texture_tiles
[
tileY
][
tileX
]
=
new
double
[][]
{
texture_tiles
[
tileY
][
tileX
][
0
],
texture_tiles
[
tileY
][
tileX
][
1
],
texture_tiles
[
tileY
][
tileX
][
2
],
texture_tiles
[
tileY
][
tileX
][
3
]};
}
else
{
texture_tiles
[
tileY
][
tileX
]
=
new
double
[][]
{
texture_tiles
[
tileY
][
tileX
][
0
],
texture_tiles
[
tileY
][
tileX
][
1
]};
}
}
}
public
double
[][]
get2DCorrs
(
...
...
src/main/java/com/elphel/imagej/tileprocessor/QuadCLT.java
View file @
907cda8d
...
...
@@ -8985,6 +8985,7 @@ public class QuadCLT {
tp
.
clt_3d_passes
.
add
(
latest_scan
);
// put it back
}
int
next_pass
=
tp
.
clt_3d_passes
.
size
();
//
// Create tasks to scan, have tasks, disparity and border tiles in tp.clt_3d_passes
tp
.
thirdPassSetupSurf
(
// prepare tile tasks for the second pass based on the previous one(s) // needs last scan
clt_parameters
,
//FIXME: make a special parameter?
...
...
@@ -9564,6 +9565,7 @@ public class QuadCLT {
double
[]
alpha_zero
=
new
double
[
4
*
image_dtt
.
transform_size
*
image_dtt
.
transform_size
];
int
alpha_index
=
3
;
for
(
int
i
=
0
;
i
<
alpha_zero
.
length
;
i
++)
alpha_zero
[
i
]=
0.0
;
// border tiles are copied, alpha from alphaFade (not multiplied?)
for
(
int
tileY
=
0
;
tileY
<
tilesY
;
tileY
++){
for
(
int
tileX
=
0
;
tileX
<
tilesX
;
tileX
++){
texture_tiles_cluster
[
tileY
][
tileX
]=
null
;
...
...
@@ -9607,7 +9609,7 @@ public class QuadCLT {
texture_overlap
[
alpha_index
][
i
]
=
d
;
}
}
// for now - use just RGB. Later add option for RGBA
// for now - use just RGB. Later add option for RGBA
(?)
double
[][]
texture_rgb
=
{
texture_overlap
[
0
],
texture_overlap
[
1
],
texture_overlap
[
2
]};
double
[][]
texture_rgba
=
{
texture_overlap
[
0
],
texture_overlap
[
1
],
texture_overlap
[
2
],
texture_overlap
[
3
]};
double
[][]
texture_rgbx
=
((
clt_parameters
.
alpha1
>
0
)?
texture_rgba:
texture_rgb
);
...
...
src/main/java/com/elphel/imagej/tileprocessor/TwoQuadCLT.java
View file @
907cda8d
...
...
@@ -2191,7 +2191,9 @@ public class TwoQuadCLT {
}
if
(
clt_parameters
.
show_rgba_color
)
{
int
num_src_slices
=
12
;
// calculate
int
numcol
=
quadCLT_main
.
isMonochrome
()?
1
:
3
;
int
ports
=
imp_quad_main
.
length
;
int
num_src_slices
=
numcol
+
1
+
(
clt_parameters
.
keep_weights
?(
ports
+
numcol
+
1
):
0
);
// 12 ; // calculate
// float [][][] ftextures = gPUTileProcessor.getTextures(
// (is_mono?1:3), // int num_colors,
// clt_parameters.keep_weights); // boolean keep_weights);
...
...
@@ -3533,7 +3535,7 @@ if (debugLevel > -100) return true; // temporarily !
}
}
quadCLT_main
.
writeKml
(
debugLevel
);
// al
os
generated with x3d model
quadCLT_main
.
writeKml
(
debugLevel
);
// al
so
generated with x3d model
String
jp4_copy_path
=
quadCLT_main
.
correctionsParameters
.
selectX3dDirectory
(
set_name
,
// quad timestamp. Will be ignored if correctionsParameters.use_x3d_subdirs is false
...
...
src/main/java/com/elphel/imagej/x3d/export/X3dOutput.java
View file @
907cda8d
...
...
@@ -69,7 +69,7 @@ public class X3dOutput {
CLTParameters
clt_parameters
,
EyesisCorrectionParameters
.
CorrectionParameters
correctionsParameters
,
GeometryCorrection
geometry_correction
,
ArrayList
<
CLTPass3d
>
clt_3d_passes
){
ArrayList
<
CLTPass3d
>
clt_3d_passes
){
// to scan for textures, contain disp, tasks, border tiles
this
.
clt_parameters
=
clt_parameters
;
this
.
correctionsParameters
=
correctionsParameters
;
this
.
geometry_correction
=
geometry_correction
;
...
...
src/main/resources/TileProcessor.cuh
→
src/main/resources/
kernels/
TileProcessor.cuh
View file @
907cda8d
...
...
@@ -66,6 +66,9 @@
#define CORR_OUT_RAD 4
#define FAT_ZERO_WEIGHT 0.0001 // add to port weights to avoid nan
#define THREADS_DYNAMIC_BITS 5 // treads in block for CDP creation of the texture list
#undef HAS_PRINTF
//7
//#define DEBUG1 1
//#define DEBUG2 1
...
...
@@ -73,10 +76,11 @@
//#define DEBUG4 1
//#define DEBUG5 1
//#define DEBUG6 1
/*
#define DEBUG7 1
#define DEBUG8 1
#define DEBUG9 1
*/
#endif
//#define IMCLT14
...
...
@@ -290,6 +294,63 @@ def set_imclt_sa(stride=9):
for d in sa8s[:-1]:
print('0x%02x,'%(d), end="")
print('0x%2x};'%(sa8s[-1]))
import numpy as np # math
def printAlphaFade(transform_size):
ts2 = 2 * transform_size
ts2m1 = ts2-1
alphaFade = np.zeros(shape=(16,ts2*ts2), dtype=float) # double [][] alphaFade = new double[16][ts2*ts2];
fade1d = np.zeros(shape=(16,), dtype=float) # double [] fade1d = new double [ts2];
for i in range (ts2):
fade1d[i] = 0.5 * (1.0 - np.cos(np.pi * (i +0.5) /ts2))
for i in range (ts2):
for j in range (ts2):
indx = i * ts2 + j
for m in range (16):
# if m == 0:
# alphaFade[m][indx] = 0
elif m == 1: # 0
alphaFade[m][indx] = fade1d[ts2m1 - i]
elif m == 2:
alphaFade[m][indx] = fade1d[j]
elif m == 4:
alphaFade[m][indx] = fade1d[i]
elif m == 8:
alphaFade[m][indx] = fade1d[ts2m1 - j]
elif m == 3:
alphaFade[m][indx] = (fade1d[ts2m1 - i],fade1d[j])[j > ts2m1 - i]
elif m == 6:
alphaFade[m][indx] = (fade1d[i],fade1d[j])[j > i]
elif m == 9:
alphaFade[m][indx] = (fade1d[ts2m1 - j],fade1d[ts2m1 - i])[j > i]
elif m == 12:
alphaFade[m][indx] = (fade1d[ts2m1 - j],fade1d[i])[i > ts2m1 - j]
else:
alphaFade[m][indx] = 1.0
floats_in_line=8
print("__constant__ float alphaFade[16][%d] = {"%(ts2*ts2))
for m in range (16):
for i in range (ts2 * ts2):
if ((i % floats_in_line) == 0):
print(" ",end="")
if (i == 0) :
print("{",end="")
else:
print(" ",end="")
print("%ff"%(alphaFade[m][i]), end ="")
if (((i + 1) % floats_in_line) == 0):
if (i == (ts2 * ts2 -1)):
print("}",end="")
else:
print(",")
else:
print(", ",end="")
if (m == 15):
print("};")
else:
print(",")
*/
...
...
@@ -410,6 +471,521 @@ __constant__ int pairs[6][2]={
{
1
,
3
},
{
0
,
3
},
{
2
,
1
}};
__constant__
float
alphaFade
[
16
][
256
]
=
{
{
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
,
0.000000
f
},
{
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
},
{
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
},
{
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.997592
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.021530
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
},
{
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.002408
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.021530
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
},
{
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
},
{
0.002408
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.021530
f
,
0.021530
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.978470
f
,
0.997592
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
},
{
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
},
{
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
},
{
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.021530
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
},
{
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
},
{
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
},
{
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.002408
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.021530
f
,
0.021530
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.059039
f
,
0.059039
f
,
0.059039
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.113495
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.182803
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.264302
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.354858
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.450991
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.549009
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.645142
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.735698
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.817197
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.886505
f
,
0.997592
f
,
0.978470
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.940961
f
,
0.997592
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.978470
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
,
0.997592
f
},
{
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
},
{
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
},
{
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
,
1.000000
f
}};
//#endif
__device__
void
convertCorrectTile
(
struct
CltExtra
*
gpu_kernel_offsets
,
// [tileY][tileX][color]
...
...
@@ -525,6 +1101,12 @@ __device__ void imclt_plane( // not implemented, not used
float
*
gpu_rbg
,
// WIDTH, HEIGHT
const
size_t
dstride
);
// in floats (pixels)
__global__
void
clear_texture_list
(
int
*
gpu_texture_indices
,
// packed tile + bits (now only (1 << 7)
int
width
,
// <= TILESX, use for faster processing of LWIR images
int
height
);
// <= TILESY, use for faster processing of LWIR images
extern
"C"
__global__
void
correlate2D
(
float
**
gpu_clt
,
// [NUM_CAMS] ->[TILESY][TILESX][NUM_COLORS][DTT_SIZE*DTT_SIZE]
...
...
@@ -793,6 +1375,54 @@ Java code:
#endif
}
#define USE_CDP
#ifdef USE_CDP
/**
* prepare list of texture tiles, woi, and calculate orthogonal neighbors for tiles (in 4 bits of the task field
* use 4x8=32 threads,
*/
extern
"C"
__global__
void
prepare_texture_list
(
struct
tp_task
*
gpu_tasks
,
int
num_tiles
,
// number of tiles in task list
int
*
gpu_texture_indices
,
// packed tile + bits (now only (1 << 7)
int
*
num_texture_tiles
,
// number of texture tiles to process
int
*
woi
,
// x,y,width,height of the woi
int
width
,
// <= TILESX, use for faster processing of LWIR images
int
height
)
// <= TILESY, use for faster processing of LWIR images
{
// int task_num = blockIdx.x;
// int tid = threadIdx.x; // maybe it will be just <<<1,1>>>
dim3
threads
((
1
<<
THREADS_DYNAMIC_BITS
),
1
,
1
);
int
blocks_x
=
(
width
+
1
)
>>
THREADS_DYNAMIC_BITS
;
dim3
blocks
(
blocks_x
,
height
,
1
);
if
(
threadIdx
.
x
==
0
)
{
clear_texture_list
<<<
blocks
,
threads
>>>
(
gpu_texture_indices
,
width
,
height
);
cudaDeviceSynchronize
();
// not needed yet, just for testing
}
__syncthreads
();
}
// blockDim.x * gridDim.x >= width
__global__
void
clear_texture_list
(
int
*
gpu_texture_indices
,
// packed tile + bits (now only (1 << 7)
int
width
,
// <= TILESX, use for faster processing of LWIR images
int
height
)
// <= TILESY, use for faster processing of LWIR images
{
int
col
=
threadIdx
.
x
+
blockDim
.
x
*
blockIdx
.
x
;
int
row
=
blockIdx
.
y
;
if
(
col
>
width
)
{
return
;
}
*
(
gpu_texture_indices
+
col
+
row
*
TILESX
)
=
0.0
;
}
#endif //#ifdef USE_CDP
extern
"C"
...
...
@@ -1569,12 +2199,14 @@ __device__ void corrUnfoldTile(
__device__
void
debug_print_lpf
(
float
*
lpf_tile
)
{
#ifdef HAS_PRINTF
for
(
int
dbg_row
=
0
;
dbg_row
<
DTT_SIZE
;
dbg_row
++
){
for
(
int
dbg_col
=
0
;
dbg_col
<
DTT_SIZE
;
dbg_col
++
){
printf
(
"%10.5f "
,
lpf_tile
[
dbg_row
*
DTT_SIZE
+
dbg_col
]);
}
printf
(
"
\n
"
);
}
#endif
}
...
...
@@ -1583,6 +2215,7 @@ __device__ void debug_print_clt1(
const
int
color
,
int
mask
)
{
#ifdef HAS_PRINTF
if
(
color
>=
0
)
printf
(
"----------- Color = %d -----------
\n
"
,
color
);
for
(
int
dbg_quadrant
=
0
;
dbg_quadrant
<
4
;
dbg_quadrant
++
){
printf
(
"----------- Quadrant (c(h)-c(v), s-c, c-s, s-s) = %d -----------
\n
"
,
dbg_quadrant
);
...
...
@@ -1596,6 +2229,7 @@ __device__ void debug_print_clt1(
}
printf
(
"
\n
"
);
}
#endif
}
__device__
void
debug_print_clt_scaled
(
float
*
clt_tile
,
// [4][DTT_SIZE][DTT_SIZE1], // +1 to alternate column ports)
...
...
@@ -1603,6 +2237,7 @@ __device__ void debug_print_clt_scaled(
int
mask
,
float
scale
)
{
#ifdef HAS_PRINTF
if
(
color
>=
0
)
printf
(
"----------- Color = %d -----------
\n
"
,
color
);
for
(
int
dbg_quadrant
=
0
;
dbg_quadrant
<
4
;
dbg_quadrant
++
){
printf
(
"----------- Quadrant (c(h)-c(v), s-c, c-s, s-s) = %d -----------
\n
"
,
dbg_quadrant
);
...
...
@@ -1616,6 +2251,7 @@ __device__ void debug_print_clt_scaled(
}
printf
(
"
\n
"
);
}
#endif
}
...
...
@@ -1624,7 +2260,7 @@ __device__ void debug_print_mclt(
float
*
mclt_tile
,
// [4][DTT_SIZE][DTT_SIZE1], // +1 to alternate column ports)
const
int
color
)
{
#ifdef HAS_PRINTF
if
(
color
>=
0
)
printf
(
"----------- Color = %d -----------
\n
"
,
color
);
for
(
int
dbg_row
=
0
;
dbg_row
<
DTT_SIZE2
;
dbg_row
++
){
for
(
int
dbg_col
=
0
;
dbg_col
<
DTT_SIZE2
;
dbg_col
++
){
...
...
@@ -1633,6 +2269,7 @@ __device__ void debug_print_mclt(
printf
(
"
\n
"
);
}
printf
(
"
\n
"
);
#endif
}
__device__
void
debug_print_corr_15x15
(
...
...
@@ -1640,6 +2277,7 @@ __device__ void debug_print_corr_15x15(
float
*
mclt_tile
,
//DTT_SIZE2M1 x DTT_SIZE2M1
const
int
color
)
{
#ifdef HAS_PRINTF
int
size2r1
=
2
*
corr_radius
+
1
;
if
(
color
>=
0
)
printf
(
"----------- Color = %d -----------
\n
"
,
color
);
for
(
int
dbg_row
=
0
;
dbg_row
<
size2r1
;
dbg_row
++
){
...
...
@@ -1649,6 +2287,7 @@ __device__ void debug_print_corr_15x15(
printf
(
"
\n
"
);
}
printf
(
"
\n
"
);
#endif
}
...
...
src/main/resources/dtt8x8.cuh
→
src/main/resources/
kernels/
dtt8x8.cuh
View file @
907cda8d
File moved
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment