[자바] 제곱 속도 - 직접 만든 제곱 함수가 Math.pow() 보다 빠를 때도 있어요


* 1.0의 제곱을 20억 번 할 경우 Math.pow()가 직접 만든 제곱 함수보다 세 배 느렸습니다.


* 제곱 횟수를 훨씬 늘리면 시간 차이가 줄어들던데, 아마 JIT 컴파일 때문이 아닐까 추측만 해 보았습니다.


* 실험 결과와 코드는 아래와 같습니다.





걸린 시간 (Math.pow 함수, 20억 회): 6 ms

걸린 시간 (직접 만든 제곱, 20억 회): 2 ms




public class 제곱속도측정 {


  public static double 직접만든제곱(double 숫자) {

    return 숫자*숫자;

  }


  public static void main(String[] args) {

    long 시작시간1 = System.currentTimeMillis();

    for(int i=0; i<2000000000; ++i) {

      Math.pow(1.0, 2);

    }

    long 끝시간1 = System.currentTimeMillis();

    System.out.println("걸린 시간 (Math.pow 함수, 20억 회): " + (끝시간1-시작시간1) + " ms");


    long 시작시간2 = System.currentTimeMillis();

    for(int i=0; i<2000000000; ++i) {

      직접만든제곱(1.0);

    }

    long 끝시간2 = System.currentTimeMillis();

    System.out.println("걸린 시간 (직접 만든 제곱, 20억 회): " + (끝시간2-시작시간2) + " ms");

  }


}







리눅스에서 프로그램을 돌려 놓고 한참 뒤에 보면 화면에 Killed 라는 글만 떠 있고 프로세스가 죽어 있는 경우가 가끔 있습니다.

그럴 때에는

dmesg | grep -E -i -B100 'killed process'

라고 치면 프로세스가 강제 종료될 때의 상황을 자세히 볼 수 있습니다.

제 경우에는 대부분 Out of memory가 원인이었습니다.


(참고한 자료: https://stackoverflow.com/questions/726690/who-killed-my-process-and-why)

You may have to install OPENSSL in your system and/or pass OPENSSL_DIR or OPENSSL_INCDIR to the luarocks command.


이런 메시지가 뜨고 Luarocks 진행이 안 되면 (우분투 기준) sudo apt-get install libssl-dev 으로 libssl-dev를 설치해주시면 됩니다.


( 사진 출처: https://pixabay.com/photo-1050964/ )


걸리버 여행기를 보다 보면 달걀을 깨 먹을 때 크고 뭉툭한 쪽을 깨서 먹어야 한다고 주장하는 사람들과 작고 뾰족한 쪽을 깨서 먹어야 한다고 주장하는 사람들이 싸우는 장면이 나옵니다. 여기서 크고 뭉툭한 쪽을 깨서 먹어야 한다고 말하는 사람들이 빅 엔디안(big endian)이고, 작고 뾰족한 쪽을 깨서 먹어야 한다고 주장하는 사람들이 리틀 엔디안(little endian)입니다. 말 그대로 큰(big) 끝(end) 사람들(-ian)과 작은(little) 끝(end) 사람들(-ian)입니다.


컴퓨터가 값을 저장할 때에 높은 자리수부터 차례대로 저장하면 빅 엔디안, 낮은 자리수부터 저장하면 리틀 엔디안이라고 부릅니다. 예를 들어 4바이트 짜리 16진수 0x10111213 (10진수 269,554,195)을 메모리에 저장할 때에 메모리 앞에서부터 차례대로 0x10, 0x11, 0x12, 0x13 순서로 저장하면 빅 엔디안이고, 거꾸로 0x13, 0x12, 0x11, 0x10 순서로 저장하면 리틀 엔디안입니다. 빅 엔디안과 리틀 엔디안을 각각 한국어로 '큰 쪽부터'와 '작은 쪽부터'라고 번역하면 어떨까요?

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable


이 에러는 64비트 리눅스에서 32비트 하둡을 돌려서 생긴다고 합니다.

hadoop-env.sh 나 .bashrc나, 어디에든 다음을 추가해주면 해결됩니다.

원래는 $HADOOP_HOME/lib 으로 되어 있는 부분을 $HADOOP_HOME/lib/native 로 바꾸면 됩니다.


원래는 export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_PREFIX/lib" 이었던 것을 export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_PREFIX/lib/native" 로 바꾸시면 됩니다.

The processing instruction target matching "[xX][mM][lL]" is not allowed.


XML 파일이 파일 선언으로 시작되지 않을 때 나오는 오류 메시지입니다.

파일의 맨 처음 부분에 공백이나 주석이 있으면 이런 오류가 발생합니다.

E0201 15:14:22.851824 18611 common.cpp:104] Cannot create Cublas handle. Cublas won't be available.

E0201 15:14:22.859390 18611 common.cpp:111] Cannot create Curand generator. Curand won't be available.

