링크좀 달아주던가.. 무슨 논쟁인지 모르겄네
오타입니다
http://gall.dcinside.com/board/view/?id=programming&no=573054
김치를 그냥 먹는게 좋을까 볶아먹는게 더 좋을까 이런 논쟁임
http://gall.dcinside.com/board/view/?id=programming&no=573057
코드세이퍼님 링크 감사합니다. aligned라는게 4byte 단위로 끊는거고 unaligned는 불규칙한 단위로 끊는걸 말하는건가여??
불규칙은 아니고 접근 단위 크기 n 바이트의 배수가 아닌 주소를 시작으로해서 n바이트 단위로 접근하는걸 말하죠. C / C++ 에서유~
글 다 읽고 왔는데영. 70% 정도 이해햇어요. 이런거 알고 있다는게 신기하네영
그런데.. 이부분이 이해가 안되여 최적화부분
그러기 위해서 시작주소가 4로 나눠떨어지지 않는 부분만큼을 1 byte 단위, 4로 정렬될수 있는 마지막 주소 이후 짜투리를 또 1 byte 단위로 읽고 쓰는 식으로
저런거 모르면서 아는 사람 몰아세우고 이리 저리 끌고다니며 까는게 신기하죠 전.
xxxxxxxx / xxxxxxxx 이렇게 8비트 단위로 읽는데 시작이 xoxxxxx o부터 끊는다는 거잔아요.
몰라서 죄성합니다. ㅠㅠ
일단 4바이트 단위로 접근하고 싶다면 주소가 4의 배수가 될때까지는, 1바이트 단위로 접근해서 1의 배수를 만족하게 해야한다는거죠.
그러고 나면 4바이트 단위로 접속해도 오류가 생기지 않고, 그렇게 4바이트 단위로 큰 덩어리를 쫘악~ 처리한 다음
4의 배수로 나뉘어 떨어지지 않는 끄트머리만 다시 1바이트 단위로 읽거나 쓰거나 해서 처리하면 된다는거죠.
8비트? 좀 착각하시는듯.
가량 4바이트 주소라면 주소 생긴 모양이,
오 뭔가 알려고 해요! 다시 읽으러 갑니다! 2번째 정독하러 고고
0x???????0 으로 끝나거나, 0x???????4, 0x???????8, 0x???????C, 로 끝나게 되죠. 16진수 주소니까 4가지 끝자리 패턴이 있죠?
만약 0x???????3 주소에서 시작해서 0x???????1 주소까지 4바이트 단위로 전송한다면
시작할때 1바이트를 따로 처리해주면 0x???????4 주소에서 출발할수 있고, 끝날때 2 바이트를 따로 처리해주면 0x???????0 앞, 그러니까 0x???????F 까지를 4바이트로 처리하게 되는거죠.
SIGBUS라는게 4의 배수배가 아닌 접근을 할 때 발생하는 인터럽트 같은건가영?
오오오
추가 설명 지금 봤어여
명쾌합니다! 개추 드립니다
넵. 근데 인텔 CISC 에선 안생겨요
안에 프로텍션도 있고 acceleration 도 있어서, 알고리즘에 따라 더 성능좋게 컴파일되기도 하죠.
당연히 C++ 표현도 무지 간단하구요.
어차피 CPU가 대신해주는거라, 모조리 대신해주면야 본질적으로 unaligned 처리를 CPU가 해주는거라 똑같거든요. 문제는 각각 방식의 C / C++ 코드를 컴파일러가 어떻게 최적화 해 내느냐인거죠.
코드세이퍼님 intrinsic는 무슨 말이에요? 고유한 이라는 의미던데
C++ 문법에는 없는건데, C / C++ 이 원래 어셈블리랑은 다르잖아요? 기본 명령어랑 예약어만 갖고 있죠.
그 말은 CPU 안에 있는 명령어들을 직접 사용할 수 없다는거예요.
가속화 시켜준다는게 cpu가 알아서 정렬해주는 다는 의미인가여?
그런데 C++ 컴파일러들 중에 CPU 내부 명령어들을 거의 직접 부를 수 있도록 문법으로 지원해주는 경우가 있어요.
넵.
unaligned C++ 표현이 인텔에서 가능한건, CPU가 알아서 정렬해주기 때문이거든요.
아아 intrinsic이 c/c++은 cpu안에 명령어를 직접 사용못하니 어셈블리어로 사용하라 그런 뜻이에여?
타자 빠르시당
근데 그게 직접 정렬하는것 보다 과거엔 느렸다는거죠.
어셈블리어랑 비슷한데, C++ 구조체/공용체와 함수 비슷하게 생겨있죠.
과거에는 C/C++ 문법으로 직접 주소를 정렬 하는것 (aligned) 보다 느렸는뎅,
특별한 케이스들에서 약간 더 빠르기도 했죠.
그러다가 SSE 명령어들이 추가되면서 무쟈게 빨라져버렸고,
컴파일러가 비교적 간단한 unaligned 표현들을 보다 더 잘 최적화해주기 시작한거죠.
그래서 unaligned 가 최적화를 위한 선택이라고 한건데, kukyakya 가 그걸 부정하며 정작 그걸 알고 쓰는 사람들을 이리 저리 불러대며 까고 있죠.
하지만 kukyakya 가 올린 데이타는 마지막에 하나? 빼고 다 틀림요. 그 하나도 5MB 이하의 용량 처리에 대해서는 언급도 안했고, C/C++ 로 표현한것도 아님유
그간 틀린 데이타들을 바탕으로 자기를 합리화한 글들은 모조리 다 틀렸다는거죠.
코드세이퍼님 마지막으호 IPP 는 머에여??
와 그세 이만큼 달아주셨네
Intel 에서 제공해주는 최적화 명령어로 만든 다양한 함수 라이브러리예요.
지금은 Intel Parallel Studio 란 이름으로 통합되어 있죠.
VC++ 에선 저것과 통합이 되고 있고, 다른 컴파일러에서는 동적라이브러리 형태로 갖다 쓸 순 있죠.
캬~ 코드세이퍼님 저 다 이해했어요!!
그러니까 Intel Architecture SIMD 명령어들을 사용해서 최적화된 라이브러리 라는거.
만세!!! 드디어 논쟁싸움에 내 의견을 낼 수 있겠구나!!
잘했어유~ : )
코세님 정말 감사해영
저 이거 이해했는데, 학생이에요! 저정도면 프갤에서 못하는 편은 아니겠쬬??
원래는 Intel JPEG Library 라는 형태로 배포되었었죠. 그래서 IJL 이라 불렀었고
IJL -> IPP -> IPS 가 된거죠.
네 프갤은 늅늅이들이 많으니깐유
IPP 말고 IPL 이라고도 하고 라이브러리랑 프로파일러, 프레임웍, 스튜디오를 일컫는 용어가 좀 다양하긴 하죠.
다 그게 그거. 그냥 인텔 최적화 라이브러리 라고 생각하시면 됨유.
그니까 직접 어셈블러로 SIMD 명령어를 잘 구사하거나, 인트린직으로 적당히 C++ 문법 위에 얹거나, 아예 라이브러리를 갖다쓰면 극악의 최적화가 되긴 한단 소리고,
그렇게까지 안하고 단순히 C/C++ 문법만으로도 요령이 좀 있으면 컴파일러가 알아서 잘 SIMD 에 물려주도록 적당히 최적화 할 수 있단거쥬.
감사합니다. 이해 95% 했습니다. 너무 기분이 좋아여~
좋은 기분으로 하루를 활기차게~ 싸움은 안끼시는게 기분에 좋아유~
오타입니다
http://gall.dcinside.com/board/view/?id=programming&no=573054
김치를 그냥 먹는게 좋을까 볶아먹는게 더 좋을까 이런 논쟁임
http://gall.dcinside.com/board/view/?id=programming&no=573057
코드세이퍼님 링크 감사합니다. aligned라는게 4byte 단위로 끊는거고 unaligned는 불규칙한 단위로 끊는걸 말하는건가여??
불규칙은 아니고 접근 단위 크기 n 바이트의 배수가 아닌 주소를 시작으로해서 n바이트 단위로 접근하는걸 말하죠. C / C++ 에서유~
글 다 읽고 왔는데영. 70% 정도 이해햇어요. 이런거 알고 있다는게 신기하네영
그런데.. 이부분이 이해가 안되여 최적화부분
그러기 위해서 시작주소가 4로 나눠떨어지지 않는 부분만큼을 1 byte 단위, 4로 정렬될수 있는 마지막 주소 이후 짜투리를 또 1 byte 단위로 읽고 쓰는 식으로
저런거 모르면서 아는 사람 몰아세우고 이리 저리 끌고다니며 까는게 신기하죠 전.
xxxxxxxx / xxxxxxxx 이렇게 8비트 단위로 읽는데 시작이 xoxxxxx o부터 끊는다는 거잔아요.
몰라서 죄성합니다. ㅠㅠ
일단 4바이트 단위로 접근하고 싶다면 주소가 4의 배수가 될때까지는, 1바이트 단위로 접근해서 1의 배수를 만족하게 해야한다는거죠.
그러고 나면 4바이트 단위로 접속해도 오류가 생기지 않고, 그렇게 4바이트 단위로 큰 덩어리를 쫘악~ 처리한 다음
4의 배수로 나뉘어 떨어지지 않는 끄트머리만 다시 1바이트 단위로 읽거나 쓰거나 해서 처리하면 된다는거죠.
8비트? 좀 착각하시는듯.
가량 4바이트 주소라면 주소 생긴 모양이,
오 뭔가 알려고 해요! 다시 읽으러 갑니다! 2번째 정독하러 고고
0x???????0 으로 끝나거나, 0x???????4, 0x???????8, 0x???????C, 로 끝나게 되죠. 16진수 주소니까 4가지 끝자리 패턴이 있죠?
만약 0x???????3 주소에서 시작해서 0x???????1 주소까지 4바이트 단위로 전송한다면
시작할때 1바이트를 따로 처리해주면 0x???????4 주소에서 출발할수 있고, 끝날때 2 바이트를 따로 처리해주면 0x???????0 앞, 그러니까 0x???????F 까지를 4바이트로 처리하게 되는거죠.
SIGBUS라는게 4의 배수배가 아닌 접근을 할 때 발생하는 인터럽트 같은건가영?
오오오
추가 설명 지금 봤어여
명쾌합니다! 개추 드립니다
넵. 근데 인텔 CISC 에선 안생겨요
안에 프로텍션도 있고 acceleration 도 있어서, 알고리즘에 따라 더 성능좋게 컴파일되기도 하죠.
당연히 C++ 표현도 무지 간단하구요.
어차피 CPU가 대신해주는거라, 모조리 대신해주면야 본질적으로 unaligned 처리를 CPU가 해주는거라 똑같거든요. 문제는 각각 방식의 C / C++ 코드를 컴파일러가 어떻게 최적화 해 내느냐인거죠.
코드세이퍼님 intrinsic는 무슨 말이에요? 고유한 이라는 의미던데
C++ 문법에는 없는건데, C / C++ 이 원래 어셈블리랑은 다르잖아요? 기본 명령어랑 예약어만 갖고 있죠.
그 말은 CPU 안에 있는 명령어들을 직접 사용할 수 없다는거예요.
가속화 시켜준다는게 cpu가 알아서 정렬해주는 다는 의미인가여?
그런데 C++ 컴파일러들 중에 CPU 내부 명령어들을 거의 직접 부를 수 있도록 문법으로 지원해주는 경우가 있어요.
넵.
unaligned C++ 표현이 인텔에서 가능한건, CPU가 알아서 정렬해주기 때문이거든요.
아아 intrinsic이 c/c++은 cpu안에 명령어를 직접 사용못하니 어셈블리어로 사용하라 그런 뜻이에여?
타자 빠르시당
근데 그게 직접 정렬하는것 보다 과거엔 느렸다는거죠.
어셈블리어랑 비슷한데, C++ 구조체/공용체와 함수 비슷하게 생겨있죠.
과거에는 C/C++ 문법으로 직접 주소를 정렬 하는것 (aligned) 보다 느렸는뎅,
특별한 케이스들에서 약간 더 빠르기도 했죠.
그러다가 SSE 명령어들이 추가되면서 무쟈게 빨라져버렸고,
컴파일러가 비교적 간단한 unaligned 표현들을 보다 더 잘 최적화해주기 시작한거죠.
그래서 unaligned 가 최적화를 위한 선택이라고 한건데, kukyakya 가 그걸 부정하며 정작 그걸 알고 쓰는 사람들을 이리 저리 불러대며 까고 있죠.
하지만 kukyakya 가 올린 데이타는 마지막에 하나? 빼고 다 틀림요. 그 하나도 5MB 이하의 용량 처리에 대해서는 언급도 안했고, C/C++ 로 표현한것도 아님유
그간 틀린 데이타들을 바탕으로 자기를 합리화한 글들은 모조리 다 틀렸다는거죠.
코드세이퍼님 마지막으호 IPP 는 머에여??
와 그세 이만큼 달아주셨네
Intel 에서 제공해주는 최적화 명령어로 만든 다양한 함수 라이브러리예요.
지금은 Intel Parallel Studio 란 이름으로 통합되어 있죠.
VC++ 에선 저것과 통합이 되고 있고, 다른 컴파일러에서는 동적라이브러리 형태로 갖다 쓸 순 있죠.
캬~ 코드세이퍼님 저 다 이해했어요!!
그러니까 Intel Architecture SIMD 명령어들을 사용해서 최적화된 라이브러리 라는거.
만세!!! 드디어 논쟁싸움에 내 의견을 낼 수 있겠구나!!
잘했어유~ : )
코세님 정말 감사해영
저 이거 이해했는데, 학생이에요! 저정도면 프갤에서 못하는 편은 아니겠쬬??
원래는 Intel JPEG Library 라는 형태로 배포되었었죠. 그래서 IJL 이라 불렀었고
IJL -> IPP -> IPS 가 된거죠.
네 프갤은 늅늅이들이 많으니깐유
IPP 말고 IPL 이라고도 하고 라이브러리랑 프로파일러, 프레임웍, 스튜디오를 일컫는 용어가 좀 다양하긴 하죠.
다 그게 그거. 그냥 인텔 최적화 라이브러리 라고 생각하시면 됨유.
그니까 직접 어셈블러로 SIMD 명령어를 잘 구사하거나, 인트린직으로 적당히 C++ 문법 위에 얹거나, 아예 라이브러리를 갖다쓰면 극악의 최적화가 되긴 한단 소리고,
그렇게까지 안하고 단순히 C/C++ 문법만으로도 요령이 좀 있으면 컴파일러가 알아서 잘 SIMD 에 물려주도록 적당히 최적화 할 수 있단거쥬.
감사합니다. 이해 95% 했습니다. 너무 기분이 좋아여~
좋은 기분으로 하루를 활기차게~ 싸움은 안끼시는게 기분에 좋아유~