안녕하세요. Teus입니다. 이번 포스팅은 SIMD(Single Instrunction Multi Data)를 다룹니다. 이번에는 AVX를 Array로 사용하지않고, Pointer를 사용하는 패턴을 보도록 하겠습니다.1. _aligned_malloc_aligned_malloc(size_t data_size, size_t alignemnet_size)aligned_malloc은 기본적인 malloc과 다르게 alignement_size 만큼 Data끼리의 간격을 보장해주는 Malloc을 의미합니다. 일반적으로 16byte, 32byte씩 Data를 띄워주면 SIMD의 Data처리 효율이 증가한다고 알려져 있습니다.__m256d* arr1 = (__m256d*)_aligned_malloc(sizeof(dou..
안녕하세요. Teus입니다. 이번 포스팅은 SIMD(Single Instrunction Multi Data)를 다룹니다. 이번에는 AVX2의 기본 연산 중 쓸만한 함수 중 Permuting and Shuffling 을 다룹니다.1. PermutingPermuting은 사용자가 원하는 Order를 주고, 해당 Order를 기준으로 rearranged Vector를 구할 수 있는 방법입니다.Data TypeDescription_mm/mm256_permute_ps/pdSelect elements from the input vector based on an 8-bit control value_mm256_permute4x64_pd/epi64Select 64-bit elements from the input vec..
안녕하세요. Teus입니다. 이번 포스팅은 SIMD(Single Instrunction Multi Data)를 다룹니다. 이번에는 AVX2의 기본 연산 중 쓸만한 함수 중 FMA연산을 정리합니다.1. FMAFMA는 Fused Multiply and Add 연산 입니다. 영단어에서 알 수 있듯 곱셈과 동시에 덧셈을 하는 연산입니다. 가장 간단하게 표현하면ret = a*b + c 위 연산을 SIMD로 연산하는 명령어 입니다. 그럼 위 연산은 위해서 3개의 Vector가 필요하게 됩니다.TMI한번에 add와 mul연산을 동시에 할 수 있기 때문에, 한번에 2flops연산을 할 수가 있습니다.(한 cycle에 연산된다는 가정) 그래서 GPU에서는 core의 개수 * clock * 2flops로 성능이 측정됩니다..
안녕하세요. Teus입니다. 이번 포스팅은 SIMD(Single Instrunction Multi Data)를 다룹니다. 이번에는 AVX2의 기본 연산 중 쓸만한 함수 중 add/sub연산을 정리합니다.1. MulMul 연산도 add나 sub과 유사하게 사용할 수 있으면 좋겠지만 mul같은 경우 bit단위 연산을 고려해야 합니다.TMI32bit과 32bit을 연산할 경우 최대 64bit의 연산 결과가 발생합니다. 이러한 문제점이 있기 때문에 Multiply를 진행 할때는 단순하게 연산하는것이 아니라, 64bit의 상위 32bit을 쓰는 등과같이 bit단위로 선택적으로 data를 취득해서 사용하게 되어있습니다.Data TypeDescription_mm256_mul_ps/pdMultiply two float..
안녕하세요. Teus입니다. 이번 포스팅은 SIMD(Single Instrunction Multi Data)를 다룹니다. 이번에는 AVX2의 기본 연산 중 쓸만한 함수 중 add/sub연산을 정리합니다.1. Add/Sub두 Vector를 SIMD로 더하거나 빼는 연산 입니다.Data TypeDescription_mm256_add_ps/pdAdd two floating-point vectors_mm256_sub_ps/pdSubtract two floating-point vectors_mm256_add_epi8/16/32/64Add two integer vectors_mm236_sub_epi8/16/32/64Subtract two integer vectors단순하게 두개의 Vector를 만들고, 이 두 Ve..
안녕하세요. Teus입니다. 이번 포스팅은 SIMD(Single Instrunction Multi Data)를 다룹니다. C언어 Level의 Low수준을 다루게 됩니다.1. SIMD란SIMD는 Single Instrunction Multi Data의 약자 입니다. 글자로 알수 있듯, 하나의 명령어로 다수의 Data를 처리한는 방법 입니다. 아래 코드를 보실까요?//일반계산(int *)arr1 = (int *)malloc(sizeof(int)*8);(int *)arr2 = (int *)malloc(sizeof(int)*8);(int *)ret = (int *)malloc(sizeof(int)*8);//8번의 정수연산을 위해서 8번의 반복문을 돌아야됨for(int i=0; i여기서 앵 이거 걍 함수로 한줄처..
- Total
- Today
- Yesterday
- Greedy알고리즘
- 코딩테스트
- 컴퓨터그래픽스
- stack
- prime number
- 자료구조
- C++
- 분할정복
- 알고리즘
- git
- 이분탐색
- hash
- 완전탐색 알고리즘
- AVX
- Search알고리즘
- GDC
- SIMD
- 병렬처리
- 사칙연산
- heap
- Sort알고리즘
- 프로그래머스
- 동적계획법
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |