Monday, December 30, 2019

C++ - Reference variables

C++ - Reference variables
in the Thinking in C++ (p. 151)
"Pointers work roughly the same in C and in C++, but C++ adds an additional way to pass an address into a function. This is pass-by-reference and it exists in several other programming languages so it was not a C++ invention."

int a = 0;
int &ref = a;

https://www.learncpp.com/cpp-tutorial/611-references/

Pointer vs. Reference
1. Pointers are a superset, references are a subset.
2. References must be initialized when created.
3. References can not be reassigned.

Sunday, December 29, 2019

#pragma once vs. #ifndef

#pragma once is NOT standard
But #ifndef is standard
#ifndef XXX_YYYY
#define XXX_YYYY


#endif // XXX_YYYY

In the compile-time #pragma once is faster.

https://stackoverflow.com/questions/1143936/pragma-once-vs-include-guards
https://beesbuzz.biz/code/1473-pragma-once-vs-ifndef-define

Thursday, December 12, 2019

[VS Code] enable define in C & C++

Setting Visual Studio Code

c_cpp_properties.json
ctrl+shift+p
>C/C++:Edit Configuration (JSON)

Make c_cpp_properties.json in .vscode folder, and
 - Updated c_cpp_properties.json syntax

"configurations": [
    {
        "defines": [
            "WIN32",
        ],
        // ...
    }
],


Saturday, October 26, 2019

How can I find what instruction set extension is supported in my Intel Processor?

https://www.intel.com/content/www/us/en/support/articles/000005779/processors.html

1. Go to https://ark.intel.com/content/www/us/en/ark.html site
2. Processors
3. Select Intel xxx Processor type
4. Select Product Name: Intel® Core™ i7-5500U Processor
5. Find "Advanced Technology"
You can find the supported SIMD instructions
 Intel i7-5500U can support: Intel® SSE4.1, Intel® SSE4.2, Intel® AVX2

And 
How to Identify My Intel® Processor
And gcc x86 options
https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html

Thursday, April 18, 2019

How to add commend in "macro function" or #define ?

int small_func(int a)
{
    // input plus two
    return (a + 2);
}

#define SMALL_FUNC(a) ({ \
    int result;
    do { \
        /* input plus two */ \
        result = a + 2; \
    } while(0); \
    result; \
})

How to Add Comments to Macros

for loop multiple conditions

what is the right?
1. for (i = 0, j = 0; i < loop, j < loop2; i++, j++)
2. for (i = 0, j = 0; (i < loop) && (j < loop2); i++, j++)

The answers are
Are multiple conditions allowed in a for loop?
GeeksforGeeks: Output of C Program | Set 22, question 2

for example
i = 1, 2; is same as i = 2;

Wednesday, April 17, 2019

TI DSP memory & memory map

L2SRAM: very very fast
MSMCSRAM (Multi-core Shared Memory Controller, SRAM): very fast
DDR3: fast

TI Linker Command File Primer

Thursday, March 14, 2019

TI DSP code optimization

Texas Instruments TMS320C6x DSP code optimization

1. Hand-Tuning Loops and Control Code on the TMS320C6000
1.1 loop optimization
 -nrestrict
 - #pragma MUST_ITERATE(lower_bound, upper_bound, factor)
 - _nasserts()
1.2 if statement optimization

2. Introduction to TMS320C6000 DSP Optimization
2.1 Cannot make "Pipelined Loop"
 - exceed 14 executed packets (1 packet is 8 instructions)
 - nested loops
 - conditional branches inside loops
 - function calls inside loops
2.2 "Pipelined Loop" consists of
 - Prolog: above Kernel
 - Kernel: pipeline is fully utilized
 - Epilog: below Kernel
2.3 ii
 - ii = iteration interval
 - software pipeline loop can be approximated with ii * number_of_iterations.
 - ii is bounded below by two factors: the loop carried dependency bound and the partitined resource bound.
 - the loop carried dependency bound: the distance of the largest loop path


* Reference
Hand-Tuning Loops and Control Code on the TMS320C6000
Introduction to TMS320C6000 DSP Optimization
TMS320C6000 DSP Optimization Workshop - Texas Instruments Wiki
TMS320C6000 Programmer's Guide (Rev. K) - Texas Instruments
http://processors.wiki.ti.com/index.php/Software_libraries
http://processors.wiki.ti.com/index.php/Profiler
DSP/BIOS timers and benchmarking Tips SPRA829: Profile



Tuesday, February 19, 2019

Performance / Optimization

1. Practical Performance
 - gprof
 - PAPI
 - Callgrind
 - Compiler Flags

1.1
 - IA-32 (32 bit, intel architecture 32 bit, i386): the 32 bit version of the x86 instruction set
 - AMD64 (64 bit, x64, x86_64, AMD64); the 64 bit version of the x86 instruction set
1.2 SIMD
 SISD (single instruction, single data) vs. SIMD (single instruction, multiple data)
 - SIMD 병렬 프로그래밍


Sunday, February 17, 2019

Duplicated code detection

1. PMD (https://pmd.github.io/)
CPD (copy paste detector)
If you use the Java 11 or more version, please use the PMD 6.11.0 or more

windows
> bin\cpdgui.bat

linux
$ ./run.sh cpd --minimum-tokens 100 -- files /usr/local/java/src/java
https://stackoverflow.com/questions/53260053/current-eclipse-plugin-for-duplicated-code



2. ConQAT
ConQAT end of life
You can download old versions from here.