Lyn
조회 수 64540 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

http://www.visualstudio.com/news/vs2015-preview-vs


기존에 14라고 부르던 버전이군요. 정식출시가 얼마 남지 않은 것 같습니다.
더 좋은 소식도 있지만

?

2013.09.28 04:50

VS2013 RC 설치해봄

Lyn
조회 수 14017 추천 수 0 댓글 0
Atachment
첨부 '3'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

VS2013 RC를 설치 해 봤습니다.

왠지 설치 할 때 로그인을 하려면 하라는군요.


디바이스 간에 설정 같은거 연동해 준답니다... 여러군데 왔다갔다하면서 개발하는경우엔 편리하겠네요.


vs start.png


전 일단 연동하지 않았고 다음으로 진행 하니 옵션창이 뜹니다.
옵션이 좀 다양해졋네요.


start2.png


기념할만한 첫 실행 스샷입니다.
프로젝트 템플릿에 크게변화된건 없지만 왠지 파이썬과 타입스크립트가 기본으로 들어가 있습니다.

타입스크립트는 MS에서 만들었으니 그렇다 쳐도 파이썬은 좀 의외네요. 단 파이썬의 경우는 목록에는 있지만 툴이 기본설치되진 않아 따로 받아야 합니다.

proj.png

?

Lyn
조회 수 13142 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

이게 정말 좋은 소식이지요 : )


http://www.visualstudio.com/en-us/products/visual-studio-community-vs


Pro급에 해당하는 에디션이며 사용 조건은 아래와 같습니다


Q: Who can use Visual Studio Community? 

A: Here’s how individual developers can use Visual Studio Community:

Any individual developer can use Visual Studio Community to create their own free or paid apps.

Here’s how Visual Studio Community can be used in organizations:

An unlimited number of users within an organization can use Visual Studio Community for the following scenarios: in a classroom learning environment, for academic research, or for contributing to open source projects.

For all other usage scenarios: In non-enterprise organizations, up to 5 users can use Visual Studio Community. In enterprise organizations (meaning those with >250 PCs or > $1MM in annual revenue), no use is permitted beyond the open source, academic research, and classroom learning environment scenarios described above.

?

Lyn
조회 수 18545 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

http://lunapiece.net/Article/14007327


이전글에서 나왔던 문제가 해결된 버전이 나왔습니다. 업데이트하세요104.png


?

2016.01.03 11:53

VMWare 12 + Windows 10 Bug

Lyn
조회 수 3175 추천 수 0 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

VMWare 12에 Windows 10 을 올리면 OS에서 CPU 갯수를 인식하지 못하는 버그가 있습니다.

 

vm.PNG

 

위 스샷처럼 VMWare 에서 2 Processor * 1 Core 로 세팅을 하면 OS의 작업관리자에선 1Socket * 1 Virtual Processor 로 잡힙니다.

반대로 1 Processor * 2 Core 로 세팅하면 작업관리자에서도 정상적으로 잡힙니다.

vmw.PNG

 

 

어느쪽 버그인진 모르겠지만 주의해야 할 점입니다.

TAG •
?

Lyn
조회 수 19804 추천 수 0 댓글 0
Atachment
첨부 '8'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

VS2013 에 추가된 기능을 하나씩 보고 있는데요..

첫번째로 Team Explorer 에 Git 지원이 기본으로 추가되었습니다.


일단 로컬에선 쓸수 있는데.... 잘모르겟습니다 =_=;; Git은 그다지 쓰지 않아서요.


그리고 MS의 Team Foundation Server 클라우드인 Team Foundation Service 에 대한 지원이 추가 되었습니다.

http://tfs.visualstudio.com/
여기서 쓸수 있는데요, 일단 Git 지원은 로컬은 Git으로 하고 공유는 TFS 를 쓰라는 의미인 모양이네요

아직 무료라고 하니 한번쯤 써보는것도 나쁘지 않아 보입니다. TFS의 성능과 안정성은 이미 검증이 되었으니까요.