F0201 15:14:22.868336 18611 syncedmem.hpp:18] Check failed: error == cudaSuccess (30 vs. 0)  unknown error


CUDA를 사용하려고 할 때에 이런 에러 메시지가 뜰 때가 있습니다. 모든 설치 과정을 올바르게 마쳤는데도 이런 에러 메시지가 뜬다면


cd /home/[자기 계정]/NVIDIA_CUDA-7.5_Samples/0_Simple/matrixMulDrv

make

sudo ./matrixMulDrv


해서 관리자 계정으로 CUDA 예제를 한 번 돌리면 문제가 해결됩니다. CUDA는 설치한다고 끝이 아니고, 설치한 후에 한 번 사용해줘야 그 다음부터 제대로 돌아가는 듯 합니다. 만약 위의 방법으로 안 된다면 예제 디렉토리에 있는 다른 예제들을 두세 개 정도 더 실행해 보세요.


( 간접적인 힌트를 얻은 곳: https://groups.google.com/forum/#!topic/caffe-users/DeLNtQ9i0HY )

 

예전에 산 문명 3 정품이 있는데 언제부터인가 실행이 안 되기 시작했습니다.


윈도의 KB3086255 보안 업데이트에서 secdrv.sys를 제한하기 때문에 나타나는 현상이라고 합니다. ( 참고 사이트: https://support.microsoft.com/ko-kr/kb/3086255 )


KB3086255 보안 업데이트를 제거하면 게임이 잘 실행됩니다만, 보안 업데이트 제거에 따르는 위험성은 사용자의 몫인 것 같습니다.

윈도 10 하드 디스크 사용률 100% 문제 해결하기



윈도 10을 쓴 지 약 1년 정도 되었는데, 그동안 하드 디스크 100% 사용률 문제 때문에 정말 많은 고생을 했습니다. 컴퓨터를 켜면 거의 10분 동안 하드를 드르륵 드르륵 계속 읽는 통에 작업을 못 할 지경이었습니다.


그동안 인터넷을 뒤지면서 찾아본 해결책들을 이 블로그에 정리해 보려 합니다. 컴퓨터에 따라 해결방법이 각각 다른 것 같습니다. 해 보시고 댓글에 어떤 방법이 효과적이었는지를 알려주시면 다른 분들께 도움이 될 것입니다. 다른 방법이 있으신 분들도 댓글로 알려주세요.


-------------------------


1. 수퍼페치 (superfetch) 끄기

(1) 윈도 키 + R -> services.msc 실행 -> Superfetch -> 오른쪽 클릭 -> 속성 -> 시작 유형 -> 사용 안 함

(2) 윈도 키 + R -> services.msc 실행 -> Superfetch -> 오른쪽 클릭 -> 중지


둘 다 해주셔야 합니다.



2. 윈도 서치 (windows search) 끄기

(1) 윈도 키 + R -> services.msc 실행 -> Windows Search -> 오른쪽 클릭 -> 속성 -> 시작 유형 -> 사용 안 함

(2) 윈도 키 + R -> services.msc 실행 -> Windows Search -> 오른쪽 클릭 -> 중지


둘 다 해주셔야 합니다.



3. 윈도 팁 끄기

시작 -> 설정 -> 시스템 -> 알림 및 작업 -> 'Windows에 대한 팁 표시' 비활성화



4. 알림 끄기

시작 -> 설정 -> 시스템 -> 알림 및 작업 -> '앱 및 다른 보낸 사람의 알림 받기' 비활성화



5. 가상 메모리 늘리기

탐색기 -> 내 PC -> 오른쪽 클릭 -> 속성 -> 고급 시스템 설정 -> 고급 탭 -> 성능 설정 버튼 -> 고급 탭 -> 가상 메모리 변경 버튼 -> 처음 크기를 1024 x 램의 GB 용량으로 설정 -> 최대 크기를 처음 크기의 두 배로 설정 -> 확인 -> 적용


예를 들어 램이 4GB라면 가상 메모리 처음 크기를 1024 x 4 = 4096MB로, 최대 크기를 8192MB로 설정하는 식입니다.



6. 가상 메모리를 다른 파티션으로 옮기기

탐색기 -> 내 PC -> 오른쪽 클릭 -> 속성 -> 고급 시스템 설정 -> 고급 탭 -> 성능 설정 버튼 -> 고급 탭 -> 가상 메모리 변경 버튼 -> 주로 사용하는 하드디스크에는 '페이징 파일 없음' -> 잘 안 사용하는 하드디스크에 '사용자 지정 크기' 혹은 '시스템이 관리하는 크기'  -> 확인 -> 적용



-------------------------


다른 방법을 알게 되는 대로 글에 추가하겠습니다.


< 완성작 사진 >




지난 5년여 동안 MS 인체공학 키보드 4000을 써 왔습니다.

만족스러웠지만 키보드 크기가 크다 보니 마우스가 너무 오른쪽으로 치우치게 된다는 단점이 있었습니다.


그래서 키보드를 개조해서 텐키리스로 만든 뒤, 다시 그 숫자키 부분을 마우스 패드로 만들었습니다.

몇 달이 지난 지금까지 매우 편하게 사용하고 있습니다.


마우스가 몸쪽으로 더 가까이 오게 되자 어깨 통증이 싹 사라졌네요.

그동안 어깨 통증을 해결해 보려고 왼손으로 마우스 쓰기, 트랙볼 사용하기 등 여러 시도를 해봤지만 키보드 개조가 최고였습니다.


개조는 그다지 어렵지 않습니다. 많은 분들에게 유익한 자료가 되었으면 좋겠습니다.

아래부터 사진 자료 올라갑니다.


--


1. 키보드입니다.





2. 손 받침을 분리합니다.





3. 키보드 윗판과 아랫판을 분리합니다.





4. 떼어낸 키보드 상판은 뒤집으면 이렇게 생겼습니다.





5. 흔히 텐키라고 불리는 숫자키들을 다 빼고 키보드를 다시 조립합니다.





6. 적당한 두께의 종이를 준비합니다. 저는 집에 굴러다니던 박스를 사용했습니다.





7. 뽑아낸 텐키 부분의 윗 홈과 아랫 홈에 맞게 종이를 잘라냅니다. 좀 빡빡하게 자르시면 좋습니다.





8. 윗 홈과 아랫 홈에 종이를 낍니다. 그리고 윗 홈과 아랫 홈을 다 덮을 수 있는 크기로 종이를 하나 더 잘라 놓습니다.





9. 끼워넣은 종이에 양면테이프를 붙입니다.





10. 양면테이프를 사용해서 커다란 종이를 붙입니다.





11. 기존의 숫자키 부분을 마우스 패드로 사용하시면 됩니다. 완성!




+ Recent posts