CuLab
CuLab Release Notes
V4.1.2
This update resolves several bugs while maintaining full backward compatibility with all v4.x.x versions of the toolkit.
Bug Fixes & Enhancements
1. Resolved a memory leak caused by BLAS API usage.
2. Improved error handling in the CU_Tensor_Pull_to_DVR API.
3. Enhanced error handling in the GPU_Info tool.
4. Fixed a missing help file link in the Get_Exec_Time.vim utility.
5. Corrected typos in the help file.
6. Removed Get_Exec_Time.vim from the examples and replaced it with the version included in the toolkit.
​
​
V4.1.1
This update introduces new functionalities, performance optimizations, and bug fixes while maintaining full backward compatibility.
New Features
1. Numeric Subpalette:
• CU_Reduce.vi: Enables batch mode reduction.
• Supported Data Types: I32, U32, I64, U64, SGL, DBL, CDB, CSG.
• Dimensionality: 2D.
• Operations: Sum, Product, Min, Max.
• Preprocessing: None, Abs, Sqr, Sqrt.
2. Array Subpalette:
• CU_Array_Permute.vi: Permutes tensor dimensions.
• Supported Data Types: All.
• Dimensionalities: 3D, 4D.
3. Statistics Subpalette:
• CU_Mean_Batch.vi & CU_RMS_Batch.vi: Perform batch mode mean and RMS calculations. Available since v4.0.1
• Supported Data Types: SGL, DBL, CSG, CDB.
• Dimensionality: 2D.
4. CU_Array_Reshape_to_TxD: Now supports an in-place option and allows one target dimension to be inferred automatically.
Optimizations
1. CU_Transpose_2D_Array.vi: Significantly improved execution speed.
2. General Performance: Optimized multiple functions by using asynchronous copy operation.
​
Bug Fixes & Enhancements
1. Fixed a bug in CU_Initialize_Array.vi when initializing large tensors with complex data types.
2. CU_Convolution.vi now returns an error when called in in-place mode.
3. Improved error messages to display the full call chain.
4. Resolved an issue where some VIs were broken after installation.
5. Enhanced dimension validation with clearer error messages for mismatched dimensions.
6. Removed unnecessary DLLs from the package installer.
7. Improved error handling in GPU Info and CU_FIR_Filter functions.
8. Fixed unnecessary host destination wire connections in example VIs calling CU_Tensor_Pull.vi.
9. Various minor fixes and stability improvements.
Cosmetic Changes
1. Updated icons for the following API VIs (now indicating default in-place operations):
• CU_Replace_Array_Element.vi
• CU_Replace_Array_Element_by_Index_Batch.vi
• CU_Replace_Array_Subset_1D_1D.vi
• CU_Replace_Array_Subset_2D_2D.vi
• CU_Replace_Array_Subset_2D_1D.vi
​
​
V4.0.1
This version of the toolkit brings lots of new functionalities and improvements.
It mainly keeps the backward compatibility with the previous version but does break for some API function.
​
New Features
1. Now the toolkit supports adaptive tensor sizing. The output/destination tensor will automatically be resized depending on the input/s dimensions and configurations (e.g. continuous signal processing VIs).
2. Added new function in “Signal Operation” subpalette:
a. “CU_Decimate_Single_Shot_Adaptive.vi”. This vi is designed to perform decimation based on output size, in contrast to “CU_Decimate_Single_Shot.vi”, which performs decimation based on decimation factor, and adaptively choses output size.
- Supported input types: SGL, DBL.
- Batch mode supported: False.
- Supported operations: Avg, Min, Max, MinMax
- This VI does not have LabVIEW counterpart.
3. Added new function in “Filters” subpalette in the “Signal Processing” palette.
a. “CU_FIR_Filter.vi” – Performs continuous FIR filtering over sequence of input signal.
- Supported input types: SGL, DBL, CSG, CDB.
- Batch mode supported: True.
4. Updated “CU_Sine_Pattern.vi”:
a. Added support for complex types.
b. Added support for continuous signal generation between consecutive calls.
c. Added batch mode support.
5. Updated “CU_Rational_Resample.vi”:
a. Removed “averaging” input.
b. Added support for continuous processing.
c. Added support for custom FIR filter coefficients through separate input.
d. Removed “Dest_in” input, as it is changing its size between consecutive calls.
6. Updated “CU_Digital_Down_Conversion.vi””
a. Added support for continuous reference/carrier signal generation.
b. Added support for custom FIR filter coefficients through separate input.
c. Removed “Dest_in” input, as it is changing its size between consecutive calls.
7. Added new “API CU_Tensor_Pull_to_DVR.vi” in “Tensor” palette, which aims to improve GPU to CPU data copying efficiency.
8. Removed support for preallocated CPU array destination for “CU_Tensor_Pull.vi”. Destination allocation (or reallocation) is performed internally.
9. Updated “CU_Tensor_Push.vi”. Now it does not require to have preallocated tensor as a destination input.
10. Updated GPU info tool
a. Changed display font to monospace type for aligned visualization of the information.
b. Added info about installed driver version.
c. Added info about detected GPUs.
Cosmetic Changes
1. Moved “CU_Add_Broadcast.vi” and “CU_Multiply_Broadcast.vi” functions into “Broadcast” subpalette.
2. “CU_Sine_Pattern.vi” connector pane changed to match with LabVIEW “Sine Pattern” vi.
3. “CU_Max_Min.vi” connector pane changed to match with LabVIEW “Max & Min” vi.
4. “CU_Decimate_Single_Shot.vi” connector pane changed to match with LabVIEW “Decimate Single Shot” vi.
Bug Fix
​
​
V3.0.4.67
This is a major update which brings lots of new features and improvements.
​
Backward Compatibility
This version breaks compatibility with previous versions of the toolkit.
​
New Features​​
-
​Added “Computer Vision” palette with the following new functions:
-
CU_CV_GrayMorpholgy.vi - Performs grayscale morphological transformations.
-
Supported operations: Erode, Dilate
-
Supported input types: U8, U16, SGL.
-
Batch mode supported: False.
-
-
CU_CV_Resample.vi - Performs resampling operation.
-
Supported input types: All CV types.
-
Batch mode supported: True.
-
-
CU_CV_Extract.vi - Extracts a portion of the input image.
-
Supported input types: All CV types.
-
Batch mode supported: True.
-
Images are represented as T2D tensors.
-
Grayscale images are represented with the help of U8, I8, U16, I16, SGL datatypes, while color images (e.g. ARGB) are represented using U32 datatype.
-
Some functions also support batch mode of operation in which case the batch of images are provided as T3D tensors.
-
-
-
Added new function in “Signal Operation” subpalette:
-
CU_Digital_Down_Conversion.vi - Performs digital down conversion.
-
Supported input types: SGL, DBL, CSG, CDB.
-
Batch mode supported: True.
-
-
CU_Convolution_Batch.vi – Performs batch convolution operation.
-
Supports 1D MCH-MCH, MCH-1CH modes.
-
Batched instances in CU_Convolution polymorphic vi have been removed.
-
-
Added support for 2D convolution to CU_Convolution.vi.
-
Supported input types: SGL, DBL.
-
-
-
Changed the “FFT” subpalette name to “Transforms” and added the following functions:
-
CU_Hilbert_Transform.vi - Computes the fast Hilbert transform of the input Tensor.
-
Accepted input Tensor types: SGL, DBL
-
Supported dimensionalities: T1D.
-
-
CU_Analytic_Signal.vi - Computes the complex Analytic Signal of the real-valued input Tensor.
-
Accepted input Tensor types: SGL, DBL
-
Return Tensor types: CSG, CDB
-
Supported dimensionalities: T1D.
-
-
-
Added “Boolean Operation” palette with the following functions.
-
CU_Boolean_2in.vi – compound function for different binary(two-input) logical operations.
-
Supported Boolean Operations:
-
AND
-
OR
-
XOR
-
NAND
-
NOR
-
XNOR
-
Select X
-
Select Y
-
-
-
CU_Boolean_Not.vi
-
CU_And_Array_Elements.vi
-
CU_Or_Array_Elements.vi
-
-
Added “Comparison Operation” palette with the following functions.
-
CU_Compare_1_Input.vi – compound function for different unary (single-input) comparison operations.
-
Supported Comparison Operations:
-
-
Optimizations
-
Greatly optimized the efficiency of data movement between CPU and GPU which leads to significant (30-40% for common benchmarks) improvement of toolkit overall performance.
-
Optimized the execution of numeric conversion functions.
-
Optimized the execution of CU_Array_Subset.vi
-
Significantly improved the performance of CU_Tensor_Create_Push.vi and CU_Tensor_Push.vi.
-
Optimized the memory, context, and other resource management functionalities.
-
Other optimizations.
​
Extended Functionalities
-
The FIR filter specification has been incorporated into CU_Rational_Resample.vi for both single-channel and multichannel (batch) inputs.
-
The following functions have been updated to accept a constant as a second input.
-
CU_Logarithm_Base_X.vi
-
CU_Power_Of_X.vi
-
-
All numeric conversion functions now support all tensor types.
-
Error Dialog Box returns the full path for call chain.
-
CU_Tensor_Create_Push.vi and CU_Tensor_Push.vi check if Input Tensor and CPU Data Array dimensions match before pushing the data to GPU.
-
Automated the process of adding dependency DLLs when building applications.
-
The help file was updated to reflect the updated functionalities.
​
Bug Fixes
-
Fixed input tensor types for T1D:DBL instance of CU_Inverse_Tangent_2_input.vi.
-
The functionality of T4D instances of CU_Array_Subset.vi have been corrected.
-
Fixed array max dimension (65535) issue in CU_Power_Spectrum.vi.
-
CU_Decimate_Single_Shot.vi connector pane changed to match with LabVIEW Decimate Single Shot vi.
-
Renamed the following functions to conform with the common naming conventions.
-
From “CU_Square Root.vi” to “CU_Square_Root.vi”
-
From “CU_Add Array Elements.vi” to “CU_Add_Array_Elements.vi”
-
-
Fixed the bug of incorrect results in CU_Square.vi for complex inputs.
-
Fixed the CPU memory leakage bug in CU_Tensor_Destroy.vi.
-
Other minor fixes.
​
V2.2.1.55
This is a major update which brings lots of new features and improvements.
​
Backward Compatibility
This version does not break compatibility with v6.x.x versions of the toolkit.
​
New Features​​
-
Added “Boolean Operation” palette with the following functions.
-
CU_Boolean_2in.vi – compound function for different binary(two-input) logical operations.
-
Supported Boolean Operations:
-
AND
-
OR
-
XOR
-
NAND
-
NO
-
XNOR
-
Select X
-
Select Y
-
-
CU_Boolean_Not.vi
-
CU_And_Array_Elements.vi
-
CU_Or_Array_Elements.vi
-
-
-
Added “Comparison Operation” palette with the following functions.
-
CU_Compare_1_Input.vi – compound function for different unary (single-input) comparison operations.
-
Supported Comparison Operations:
-
Equal To 0?
-
Not Equal To 0?
-
Greater Than 0?
-
Greater Or Equal To 0?
-
Less than 0?
-
Less Or Equal To 0?
-
-
Supports all Tensor types, except complex types.
-
-
CU_Compare_2_Inputs.vi – compound function for different binary (two-input) comparison operations.
-
Supported Comparison Operations:
-
Equal?
-
Not Equal?
-
Greater?
-
Greater Or Equal?
-
Less?
-
Less Or Equal?
-
-
Supports all Tensor types.
-
Accepts Comparison with a Constant.
-
-
CU_In_Range_and_Coerce.vi
-
Supports all Tensor types, except complex types.
-
Supports all tensor dimensionalities except T0D.
-
-
CU_Max_Min.vi
-
Supports all Tensor types, except complex types.
-
Supports tensor dimensionalities: T1D, T2D.
-
-
-
Added “Lookup” subpalette in “Array” palette with the following functions.
-
CU_Array_Lookup_by_Index.vi. - Returns a Tensor containing elements of the input Tensor specified by Index Tensor.
-
Supports all tensor dimensionalities except T0D.
-
Supports all Tensor types.
-
-
CU_Array_Lookup_by_Bool.vi.
-
Description: Returns a Tensor containing elements of the input Tensor, that have a value 1 (TRUE) in Boolean input Tensor.
-
Supports all tensor dimensionalities except T0D.
-
Supports all Tensor types, except complex types.
-
-
-
Added the following function in “Array” palette
-
CU_Replace_Array_Elemenets_by_Index_Batch.vi - replaces elements in input Tensor with elements from Sub-Tensor at indices specified in Index-Tensor
-
Supports tensor dimensionalities: T1D, T2D.
-
Accepts all input Tensor types
-
-
-
Added “Utilities” palette with the following function:
-
Get_Exec_Time.vi – Returns the relative current time in seconds, as well as time difference between execution of two instances of this VI.
-
-
Changed the “FFT” subpalette name to “Transforms” and added the following functions.
-
CU_Hilbert_Transform.vi - Computes the fast Hilbert transform of the input Tensor.
-
Accepted input Tensor types: SGL, DBL
-
Supported dimensionalities: T1D
-
-
CU_Analytic_Signal.vi - Computes the complex Analytic Signal of the real-valued input Tensor.
-
Accepted input Tensor types: SGL, DBL
-
Return Tensor types: CSG, CDB
-
Supported dimensionalities: T1D
-
-
Optimizations
-
Significantly improved the performance of CU_Tensor_Create_Push.vi and CU_Tensor_Push.vi.
-
Optimized execution of CU_to_SGL.vi function.
-
Other optimizations.
​
Extended Functionalities
-
Error Dialog Box returns the full path for call chain.
-
CU_Tensor_Create_Push.vi and CU_Tensor_Push.vi check if Input Tensor and CPU Data Array dimensions match before pushing the data to GPU.
-
The help file was updated to reflect the updated functionalities.
​
Bug Fixes
-
Fixed array max dimension (65535) issue in CU_Power_Spectrum.vi.
-
CU_Decimate_Single_Shot.vi connector pane changed to match with LabVIEW Decimate Single Shot vi.
-
Changed the name of "CU_Add Array Elements.vi" to "CU_Add_Array_Elements.vi".
-
Other minor fixes.
​
V2.1.1.50
​This is a minor update which does not break backward compatibility with previous version of the toolkit.
​
Features
-
Added Signal Operation subpalette with the following functions.
-
CU_Decimate_Single_Shot.vi
-
Supports 1Ch-1Ch, MCh-1Ch, MCh-MCh modes.
-
Accepts (SGL, DBL, CSG, CDB) Tensor Types.
-
-
CU_Rational_Resampl.vi
-
Supports single channel mode.
-
Accepts (SGL, DBL, CSG, CDB) Tensor Types.
-
-
CU_Convolution.vi
-
Supports 1Ch-1Ch, MCh-1Ch, MCh-MCh modes.
-
Accepts (SGL, DBL, CSG, CDB) Tensor Types.
-
-
Cross_Correlation.vi
-
Supports single channel mode.
-
Accepts (SGL, DBL, CSG, CDB) Tensor Types.
-
-
-
Added a function to the Complex subpalette.
-
CU_Interleaved_to_Complex.vi.
-
Description: Converts interleaved sampled IQ data into complex representation. Designed to minimize data copy overhead during conversion.
-
Supports all tensor dimensionalities except T0D.
-
Accepted input datatypes (I8, U8, I16, U16, I32, U32, I64, U64, SGL, DBL)
-
Supported output datatypes (CSG, CDB)
-
-
-
Added following functions to the Device Management subpalette.
-
CU_Get_GPU_List.vi
-
Returns list of Nvidia GPUs available on the PC.
-
-
CU_Get_GPU_Properties.vi
-
Returns the properties for the selected GPU ID.
-
-
CU_Set_GPU.vi
-
Sets the selected GPU to be active.
-
-
-
Extended Functionalities
-
CU_Sine.vi, CU_Cosine.vi and CU_exponential.vi accept tensors with complex data representations (CSG, CDB) as input.
-
-
The help file was updated to reflect the updated functionalities.​​
​
​Bug Fixes
-
Fixed array max dimension issue in CU_Transpose_2D_Array.vi.
-
Fixed “Dest in” memory allocation issue in CU_Power_Spectrum.vi.
-
Fixed issue when CU_Square_Root.vi returned incorrect results when imaginary part is 0, and when run in in-place mode.
-
Other minor fixes.​​
​
​
V2.0.1.39
This version of CuLab toolkit brings new functionalities and improves the performance of existing ones.
​
Backward Compatibility
This is a minor update which does not break backward compatibility with v6.x.x versions of the toolkit.
Features
-
Added Trigonometric functions
-
​Sine
-
Cosine
-
Tangent
-
Cotangent
-
Inverse Sine
-
Inverse Cosine
-
Inverse Tangent
-
Inverse Tangent 2 Input (atan2)
-
Inverse Cotangent
-
Sine & Cosine
-
Sinc
-
-
Added Exponential functions
-
Exponential
-
Exponential Arg -1
-
Logarithm Base 10
-
Logarithm Base 2
-
Logarithm Base X
-
Natural Logarithm
-
Natural Logarithm Arg +1
-
Power Of 10
-
Power Of 2
-
Power Of X
-
Y-th Root of X
-
-
Added Hyperbolic functions
-
Hyperbolic Sine
-
Hyperbolic Cosine
-
Hyperbolic Tangent
-
Hyperbolic Cotangent
-
Inverse Hyperbolic Sine
-
Inverse Hyperbolic Cosine
-
Inverse Hyperbolic Tangent
-
Inverse Hyperbolic Cotangent
-
-
Added missed complex APIs
-
Complex to Polar
-
Polar to Complex
-
Polar to Re/Im
-
Re/Im to Polar
-
-
Added function for Quotient & Remainder
-
Added support for Tensor-Constant operations for binary numeric operations. This allows to choose a CPU based constant as a second operand
-
Added new function generation functions
-
Ramp Pattern
-
Sine Pattern
-
Power Spectrum
-
-
Added support for missing numeric types for numeric operations
-
Redesigned colors for tensor wires to make them distinguishable across numeric types and dimensionality
-
Added batched versions of FFT and IFFT
-
Added spectrum shifting functionality single channel and batched FFT
​​
Optimizations
-
Greatly improved the performance of Real-to-Complex (R2C and D2Z) FFTs
-
Optimized execution times for Complex functions
-
Other optimizations
​Bug Fixes
-
Fixed automatic instance selection issue in Array Max Min polymorphic function
-
Fixed memory leakage issue
-
Fixed an error in BLAS benchmarking example
-
Corrected typos
-
Other bug fixes​​
​
​
V1.0.1.19
Initial version of the toolkit. ​