자체적으로 원격으로부터의 pull,push 를 지원하진 않지만 별도의 툴로 Clone 해 놓은 프로젝트를 쓰는데는 아무 문제 없습니다.
모든 작업 끝나고 VS밖에서 push 한번 해주면 될 문제네요... 애초에 쉘 열어놓고 쓰는사람도 많은판이고 원체 git 클라이언트들이 형편 없다보니 써보면 그렇게 나쁜건 아닌데... MS 답지 않다는 느낌도 좀 듭니다. 항상 바로 작업 시작할 수 있게 풀패키지로 지원해 주는게 좋은건데....


개인적으로 애용하고 있는 mercurial 을 지원하지 않아 좀 가슴이 아픕니다.



1.png



그리고 깨알같은건데... 피드백 버튼이 추가되었습니다.

3.png


저 버튼을 누르면...


4.png


현재 기분(....) 을 고를수 있고 어느것이던 누르면 

5.png


이렇게 스크린샷을 첨부해서 보낼 수 있습니다.
비싼 돈 내고 쓰는데 버그신고 팍팍 해서 버그좀 없이 씁시다.


그리고 은근히 편한기능중 하나인데, 레퍼런스 걸린 갯수를 보여줍니다.
클릭하면 어디어디에서 참고하는지도 볼 수 있어 매우 편한 기능입니다.  변수는 갯수를 세어 주지 않습니다 단 프로퍼티(get/set 이 있는) 는 세줍니다
(만약 변수 하나하나 까지 화면에 보여줬다간 코드 볼공간이 모자랄거같습니다 ㅡㅡ;) 



6.png


이걸 끄고 싶으면

Tool -> Option -> Text Editor -> All languages -> CodeLens 옵션을 조정 하면 됩니다

http://msdn.microsoft.com/library/dn269218.aspx 에 가면 더 자세한 설명이 있습니다


근데... 누구나 눈치챗겠지만.. 닷넷전용입니다 T.T 저같은 C++ 프로그래머들엔 그저 꿈같은 기능이네요

C++에도 기능이 하나 추가되었는데 ...


Header <-> Cpp 이동 기능입니다.

7.png


단축키는 Ctrl+K, O 로 그다지 좋지는 않네요. 어쨋든 Visual Assist를 쓸 이유가 하나 더 사라졌습니다.
언젠가는 완전히 걷어낼 수 있을지도 모르겟네요.


또 특정 클래스나 함수를 보면 그게 어떻게 선언되어 있나 소스를 열어서 봐야 하는 경우가 생기는데... 그걸 도와주는 기능이 추가되었습니다.

8.png


Peek Definition 이라는 기능인데 이걸 쓰면

9.png


이렇게 관련 소스가 커서 바로 아래쪽에 나타납니다. 근데 좀 멍청하긴 하네요 (...) typedef 되어 있으면 그냥 원본을 보여줫으면 합니다. typedef 된걸 보고싶어하진 않으니까요
뭐 MS가 제공하는게 아니면 이렇게 쓰는경우는 별로 없으니 꽤 유용할듯한 기능입니다.

이런 기능이 소스 파싱이 느리면 굉장히 곤란한 기능인데... 2012랑 비교해도 프로젝트를 열었을때 굉장히 빠르게 심볼을 정리합니다. 
한 2주정도 써본 느낌으로도 속도면에서 2010, 2012 보다 빠르다고 느껴지네요.

2010 프로젝트를 그대로 열어서 쓸 수도 있으니 부담없이 버전업 해서 써도 될듯 합니다.


시간 내서 나머지 변경사항을 좀더 봤으면 좋겠는데 요즘 좀 바쁘네요 ㅡㅜ

?

Lyn
조회 수 10491 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

다운로드 링크 : http://www.microsoft.com/ko-kr/download/confirmation.aspx?id=41650


변경사항은 주로 하위버전 IE(IE10, IE9) 와의 충돌 문제 해결이 많은거같네요.

?

Lyn
조회 수 23445 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
http://www.microsoft.com/ko-KR/download/details.aspx?id=38188
 

사실 온라인 다운로드 버전 받을 때 스크롤 쭉 내려서 읽어 보면 나와 있는데 ...
온라인 업데이트 프로그램을 받은 후 VS2012.2.exe /layout 처럼 /layout 옵션을 주어 시작하면 설치하지 않고 다운로드만 받습니다.

다운로드 후 인터넷이 안되는 PC로 복사해 가서 설치 하면 됩니다.
용량이 한 2G쯤 되니 시간은 좀 걸립니다(본격 원본보다 더 큰 패치)

