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.
Monday, December 30, 2019
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
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
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",
],
// ...
}
],
Monday, November 11, 2019
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
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
{
// 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;
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
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
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 병렬 프로그래밍
- 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 병렬 프로그래밍
Monday, February 18, 2019
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.
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.
Thursday, February 14, 2019
About "Shell Script"
Writing Shell Scripts - The Beginner's Guide
#!: hashbang or shebang
#! /bin/bash: it is a convention, not a rule.
Why do you need to put #!/bin/bash at the beginning of a script file?
And
sysadmin execute command - How to use SSH to run a shell script on a remote machine?
#!: hashbang or shebang
#! /bin/bash: it is a convention, not a rule.
Why do you need to put #!/bin/bash at the beginning of a script file?
And
sysadmin execute command - How to use SSH to run a shell script on a remote machine?
Subscribe to:
Posts (Atom)