<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>데스티의 문서보관소</title>
	<link>http://docs.egloos.com</link>
	<description>질문 있으신 분은 댓글로 달아주세요. 하루에 한번씩은 본답니다. :)</description>
	<language>ko</language>
	<pubDate>Thu, 16 Apr 2009 12:24:33 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>데스티의 문서보관소</title>
		<url>http://pds8.egloos.com/logo/200805/11/37/e0080937.png</url>
		<link>http://docs.egloos.com</link>
		<width>80</width>
		<height>79</height>
		<description>질문 있으신 분은 댓글로 달아주세요. 하루에 한번씩은 본답니다. :)</description>
	</image>
  	<item>
		<title><![CDATA[ OpenMP 를 활용해서 multithreading시 platform-dependency를 없애기. ]]> </title>
		<link>http://docs.egloos.com/2351650</link>
		<guid>http://docs.egloos.com/2351650</guid>
		<description>
			<![CDATA[ 
  물론, 멀티스레딩에 관련된 복잡한 작업을 하려면 당연히 각 OS별로 제공하는 라이브러리를 사용해야 할 테지만(pthread같은),<br><br>단순한 반복 작업을 멀티스레딩으로 처리하려 할 때 사용할 수 있는 라이브러리가 OpenMP이다.<br><br><br>현재, linux용 gcc, visual studio(OpenMP 2.0 지원), linux/windows용 Intel c++ compiler에서 OpenMP를 지원하고 있다.<br><br><br>내부 로직이 효율적으로 구현되어 있어 속도 향상도 조금 기대할 수 있다.<br><br><br><br><br>필자의 경우, linux에서 pthread를 이용하여 멀티스레딩을 구현하였던 부분을 OpenMP로 교체, 성능 테스트를 해 보았다.<br><br>pthread로 구현되어 있던 부분.<br><br>for(int i = 0; i &lt; num_threads; i++)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pthread_create(&amp;p_thread[i], NULL, BIG_FUCKING_FUNCTION, NULL);<br>}<br>for(int i = 0; i &lt; num_threads; i++)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pthread_join(p_thread[i], NULL);<br>}<br><br>본 코드에서 생기는 문제점들은 다음과 같다.<br>1. pthread_create에서 새로운 스레드를 생성하는 동안 먼저 생성된 쓰레드가 돌아가고 있다. 비효율적.<br>2. pthread_join에서 thread를 끝난 순서가 아닌 생성된 순서대로 join하기 때문에 성능 저하가 발생한다.<br><br>가장 문제가 되는 부분은 2번이였는데, 실제로 시간이 오래 걸리는 작업을 걸어 놓아도 전체 cpu 점유율이 일정 수준 이상(60%)<br>올라가지 않는 문제를 확인할 수 있었다.<br><br>이 코드를, 다음과 같은 간단한 OpenMP 코드로 바꾸어 보자.<br><br>#progma omp parallel for<br>for(int i = 0; i &lt; num_threads; i++)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pthread_create(&amp;p_thread[i], NULL, BIG_FUCKING_FUNCTION, NULL);<br>}<br><br>참 간단하지 않은가.<br><br>필자의 프로그램의 경우, critical section을 관리해야 한다던지, thread에서 공통적으로 사용하는 자원이 있다던지 하는 일이 없다.<br>(없다기 보다는, 필자의 프로그래밍 실력이 미천해서 저런 부분이 없도록 설계하였다.)<br><br>따라서 #progma 하나를 덧붙이는 것 만으로 기존의 threading code를 대체할 수 있었다.<br><br><br>속도 향상도 꽤 있는 편.<br><br>기존 코드에서 23초 정도 걸리던 작업이, OpenMP를 통해 계산했을 때 15초 정도 걸렸으니<br>약 150% 정도의 속도 향상이 있다고 생각하면 된다.<br>이는 위에 적어놓았던 이유(pthread를 사용했을 경우 cpu점유율이 60% 이상 올라가지 않는다)를 OpenMP에서 해결해 주었기 때문이라고 생각된다.			 ]]> 
		</description>

		<comments>http://docs.egloos.com/2351650#comments</comments>
		<pubDate>Thu, 16 Apr 2009 12:23:52 GMT</pubDate>
		<dc:creator>데스티</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Ubuntu eclipse에서 CDT 5.0 사용하기 ]]> </title>
		<link>http://docs.egloos.com/2350945</link>
		<guid>http://docs.egloos.com/2350945</guid>
		<description>
			<![CDATA[ 
  <p>별 내용은 아니고.<br><br>ubuntu에서 apt-get install을 통해 eclipse와 eclipse-cdt를 설치할 경우,<br><br>cdt의 버젼이 3.0이 되고, 이 상태에서 cdt 5.0만 추가할 경우 설치가 되지 않는다.<br><br>에러 메세지는 org.eclipse.core.filesystem이 없다는 것.<br><br><br>우분투에서 이클립스 업데이트가 늦어져 생기는 문제라고 생각되어<br><br>eclipse를 새로 받아서 무설치로 실행하면 문제 없이 실행할 수 있다.<br><br><br>본인의 경우, linux에서 intel compiler를 사용하려고 eclipse plugin을 설치하려 시도했는데,<br><br>cdt 5.0이 깔려있지 않아 조금 삽질을 했었다.</p>			 ]]> 
		</description>

		<comments>http://docs.egloos.com/2350945#comments</comments>
		<pubDate>Wed, 15 Apr 2009 15:25:02 GMT</pubDate>
		<dc:creator>데스티</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 커그의 불판 ]]> </title>
		<link>http://docs.egloos.com/2329010</link>
		<guid>http://docs.egloos.com/2329010</guid>
		<description>
			<![CDATA[ 
  <span><a href="../update.php?eid=e0080937&amp;srl=2329010&amp;rtnurl=http%3A%2F%2Fdocs.egloos.com%2F#" onclick="PostFileUploader.viewImage('http://pds10.egloos.com/pds/200903/24/37/e0080937_49c877e34a039.png', '663','524','1'); return false;"> </a></span><a href="../update.php?eid=e0080937&amp;srl=2329010&amp;rtnurl=http%3A%2F%2Fdocs.egloos.com%2F#" onclick="PostFileUploader.viewImage('http://pds10.egloos.com/pds/200903/24/37/e0080937_49c877e34a039.png', '663','524','1'); return false;"><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds10.egloos.com/pds/200903/24/37/e0080937_49c877e34a039.png" width="500" height="395.173453997" onclick="Control.Modal.openDialog(this, event, 'http://pds10.egloos.com/pds/200903/24/37/e0080937_49c877e34a039.png');" /></div></a><span><a href="../update.php?eid=e0080937&amp;srl=2329010&amp;rtnurl=http%3A%2F%2Fdocs.egloos.com%2F#" onclick="PostFileUploader.viewImage('http://pds10.egloos.com/pds/200903/24/37/e0080937_49c877e34a039.png', '663','524','1'); return false;"> </a><br />
<br />
</span><br />
<br />
커그에서 시간에 따른 불판의 개수.<br />
<br />
흥미로운 것은 나뿐?<br />
			 ]]> 
		</description>

		<comments>http://docs.egloos.com/2329010#comments</comments>
		<pubDate>Tue, 24 Mar 2009 05:59:15 GMT</pubDate>
		<dc:creator>데스티</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 책상샷 ]]> </title>
		<link>http://docs.egloos.com/2326617</link>
		<guid>http://docs.egloos.com/2326617</guid>
		<description>
			<![CDATA[ 
  <div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds11.egloos.com/pds/200903/22/37/e0080937_49c50be13b109.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds11.egloos.com/pds/200903/22/37/e0080937_49c50be13b109.jpg');" /></div><br />
나름 올인원 책상을 꿈꾸고 있지만,<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds13.egloos.com/pds/200903/22/37/e0080937_49c50bef6a7dd.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds13.egloos.com/pds/200903/22/37/e0080937_49c50bef6a7dd.jpg');" /></div><br />
<br />
현실은 시궁창. 포트 리플리케이터를 이용해서 노트북에 듀얼모니터를 연결, 사용하고 있음.<br />
			 ]]> 
		</description>

		<comments>http://docs.egloos.com/2326617#comments</comments>
		<pubDate>Sat, 21 Mar 2009 15:47:44 GMT</pubDate>
		<dc:creator>데스티</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Hunter's theorem ]]> </title>
		<link>http://docs.egloos.com/2325564</link>
		<guid>http://docs.egloos.com/2325564</guid>
		<description>
			<![CDATA[ 
  <div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds10.egloos.com/pds/200903/20/37/e0080937_49c39de2bb2ed.png" width="500" height="3664.49511401" onclick="Control.Modal.openDialog(this, event, 'http://pds10.egloos.com/pds/200903/20/37/e0080937_49c39de2bb2ed.png');" /></div>			 ]]> 
		</description>

		<comments>http://docs.egloos.com/2325564#comments</comments>
		<pubDate>Fri, 20 Mar 2009 13:45:10 GMT</pubDate>
		<dc:creator>데스티</dc:creator>
	</item>
	<item>
		<title><![CDATA[ FTP를 파일시스템처럼 사용하자 : NetDrive ]]> </title>
		<link>http://docs.egloos.com/2211055</link>
		<guid>http://docs.egloos.com/2211055</guid>
		<description>
			<![CDATA[ 
  NetDrive라는 프로그램을 이용하면 원격 ftp서버를 파일시스템처럼 사용할 수 있다.<br />
<br />
회선 속도가 좋지만 같은 네트워크에 묶여있지 않아서 네트워크 드라이브를 사용할 수 없을 때 추천한다.<br />
<br />
<br />
http://www.netdrive.net/<br />
			 ]]> 
		</description>

		<comments>http://docs.egloos.com/2211055#comments</comments>
		<pubDate>Sat, 06 Dec 2008 12:19:26 GMT</pubDate>
		<dc:creator>데스티</dc:creator>
	</item>
	<item>
		<title><![CDATA[  windows server 2008에서 xna사용하기. ]]> </title>
		<link>http://docs.egloos.com/2196048</link>
		<guid>http://docs.egloos.com/2196048</guid>
		<description>
			<![CDATA[ 
  다 좋은데 주의점이 하나 있다.<br />
<br />
MSVS 2008을 설치한 뒤, XNA 3.0을 설치하게 되면<br />
<br />
일반적인 프로젝트는 다 컴파일이 되는데 음악이 들어간 프로젝트<br />
<br />
Song song = content.Load&lt;Song&gt;("mp3/bgm1");<br />
같은 게 들어가있는 프로젝트<br />
<br />
<br />
는 이상한 경고음을 띄우면서 컴파일이 안 된다.<br />
<br />
<br />
열심히 구글링을 해 보고, dll파일의 연결 고리를 헤쳐나가다 보면 wma처리 라이브러리가 없다는 사실을 깨달을 수 있는데,<br />
<br />
이는 server version에서는 기본적으로 windows media player가 설치되지 않기 때문이다.<br />
<br />
server management로 들어가서 desktop experience를 추가해주면 관련 라이브러리가 들어간 소스 코드를 무사히 컴파일할 수 있다.<br />
<br />
<br />
MSN을 설치할 때도 마찬가지 .server 2008에서는&nbsp; desktop experience없이 msn이 설치되지 않으니 주의.<br />
			 ]]> 
		</description>
		<category>미완성</category>

		<comments>http://docs.egloos.com/2196048#comments</comments>
		<pubDate>Thu, 27 Nov 2008 17:03:42 GMT</pubDate>
		<dc:creator>데스티</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [WINAPI]modal dialog, modaless dialog. ]]> </title>
		<link>http://docs.egloos.com/2153806</link>
		<guid>http://docs.egloos.com/2153806</guid>
		<description>
			<![CDATA[ 
  <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//모달리스 다이어로그로 만들기. : 테스트용.<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;HWND hBallonDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_BALLON), hWnd, Ballon);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;ShowWindow(hBallonDlg, nCmdShow);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UpdateWindow(hBallonDlg);<br />
<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//모달 다이어로그로 만들기.<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; DialogBox(hInstance, MAKEINTRESOURCE(IDD_BALLON), hWnd, (DLGPROC)Ballon);			 ]]> 
		</description>
		<category>winapi</category>

		<comments>http://docs.egloos.com/2153806#comments</comments>
		<pubDate>Sat, 08 Nov 2008 16:31:16 GMT</pubDate>
		<dc:creator>데스티</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [WINAPI] Non-rectangular dialog만들기. ]]> </title>
		<link>http://docs.egloos.com/2153739</link>
		<guid>http://docs.egloos.com/2153739</guid>
		<description>
			<![CDATA[ 
  일단은 코드만.<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; case WM_PAINT:<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; LONG ExtendedStyle = GetWindowLong( hDlg,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GWL_EXSTYLE );<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SetWindowLong( hDlg,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GWL_EXSTYLE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExtendedStyle | WS_EX_LAYERED );<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Select the transparency percentage.<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // The alpha will be calculated accordingly.<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double TransparencyPercentage = 50.0;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Set the alpha for transparency.<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 0 is transparent and 255 is opaque.<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double fAlpha = TransparencyPercentage * ( 255.0 /100 );<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BYTE byAlpha = static_cast&lt;BYTE&gt;( fAlpha );<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SetLayeredWindowAttributes( hDlg,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RGB(0, 255, 0),<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; byAlpha,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; LWA_COLORKEY );<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 0;<br />
			 ]]> 
		</description>
		<category>winapi</category>

		<comments>http://docs.egloos.com/2153739#comments</comments>
		<pubDate>Sat, 08 Nov 2008 16:00:40 GMT</pubDate>
		<dc:creator>데스티</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [WINAPI] 다이얼로그로 그림만 띄우기 ]]> </title>
		<link>http://docs.egloos.com/2153736</link>
		<guid>http://docs.egloos.com/2153736</guid>
		<description>
			<![CDATA[ 
  1. 다이어로그 박스를 하나 새로 만든다.<br />
<br />
2. 안쪽에 있는 모든 child들을 지우고, 시스템 메뉴 등을 모두 disable시킨다.<br />
<br />
3. picture control을 추가한다. Type를 비트맵으로 바꾼다.<br />
<br />
4. 원하는 비트맵을 리소스에 추가한다.<br />
<br />
5. dialog에서, Image를 원하는 이미지로 선택한다.<br />
이를 실행하기 전에, dialog box의 크기를 이미지의 크기보다 크게 만들고, child가 들어가는 영역의 크기를 다이어로그의 크기와<br />
같게 조절해주는 것이 좋다.<br />
<br />
6. 이미지가 들어간 후, 이미지를 dialog의 왼쪽 위에 맞춘다. 다이어로그의 크기를 이미지에 맞게 줄인다.<br />
<br />
<br />
<br />
결과적으로, 이미지만 떠 있는 dialog를 만들 수 있다.<br />
<br />
만약, non-rectangular picture dialog를 만들고 싶으면, nonrectangular dialog를 만드는 법을 참고하자.<br />
			 ]]> 
		</description>
		<category>winapi</category>

		<comments>http://docs.egloos.com/2153736#comments</comments>
		<pubDate>Sat, 08 Nov 2008 15:59:59 GMT</pubDate>
		<dc:creator>데스티</dc:creator>
	</item>
</channel>
</rss>