?
  • ?
    아리수 2013.04.15 13:51
    VS2012 설치 하면서 미리 업데이트를 받아 두려고 했더니 설치 중이라는 메시지와 함께 실행이 되지 않더군요...꼼꼼하더군요..ㅋㅋ..
    작업하시는데 참고하세요...^^

2016.06.21 06:28

Visual C++ C4503 Warning Fix

Lyn
조회 수 4737 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
#include <map>
 
using namespace std;
 
struct VeryLongClassNameType1
{
 
};
struct VeryLongClassNameType2
{
 
};
struct VeryLongClassNameType3
{
 
};
struct VeryLongClassNameType4
{
 
};
struct VeryLongClassNameType5
{
 
};
typedef map<VeryLongClassNameType1VeryLongClassNameType2LongNameStdMap;
typedef map<VeryLongClassNameType3LongNameStdMapLongNameStdMap2;
typedef map<VeryLongClassNameType4LongNameStdMap2LongNameStdMap3;
typedef map<VeryLongClassNameType5LongNameStdMap3LongNameStdMap4;
 
int main()
{	
	LongNameStdMap4 a;
}

 

위와 같은 코드를 빌드 하면 컴파일과 실행엔 문제가 없지만 C4503 Waring 이 뜹니다.

이 Warning 은 http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(C4503)&rd=true 에서 보다 시피, type명이 너무 길어서 짤릴 수 있다는 경고인데, 이 경우 나중에 크래시 덤프 등을 얻어서 처리할때 type 이 매칭 되지 않을 우려가 있습니다. 사실 4098 라는 type 길이는 충분했... 어야 했는데 template 가 겹치고 겹치면서(주로 Map을 겹쳐서 tree 형태의 자료구조를 구성 할 경우겠지만 ....) 의도하지 않게 긴 type 명을 가지게 되어 버리는 경우가 있습니다.

 

이 경우 위의 MSDN 링크 에서는 아래와 같은 방식의 다른 클래스로 한번 Wrapping 하는 해결책을 제시 하고 있습니다.

typedef map<VeryLongClassNameType1VeryLongClassNameType2LongNameStdMap;
typedef map<VeryLongClassNameType3LongNameStdMap_LongNameStdMap2;
struct LongNameStdMap2
{
	_LongNameStdMap2 Element;
};
typedef map<VeryLongClassNameType4LongNameStdMap2LongNameStdMap3;
typedef map<VeryLongClassNameType5LongNameStdMap3LongNameStdMap4;
struct NewClass
{
	LongNameStdMap4 Element;
};

이 경우 map 에 대한 접근이 a.Element.find() 처럼 한단계가 더 들어가게 됩니다... 만약 이름이 그 이상으로 길어서 2~3번 더 중간에 이름을 끊어 줘야 하는 경우, a.Element.Element.find() 와 같은 상황이 발생합니다. warning 을 제거하기 위해 의도와 다른 불편한 사용 방법을 강요받게 되는거지요. 이건 좋은 방법이라고 할 수 없습니다.

 

이럴때는 

typedef map<VeryLongClassNameType1VeryLongClassNameType2LongNameStdMap;
typedef map<VeryLongClassNameType3LongNameStdMap_LongNameStdMap2;
class LongNameStdMap2 : _LongNameStdMap2
{
 
};
typedef map<VeryLongClassNameType4LongNameStdMap2LongNameStdMap3;
typedef map<VeryLongClassNameType5LongNameStdMap3LongNameStdMap4;
class NewClass : LongNameStdMap4
{
 
};

 

처럼 public 상속을 해버리면 간단합니다... 그럼 일반적으로 map을 쓰는것과 전혀 다르지 않는 방법으로 코딩하면서 워닝만을 제거 할 수 있습니다.

TAG •
?

Lyn
조회 수 15724 추천 수 0 댓글 3
Atachment
첨부 '3'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

이 코드는 Visual C++ 2013 RC에서 테스트 되었습니다.


C#을 자주 쓰시는 분들이라면 아시겠지만... C# 에는 @ 로 시작하는 문자열 리터럴이 있습니다.
저 안에서는 줄바꿈도 자유롭게 허용되고 Escape Sequence 할 필요도 없이 다양한 문자열을 쓸 수 있지요.
저같은 경우는 특히 쿼리를 날릴때 매우 유용하게 쓰고 있습니다.


