MySQL에서 사용되는 password 함수는 입력되는 문자열을 Hashing 하여 돌려준다. MySQL 4.x 버전 이전까지는 아마 MD5 알고리즘을 사용하였는데 4.x 이후에는 PASSWORD함수의 알고리즘이 SHA1으로 바뀌고 이전 호환성을 위해 이전 함수는 OLD_PASSWORD()라는 이름으로 제공한다. (위 버전은 정확하지 않음) 알고리즘은 sha1을 두번 사용한다고 한다. 그런데, MySQL 에서 password()를 이용해서 생성해보면 ( https://www.browserling.com/tools/mysql-password 에서 password를 생성가능) sha1(sha1('문자열')) 한 결과와 다르게 나온다. 찾아보니 이유는 sha1의 입력도 문자열, 출력도 문자열 인데 password함수는 sha1의 출력을 바이너리 그대로 sha1의 입력으로 넣는다. 아래 C코드를 보면 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #incldue<stdio.h> #include<openssl/sha.h> typedef unsigned char u8; int main ( int argc, char * argv[]){ u8 ibuf[ 20 ] = "abc" ; u8 obuf[ 20 ] = { 0 ,}; SHA1(ibuf, strlen(ibuf), obuf); SHA1(obuf, 20 , outbuf); for ( int i = 0 ;i < 20 ;i ++ ) printf( "%02x" , outbuf[i]); printf( " \n " ); return 0 ; } 이렇게 하면 MySQL의 password 함수와 동일한 결과를 얻을 수 있다. MySQL에서는 sha1(unhex(sha1('abc'...
용적률은 어떤 땅에 건물을 지을때 바닥면적의 합과 땅의 비율이다. 바닥면적이란 건물의 각층의 면적이고, 하늘에서 정확하게 수직으로 내려다 보았을때 면적을 말한다. 예를 들어 100평 크기의 땅에 50평에만 건물을 2층을 지으면 바닥면적의 합은 50x2 이므로 100이다. 이때 용적률은 100%가 된다. 건폐율은 100평땅에 50평만 건물이 세워져 있으므로 50%가 된다. 여기까진 쉽게 알 수 있는 사실이고... 용적률을 정하는 큰 기준은 용도지역구분이다. (아래 자료는 작성중임) 용도지역( 국토의 계획 및 이용에 관한 볍률 시행령) 주거지역 구분 건폐율 용적률 전용주거지역 (양호한 주거환경을 보호하기위해) 1종(단독주택) 50% 이하 50~100% 2종(공동주택) 50%이하 100~150% 일반주거지역 (편리한 주거환경을 조성하기 위해) 1종(저층주택) 60% 이하 100~200% 2종(중층주택) 60%이하 150~250% 3종(중고층주택) 50%이하 200~300% 준주거지역 (주거기능을 위주+일부 상업기능 및 업무기능) 70%이하 200~500% 상업지역 구분 건폐율 용적률 중심상업지역 (도심,부도심의 상업/업무 기능 확충) 90% 이하 400%~1500% 일반상업지역(일반적인 상업/업무기능담당) 80% 이하 300%~1300% 근린상업지역(근린지역에서 일용품/서비스 공급) 70%이하 200%~900% 유통상업지역(도시내-지역간 유통기능 증진) 80%이하 200%~1100% 공업지역 - 전용공업지역(주로 중화학공업, 공해성 고업 등을 수용하기 위해) 70% 150~300% - 일반공업지역 : 호나경을 저해하지 아니하는 공업의 배치 70% 200~350% - 준공업지역 : 경공업 그 밖의 공업, 주거+상업+업무기능 보완 70% 200~400% 녹지지역 - 보전녹지지역 : 도시의 자연환경/경관/사림 및 녹...
OpenCL을 사용하여 워크그룹 사이즈(CUDA에서는 Dimension, block, thread)를 결정해야 할때 Global workgorup size 는 해결하고자 하는 총 문제수를 커버 해야한다. 즉, 1024 x 1024 행렬이 있다면 커맨드큐에 NDRagneKernel을 할때 global workgroup size는 1024 x 1024 = 1048576 이 된다. Local workgorup size를 NULL 로 입력해주면 OpenCL이 알아서 실행하여 준다. 하지만 성능향상을 위해서는 local workgorup size를 수동으로 넣어주어야 할때가 있다. 연산장치(GPU 또는 기타장치)의 프로필을 보면 Max work group size 정보를 알 수 있다. 예를 들어 Max work group size 가 256 이었다면 local work group size는 모든 Dimenstion을 곱했을때 256 보다 같거나 작아야 한다. 저 256이라는 숫자는 보통 FrontWave(CUDA에서는 WARP) 에 의해서 결정되는데 Hardware 적으로 context switching 할 수 있는 총 그룹수와 PE( processing element ) 수에 의해 결정된다. PE가 64개 이고 FraoneWawe가 4이면 256이기 때문에 local workgorup 에서 처리할수 있는 work item 갯수는 256개가 된다. 총연산 유닛(compute unit)이 32개 라면 64(PE)*32(CU) = 2048 개가 동시에 처리되고 2048*4 = 8192 개 의 work-item이 스위칭되면서 실행된다. 이때 work-item들이 메모리에 동시에 접근할때 대역폭 정보 등까지 고려되어야 성능 향상에 대한 이해와 최적화를 할 수 있다.
댓글
댓글 쓰기