csharpa.png


이런식으로요.


이게 C++ 할때도 참 부러웠는데... VC++ 2013 에서 드디어 사용 가능하게 되었습니다.
바로 R 접두사를 이용해서요..... 정확히는 괄호도 필요하지만


간단한 예제 만들어 보겠습니다.

#include <iostream>
#include <string>

using namespace std;

void wmain()
{
	string s = R"(Hello World
동해물과 백두산이 마르고 닳도록
\r\n\t
\가 안먹어!!
"따옴표도 그냥 써져!")";

	cout << s << endl;
}


의 실행 결과는 다음과 같습니다.


11.png


오! 멋지게 출력 되네요. (" 와 ") 가 문자열의 범위를 지정하는 태그로 쓰이는겁니다
하지만 여기 함정이 있습니다...

바로 )" 를 출력할 수 없단겁니다 (.....)

왜냐면 종료 태그로 쓰기 때문이죠.


즉 

#include <iostream>
#include <string>

using namespace std;

void wmain()
{
	string s = R"("(Test)")";

	cout << s << endl;
}


이런 코드는 오류라는 겁니다....

하지만 근성의 C++ 위원회 (...) 이번에도 그냥 넘어가지 않습니다. 
C++ 에서는 이것을 "시작 토큰 커스터마이징" 기능을 넣음으로서 해결했습니다...

이게 뭐냐면,  Raw String Literal 의 첫 ( 를 만날때 까지의 문자열을 "태그" 취급 합니다.

즉 아래와 같은 코드가 가능해집니다.


#include <iostream>
#include <string>

using namespace std;

void wmain()
{
	string s = R"Lyn("(Test)")Lyn";

	cout << s << endl;
}


RSL 의 첫 (를 만날때 까지 Lyn 이라는 문자열을 추가로 만났습니다.
그럼 위 리터럴의 시작을 나타내는 문자는 Lyn(, 종료를 나타내는 문자는 )Lyn 이 되는겁니다.
실행해보면 아래와 같습니다.


22.png


이로서 알아보긴 더럽게 힘들지만 (...) 맘껏 문자열을 만들수 있게 되었습니다.
아직 실제로 활용해보진 못햇지만, R"SQL(INSERT INTO TABLE VALUES(1, 2, 3))SQL" 처럼 이 문자열은 SQL 이다! 라는 것 처럼 표시하는식으로 사용해 볼 수 있을 것 같네요.


마지막으로 한가지... 유니코드 리터럴은 어떻게 하냐면... LR로 시작하면 끝입니다 (...) 간단하죠

TAG •
?
  • profile
    Lyn 2013.10.07 17:31
    아직 거의 쓰이지 않는 문법이라 그런지 syntax highlighter 가 제대로 컬러링을 못해주네요 =_= 젠장
  • ?
    사무엘 2013.10.08 03:27
    아아 이건 좀 내가 아는 C++과는 다른 사기적인 기능 같습니다... ㅎㅎ
    인텔리센스용 컴파일러, 코드 생성용 컴파일러, 신택스 하이라이팅용 파서 만드는 사람들.. 다 바빠지겠네요.
  • profile
    Lyn 2013.10.12 17:40
    간단하게 쓸수있는 문법이니 쓸모가 많을거 같습니다 ㅎㅎ.

Lyn
조회 수 30574 추천 수 0 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

아래 코드는 최신의 Visual C++ 2013 에서 작성 되었습니다.


요즘 하는거 없이 바빠서 (...) 신기능 정리하는 사이에 2013이 정식 출시되어 버렷네요.

C++11이 나오면서 추가된 기능 중 하나가 가변인자 템플릿인데, 이번엔 가변인자 템플릿 함수를 한번 구경해 보겠습니다.
tmp.jpg

혹시 C++ Template Metaprogramming 라는 희대의 마도서를 보신 분들이나,  순수 함수형 언어를 경험하신 분들이라면 이해가 쉬울텐데요, 가변인자 템플릿 함수는 기존 템플릿 메티프로그래밍(이하 TMP)과 매우 유사합니다.


결정적인 공통점은 루프가 아니라 재귀로서 반복한다는 점이겠네요.
즉 하나의 함수에서 여러개의 인자를 처리하는게 아니라 가변인자 인자 N개 함수가 N-1개의 함수를 호출하고, 또 거기서 N-2개의 함수를 호출하고... 반복하다가  최종적으로 가변인자가 0개인 함수를 호출 하면서 가변인자 함수 호출이 완료되게 됩니다.


여기 까지 읽으셧으면 눈치 채셧을텐데.. 네 맞습니다. 가변인자 함수와 가변인자가 아닌 함수 2개가 필요하게 됩니다.

잠깐 예지를 보면

#include <string>
#include <iostream>

using namespace std;

template<typename T>
void LogWrite(T value)
{
	cout << value << endl;
	return;
}
template<typename T, typename... Args>
void LogWrite(T value, Args... args) 
{	
	cout << value << ' ';
	LogWrite(args...);
}

void wmain()
{
	LogWrite<int, int, double>(123, 456, 789.012);
	LogWrite(123, 456, 789.012);
}

이런 형식이 됩니다. Args라는 식별자를 가변템플릿 인자 목록으로 쓰고 있는데 이는 가변인자함수와 비슷 합니다.
... 이 들어가는것도 그렇구요, 가변인자 함수와 마찬가지로 모든 인자가 가변일수는 없습니다. 반드시 1개 이상의 고정 인수를 가져야 합니다(단 템플릿이므로 type이 고정되진 않지만요)

여기서 저 ... 는 Parameter Pack 이라고 부른다고 합니다.



네 참 심플한데... C++ 문법 만드는 사람들이 여기서 끝낼정도로 단순할리가 없습니다(....) 
여기에 붙을 수 있는 각종 추가 기능들이 있는데 그중 하나가 가변인자의 갯수를 세는 sizeof... 연산자 입니다.

다시한번 말하지만 sizeof... 입니다 ... 까지 붙어야 정확한 이름입니다.


그리고 이 sizeof... 연산자는 가변인자템플릿 내부에서만 사용 가능합니다. 다른곳에서 사용하려고 하면 0이 나오는것이 아닌 컴파일 오류가 발생합니다.
이것을 사용하면 아래와 같은 코드가 가능합니다


#include <string>
#include <iostream>

using namespace std;

template<typename T>
void LogWrite(T value)
{
	cout << "0 : " << value << endl;
	return;
}
template<typename T, typename... Args>
void LogWrite(T value, Args... args) 
{	
	cout << sizeof...(args) << " : " << value << ' ';	
	LogWrite(args...);
}

void wmain()
{
	LogWrite<int, int, double>(123, 456, 789.012);
	LogWrite(123, 456, 789.012);
}

위 코드의 출력 결과는 다음과 같습니다
01.png

인자 3개로 호출했지만, 1개는 고정인자 취급이기 때문에 2부터 시작합니다.

?

Lyn
조회 수 28214 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
VS2010에서 코드를 치려고 하면 아래와 같은 팝업이 뜨면서 툴이 제대로 동작 하지 않는 경우가 있다.
(주로 빨간줄 잘못긋기, 인텔리센스 맛가기 등등 ...)

Visual Studio has encountered an exception.PNG

Visual Studio has encountered an exception. This may be caused by an extension. You can get more information by running the application together with the /log parameter on the command line, and then examining the file 'C:\Users\USERNAME\AppData\Roaming\Microsoft\VisualStudio\10.0\ActivityLog.xml'

이경우 레지스트리 수정으로 해결이 가능 한데, 

32Bit의 경우
[HKEY_CLASSES_ROOT\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32]
의 Default 값을 
"C:\Program Files\Common Files\Microsoft Shared\MSEnv\TextMgrP.dll" 으로


64Bit의 경우
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32]
의 Default 값을 
"C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\TextMgrP.dll" 으로 수정한다.


만약 기본폴더가 아닌 다른 곳에 설치 했다면 적당히 값 조절해라.
?
  • ?
    챙고 2013.11.13 18:26
    안녕하세요, 25살 이제 막 opencv에 들어선 대학생입니다.
    이 오류때문에 3일동안 아무것도 진전이 안되더군요.
    이 방법을 사용해 보려고하는데 제가 초보중에 초보여서..
    default 값을 변경해주는 방법을 모르겠습니다 ㅠ
    혹시 그 부분을 조금만 더 알려주실수 있나요?
    답변 기다리겠습니다.

Atachment
첨부 '3'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

오늘 같은 MS VC++ MVP이신 유영천 님께서 개인 프로젝트로 출시하신 Project D Online(Steam에서 즐기실 수 있습니다)에 재밋는 이슈가 발생하였습니다.

바로 vmovd eax,xmm0 명령어에서 illegal instruction 오류를 내면서 크래시가 난다는건데요, 원인분석의 결과를 한번 공유해 보겠습니다.


인텔에서는 2011년 새로운 SIMD 명령어인 AVX를 지원하는 CPU를 출시 하였고, 당연히 그 이후 각 컴파일러들은 해당 명령어에 대한 지원을 시작하엿고 당연히 현재 최신의 MS C++ 컴파일러인 VC++2013버전에서는 2011년에 출시된 AVX 명령어를 지원 하고 있습니다.


AVX를 지원하는 CPU는 아래와 같습니다. 출처는 영문판 위키입니다

원본 : http://en.wikipedia.org/wiki/Advanced_Vector_Extensions

 


인텔은 샌디브릿지 이상, AMD는 불도저 이상이군요. 저도 하스웰-E 가지고싶습니다...


VC++2013의 intrin.h에는 각 어셈명령어와 매칭되는 함수들과 타입이 제공 되고, dvec.h 에는 2개의 클래스 F32vec8과 F64vec4가 제공됩니다.
각각 단정밀도 8개, 배정밀도 4개를 동시에 계산할 수 있는 클래스인데요


극히 간단한 샘플 코드를 돌려 보겠습니다


#include <cstdio>
#include <dvec.h>

int main()
{	
	F32vec8 A(1.1f, 2.1f, 3.1f, 4.1f, 5.1f, 6.1f, 7.1f, 8.1f);
	F32vec8 B(1.1f, 2.1f, 3.1f, 4.1f, 5.1f, 6.1f, 7.1f, 8.1f);		
	
	A += B;

	printf("%f %f %f %f %f %f %f %f", A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7]);
		
	return 0;
}


아래와 같은 경고가 발생하는데, 뭐 일단 여기에선 무시해도 상관 없고, 빌드 옵션에 추가해도 상관 없습니다.
어차피 바이너리엔 영향 없으니까요.


01.png


그럼 위 코드는 어떤 바이너리를 만들어 낼까요?

02.png


대충 이와 같습니다.
v 로 시작하는 명령어들이 AVX명령어 들인데 8개의 float += 연산을 단 한줄로 끝내는것을 볼 수 있습니다.


하지만 세상엔 똥컴(.....) 을 쓰시는분들이 참 많고 당연히 AVX를 지원하지 않는 CPU에서도 프로그램을 돌려야할 경우가 있습니다. 하지만 그렇게 되면 최적화를 상당부분 포기하게 되죠. java나 .net 처럼 JIT 을 지원하는 환경이라면 처음 실행할때 가상머신이 CPU 를 확인해서 최적의 명령어셋으로 만들어 내겠지만(이게 닷넷, 자바의 속도가 간혹 C보다 빨라지는 이유중 하나이기도 합니다) 미리 다 바이너리로 만들어져 있는 Native Application 들은 이런 방법이 불가능 합니다. 

그래서 자주 쓰는 방법은, 미리 CPU 종류별로 다 코드를 컴파일 해 두고, 실행할때 CPU가 지원하는 최적의 명령어를 실행하도록 분기하는거죠... 실제로 극한의 속도를 요하는 라이브러리 (Intel IPP 등) 에서는 당연하다시피 쓰이고 있는 방식이고, 일반적인 라이브러리를 만들때도 쓰이는 경우가 있습니다. 혹시 리눅스에 관심있으신분이라면 최근버전의 리눅스 커널에서 아주 오래된 CPU의 지원이 조금씩 끊기고 있다는것을 아실 수 있는데, 이게 특정 이상의 명령어 셋을 기본적으로 사용하겟다는 의미이기도 합니다.


네 중요한건 바로 여기에 있습니다. VS2013은 내부적 라이브러리에 AVX코드를 생성해서 쓰는 경우가 있다는것이고, cpu의 명령어 셋을 체크 한 후에 쓰기때문에 실행엔 문제가 없어야 합니다만... 현재 명령어 셋을 체크하는것은 cpu만이 아닙니다. 각종 코드 보안 관련 기능에 사용하기 위해 OS도 명령어를 체크하지요.
아래 내용은 역시 영문위키에서 가져왔습니다.... 일일히 찾기귀찮아서


원본 : http://en.wikipedia.org/wiki/Advanced_Vector_Extensions

  • Apple OS X: Support for AVX added in 10.6.8 (Snow Leopard) update[13] released on June 23, 2011.
  • Linux: supported since kernel version 2.6.30,[14] released on June 9, 2009.[15]
  • Windows: supported in Windows 7 SP1 and Windows Server 2008 R2 SP1,[16] Windows 8
  • Windows Server 2008 R2 SP1 with Hyper-V requires a hotfix to support AMD AVX (Opteron 6200 and 4200 series) processors, KB2568088
  • FreeBSD in a patch submitted on 21 January 2012,[17] which was included in the 9.1 stable release[18]
  • DragonFly BSD added support in early 2013.
  • Solaris 10 Update 10 and Solaris 11

  • 리눅스는 굉장히 삐른 편인데 대체 어디서 정보를 얻어서 구현했는진 모르겠습니다(....), 윈도우는 날자가 적혀있지 않아 확인해보니 2011년 3월 15일입니다. 맥은 좀 늦었군요 뭐 어차피 자기들이 하드웨어 내놓을때 같이 내 놓으면 상관없겠습니다. 어차피 OS가 아니라 펌웨어에 가까우니까요


    문제는 여기에서 발생합니다. 바로 CPU는 지원하는데 OS가 지원을 안할 경우입니다 (...)
    위에 써있는것을 보시면 알겠지만 Windows 7은 SP1 이상부터 AVX를 지원합니다. 즉 SP1이 설치되지 않은 구버전의 Windows 7 이라면 AVX명령어가 실행이 되지 않는다는 겁니다....


    그래서 MS는 VC++2013 재배포 패키지( http://www.microsoft.com/en-us/download/details.aspx?id=40784 )  에 다음과 같이 명시 해 두었습니다.

    Supported Operating System

    Windows 7 Service Pack 1, Windows 8, Windows 8.1, Windows Server 2003, Windows Server 2008 R2 SP1, Windows Server 2008 Service Pack 2, Windows Server 2012, Windows Server 2012 R2, Windows Vista Service Pack 2, Windows XP 


    네 분명히 Windows7 SP1 이라고 적혀 있지요.
    문제는... 저게 SP1이 아닌데도 설치가 된다는겁니다 (....)


    03.png



    그냥 재배포 패키지설치시 확인 해서 올리라고 했었어야 할거 같은데... 어쨋든 안해줍니다 그래서 만약을 대비해 버전 체크를 하시는게 좋습니다.
    빌드넘버로 확인할 수 있는 Windows 7은 6.1.7600, Windows7 SP1은 6.1.7601 로 다르니까요.

    안그러면 이런 크래시가 발생할 수 있습니다.


    사실 AVX 같은 확장명령어로 최적화 될 상황이 그리 많지는 않습니다... 저런걸 쓸 상황이 오는건 진짜 대량의 계산을 요하는 프로그램이나, 영상관련 프로그램, 아니면 게임정도니까요.
    그래도 만약을 대비해서 나쁠건 없겟죠.


    그리고 서비스팩이 설치되지 않은 7600버전의 Windows 7은 더이상 어떤 패치도 제공 되지 않는 상황입니다(Sp1을 올려야 나머지 패치가 적용 됩니다) 그러니까 웬만하면 패치좀 하고 씁시다 (...)

    PS. Project D Online 많이좀 해주세요.

    TAG •
    ?

    Lyn
    조회 수 25224 추천 수 0 댓글 0
    Atachment
    첨부 '1'
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄

    VC++ 2013 컴파일러는 기본적으로 XP를 지원하지 않으며, 궂이 필요한 경우에 한해 XP 지원 툴셋을 쓸 수 있습니다.


    아래처럼 플랫품 툴셋을 v120_xp 로 바꾸면 됩니다


    asd.png



    ?

    Lyn
    조회 수 18257 추천 수 0 댓글 0
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄

    http://blogs.msdn.com/b/visualstudio/archive/2014/07/29/visual-studio-tools-for-unity-1-9.aspx


    가장유행하는 도구를 최고의 개발툴과 함께 쓰는것이좋겟죠.
    더이상 Unity3D 개발 환경을 고민 할 이유는 없겠습니다.


    VS 자체로도 훌륭한 개발툴이지만 C#을 만든 MS 보다 C#을 잘 지원하는 개발툴이 없는게 사실이죠


    3302.VisualStudioToolsforUnity1.9_749E74D0.png



    ?

    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄

    ubuntu 18.04로 바꾼 이후 첫 인증서 업데이트할 타이밍이 되었는데...

     

    $sudo certbot renew

    를 실행하면

     

    requested nginx plugin does not appear to be installed

    와 같은 오류가 뜨면서 진행이 되지 않는다.

     

    원인은 첫 설치시 certbot-nginx python 라이브러리가 설치되지 않은것인데. nginx의 conf 를 보면 managed by certbot 처럼 주석을 자동으로 달아놔서  마치 설치가 된 것으로 착각하게 만든다..

     

    $pip install certbox-nginx 를 실행하여 라이브러리를 다시 설치하면 정상적으로 진행된다

     

     

    ?

    Lyn
    조회 수 30167 추천 수 0 댓글 0
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄

    우분투 서버 설치시 LAMP 를 고르면 아파치가 자동으로 설치되는데...

    이때 정말로 아파치만 설치되고 관련 툴들이 전혀 설치되지 않는다 .


    sudo apt-get install apache2-utils 

    를 실행해서 apache2-utils 패키지를 설치해 줘야, rotatelogs 를 포함한 각종 툴이 설치된다.


    TAG •
    ?

    Lyn
    조회 수 16593 추천 수 0 댓글 0
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄

    sudo apt-get install libssh2-php


    이름이 좀 애매하다. 보통 php가 앞에붙지않나

    TAG •
    ?

    Lyn
    조회 수 5546 추천 수 0 댓글 0
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄

    우분투 14.04 에서 apt-get 으로 libssh2-php만 나중에 따로 설치시 php5-mysql 모듈이 날라가버리는 버그가 있다 (....)

    어이없지만 조심해야할부분.


    다시설치하면 되긴한다

    TAG •
    ?

    Lyn
    조회 수 29718 추천 수 0 댓글 0
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄
    ?

    단축키

    Prev이전 문서

    Next다음 문서

    크게 작게 위로 아래로 댓글로 가기 인쇄

    Trac, Mantis, Redmine 은 기본적으로 UTF-8을 사용한다.

    그러나 VC++은 소스를 ascii로 저장하기 때문에 저장소 연동을 하면 소스에서 한글이 다 박살난 채로 보이게 된다.

    이것을 해결하기위해서는 소스를 UTF-8로 저장 해야 되는데, 저장시 자동으로 UTF-8로 변환을 하는 매크로가 있다



    MacroIDE -> EnviromentEvents에


    Imports System.IO


    추가 한다. 그 아래에


    Sub MakeUTF8File(ByVal path As String)

        Dim input As New FileStream(path, FileMode.Open)


        'Check BOM

        Dim isUTF8 As Boolean = (input.ReadByte = &HEF And input.ReadByte = &HBB And input.ReadByte = &HBF)

        input.Close()


        If (Not isUTF8) Then

            Dim s As String

            s = File.ReadAllText(path, System.Text.Encoding.Default)

            File.WriteAllText(path, s, System.Text.Encoding.UTF8)

        End If

    End Sub


    Public Sub DocumentEvents_DocumentSaved(ByVal Document As EnvDTE.Document) Handles DocumentEvents.DocumentSaved

        Dim path As String = Document.FullName

        MakeUTF8File(path)

    End Sub


    를 추가한다.



    PS. trac은 지금 안 쓰고있어 확인이 안되는데 redmine 은 그냥 소스 인코딩을 추가해주면 간단히 해결된다 (...) 걍 euc-kr 등록해두자



    ?

    Board Pagination Prev 1 ... 2 3 4 5 6 7 ... 8 Next
    / 8