XNA 및 C # 대 360의 주문 프로세서


14

읽은 이 rant 때 , 아마도 Xenon과 CELL BE가 브랜치캐시 무지 코드에 매우 민감하다는 것을 알았지 만 사람들이 C #으로 게임 을 잘하고 있다고 들었습니다.

그렇다면 XNA로 전문적인 작업을 수행하는 것이 불가능 하거나 XNA를 게임 개발의 킬러 API로 만드는 포스터가 누락 된 것이 사실입니까?

전문가로서, 나는 당신이 돈을 벌 수 있다는 의미가 아니라, 더 전문적인 게임에는 본질적인 것에 대한 그러한 장벽이있는 언어의 범위를 벗어난 것처럼 보이는 물리학 모델과 애니메이션 시스템을 가지고 있다는 의미에서 더 . 내 게임에 충돌 시스템이나 유체 역학 엔진을 작성하고 싶었다면 C #이 런타임 코드 생성기 및 내장 기능 부족으로 성능을 저하시킬 수있는 기회를 제공하는 것 같지는 않습니다.

그러나 많은 사람들이 이러한 제약 조건 내에서 잘 작동하여 성공적인 게임을 만들지 만 누락으로 인한 문제를 피하는 것 같습니다. XNA 게임은 이미 라이브러리에서 제공하거나 셰이더가 처리하는 것 이외의 복잡한 작업을하는 것을 보지 못했습니다. C #의 한계로 인해 더 복잡한 게임 역학을 피할 수 있습니까? , 아니면 그것을 수행 하는 집중하는 사람들 만 있는가?

솔직히 말해서 AI 전쟁이 데이터 지향적 접근 방식이나 표준 접근 방식보다 더 나은 실행을 위해 더러운 C # 해킹 을 하지 않고도 AI의 많은 단위를 유지할 수 있다고 믿을 수 없으며 그 부분도 내 질문이라고 생각합니다. 사람들이 C #을 해킹하여 게임 코더가 C ++로 자연스럽게하는 일을 할 수 있습니까?


란트. 그 사람에 대한 정보를 찾지 못하고 그들이 스타트 업이라는 걸 알았는데,이를 뒷받침할만한 정보를보고 싶습니다 ...
Jonathan Connell

스튜디오가 XNA 사용을 인정하지 않는 것 같습니다. 그러나 거기에 많은 예제는 여기에 링크
트리스탄 워너 스미스

글쎄, 그것을 백업하기위한 명백한 정보는 CPU가 본질적으로 C # 인 분기 코드에서 상당히 나쁘다는 사실입니다. 내가 알고 싶은 것은 전문 XNA 사용자가하는 일은 C #이 부과 한 소프트 한계에 도달하지 않는다는 것을 의미합니까?
Richard Fabian

3
나는 하향 투표를 이해할 수 없습니다 ...
FxIII

3
나는 많은 사람들이 그의 링크 된 기사에서 (많은) 기술적 인 실수로 인해 Richard의 질문을 무시하고 있다고 생각합니다. 그리고 "전문가"라는 단어를 "돈을 버는 것"보다는 "할로 수준의 생산"을 의미하는 것으로 떨리는 사람들도 있습니다. 후자는 좋지 않은 선택이지만 링크에 동의하지 않아서 공감하지 마십시오. 대신 응답하여 링크를 파기하십시오.

답변:


21

좋아, 당신이 링크 한 그 란트에 구멍을 뚫기 만하면됩니다.

  • "C #은"Just In Time "인터프리터에 의존합니다." -JIT 컴파일러 입니다. 메소드가 JITted 후 한 번 컴파일 된 코드는 각 호출에 재사용됩니다. 컴파일 된 코드는 사전 컴파일 된 기본 코드와 매우 비슷합니다.
  • "Xenon CPU는"제자리에있는 "프로세서입니다 -"순서대로 "를 의미합니까? - "Xenon CPU에는 분기 예측이 없습니다" . 그는 JIT 컴파일이 자연스럽게 CPU에 의해 재정렬되어야하는 잘못된 코드를 생성하고 많은 분기를 일으킨다는 것을 의미합니다. 절대 말도 . 이 CPU 아키텍처에서 실행하는 것과 동일한 성능 조언이 C ++ 및 C # 모두에 적용됩니다.
  • "[JIT]은 360에서 일정한 플러싱이 필요합니다" – 잘못 컴파일 된 코드는 정상적으로 컴파일 된 코드와 같이 캐시에 보관 될 수 있습니다. 파이프 라인 플러시를 의미하는 경우 위의 요점을 참조하십시오.
  • "제네릭 [...] 사용 코드 생성" -제네릭은 다른 모든 것과 마찬가지로 JITted이며 다른 모든 것과 마찬가지로 JITted 코드는 빠릅니다. 제네릭을 사용하면 성능이 저하되지 않습니다.
  • "언어의 모든 섹시한 비트 [...]는 분기 예측을 필요로합니다 ..." -이것이 C ++에도 어떻게 적용되지 않습니까? - "... 또는 [...] 내부 코드 생성" -JITting을 의미합니까? 내가 빠르다고 언급 했습니까? ( 데스크톱 CLR이 실제로 사용 하는 모든 장소에 들어가지는 않습니다. 코드 생성을 않습니다. Xbox 360에서 지원하지 않는 기능입니다!)
  • "[C #에는 [C ++]의 방대한 라이브러리가 없습니다" " -XNA 자체를 제외하고? 그리고 훨씬 더 . (여전히 이것은 다소 공정한 포인트입니다.)

Xbox 360의 XNA는 .NET Compact Framework CLR의 수정 된 버전에서 실행됩니다. 의심의 여지없이 데스크탑 버전의 표준에 맞지 않습니다. JITter는 아마 좋지 는 않지만 나쁘지 않다고 생각 합니다. 나는 그가 두려운 가비지 수집기 를 언급하지 않은 것에 놀랐습니다. 데스크톱 CLR에 비해합니다.

(물론-당신은 어쨌든 할당에주의를 기울여야하는 것처럼 전문적으로 개발 된 게임에서 가비지 수집기를 치지 않아야 합니다. 전문가 수준의 게임.)

.NET Compact Framework에 대한 실제 기술 토론은 개요 , JIT 컴파일러GC 및 힙 시리즈로 시작하십시오. .

그의 용어에 대해 완전히 구체적이지 않은 방식은 그가 의미하는 바를 이해하기 어렵게 만듭니다. 그는 최대 허용 모드에 있거나 자신이 무엇을 말하는지 모릅니다.


이제 우리는 비켜 것을 가지고 그 다음은 몇 가지 것들 않는 360에 XNA를 사용하기보다는 기본 이동하여 놓치지을 :

  • 실제로 매우 빠른 CPU 부동 소수점 연산 을 수행하기 위해 SIMD / Vector 장치에 액세스
  • C #보다 약간 빠른 모국어 코드 사용 기능
  • 조금 능력 당신은 메모리 할당 방법에 비트 lazier
  • XBLIG 게임은 6 개의 코어 중 4 개에만 액세스 할 수 있습니다 (그러나 여전히 3 개의 CPU를 모두 얻지 만 풀 코어가 아니므로 많이 놓치지 않습니다)-이것이 XBLIG가 아닌 XNA에 적용되는지 확실하지 않음 계략
  • 매우 모호한 그래픽 속임수를위한 완전한 DirectX 액세스

이것들은 단지 CPU 측 제한 사항이라는 것을 지적 할 가치가 있습니다. 여전히 GPU에서 완전히 무료로 액세스 할 수 있습니다.

나는 질문과 효과적으로 동일한 질문에 대한 이 답변 에서 이러한 것들을 설명했습니다 . 그 답변에서 언급했듯이 XNA는 "전문"개발에 절대적으로 적합합니다. .

피해야 할 유일한 이유는 C # 재능을 고용하고 C # 엔진을 라이센스하며 기존 C # 지식과 동일한 방식으로 기존 C # 코드를 재사용 할 수 없기 때문입니다. 또는 C #을 지원하지 않는 플랫폼을 대상으로 할 수도 있습니다.

물론 "전문적인"개발자가 아닌 많은 사람들에게 XNA는 Xbox 360을 이용할 수있는 유일한 옵션입니다.


다른 질문에 대답하려면 :

C #에서 아무것도 당신이 기본적으로 데이터 중심의 접근 방식을 사용하여 멈추지 정확히 같은 방식으로 당신이 C에서 사용할 것 ++.

C #에는 컴파일 타임에 코드를 자동으로 인라인하는 기능이 없으며 (확인하지 않고) 소형 CLR의 JITter가 메소드를 인라인 할 수 없다고 확신합니다 (데스크탑 CLR 가능). 따라서 성능이 중요한 코드의 경우 C ++에서 일부 지원을 제공하는 C #에서 수동으로 인라인해야 할 수도 있습니다.

C #에서 충돌 감지 및 유체 시뮬레이션과 같은 CPU 수학 집약적 인 항목을 자주 볼 수없는 더 큰 이유는 위에서 언급 한 바와 같이 벡터 장치에 대한 액세스 권한이 없기 때문입니다.


나 자신을 기억할 수는 없지만 C #이 간단한 배열을 반복하는 것을 멈추지 않습니까? int, float, char와 같은 일류 클래스 유형을 권투하는 것에 대해 기억합니다. 그 때문에 일부 데이터 지향 접근법은 가능한 한 빨리 작동하지 않습니다. 맞습니까? 내가 무엇을 기억하고 있습니까?
Richard Fabian

2
C #은 유형에 값을 할당하면 값 유형 (내재적이 아닌 고유 한 값 유형을 만들 수 있음)을 상자에 넣습니다 object. 그리고 버전 1 (제네릭 이전)에서는 상자를 넣지 않고 배열이 아닌 컨테이너에 넣을 수 없었습니다. 그러나 요즘에는 상자없는 코드를 작성하는 것이 매우 쉽습니다. 그리고 CLR 프로파일 러를 사용하면 복싱 할 수있는 곳을 감지 할 수 있습니다.
Andrew Russell

JIT 통역사가 가능합니까? 역설적으로 들린다.
공산주의 오리

JIT 해석으로 분류 할 수있는 몇 가지 스레드 코드 기술을 보았습니다. 확실히 엣지 케이스입니다.

1
@Roy T. " XNA Math Library "(DirectX의 일부)와 " XNA Framework "는 매우 불행한 명명 충돌로 완전히 다른 두 가지입니다. 연결 한 설명서는 XNA Framework에 적용되지 않습니다. XNA Framework 수학 유형은 SIMD / Vector 장치를 사용하지 않습니다 .
Andrew Russell

5

'전문'을 정의해야합니다. Angry Birds, Plants vs Zombies 등을 할 수 있습니까? 물론. Crysis 2, COD, Halo를 할 수 있습니까? 나는 그것을 의심한다. C #을 사용하면 CPU를 많이 사용하고 메모리의 모든 마지막 바이트 (가비지 수집에서 손실 됨)를 짜야하는 게임에만 영향을 미치므로 여전히 할 수있는 일이 많이 있습니다.

시작하는 사람들을위한 학습 도구, 프로토 타이핑 도구, 트레이드 오프를 다룰 수있는 게임 작성 플랫폼 등은 환상적이며 많은 힘과 단순함을 가지고 있으며 반드시 필요한 것을 만들도록 설계되지 않았습니다. 'AAA'게임을 호출하십시오. 또한 크로스 플랫폼 포팅 및 호환성과 관련하여 걱정해야하는 많은 고통과 고통을 제거합니다.

놀라운 게임을 만들고 XNA로 할 수있는 한계에 부딪 치면 MS에 직접 연락하는 것이 좋습니다. 아이디어가 충분히 좋으면 완전히 발전 된 개발에 손을 댈 수 있습니다. 전부.


그래도 멍청한 듀크 누켐 속편을 만들 수 있을까요? ;)
Jonathan Connell 2018 년

1
대부분의 벤치 마크에서 C # 코드는 PC의 동등한 C 코드보다 30 % ~ 70 % 느리게 실행됩니다. 대부분의 게임이 CPU 바운드가 아니며 C # 코드의 중요한 부분을 동등한 C 코드보다 거의 빠르거나 빠르게 실행할 수있는 안전하지 않은 코드를 사용하여 작성할 수 있다고 생각할 때 (JIT에 사용 가능한 정보가 훨씬 많기 때문에 더 빠름) 컴파일러보다 더 나은 최적화 선택을 할 수 있습니다)) C #은 AAA 게임에 완벽하게 적용됩니다.
BlueRaja-대니 Pflughoeft

@BlueRaja : 안전하지 않은 코드는 Xbox 360에서 대부분의 XNA 개발을위한 옵션이 아닙니다.

1
@BlueRaja : CLR이 수행 할 수있는 최적화 횟수가 줄어들 기 때문에 unsafe코드가 안전한 코드 보다 느리다 는 것을 지적하는 것이 좋습니다. 당신은 그것을 측정해야합니다.
Andrew Russell

2
@Blueraja "대부분의 게임이 CPU에 묶여 있지 않다고 생각할 때"인용이 많이 필요합니까? 나는 모든 축에 얽매이지 않고 전문적으로 개발 된 게임에서 일하지 않았습니다. 그렇지 않은 경우 우리는 기계의 해당 부분으로 하중을 이동시키는 방법을 찾을 것입니다!
Richard Fabian

3

간단한 사실은 재미있는 게임을 만들기 위해 높은 폴리곤 수, 풀 HDR 조명 또는 세계에서 가장 흥미로운 물리학이 필요하지 않으며 게임 계획에 해당 게임이 포함되어 있지 않은 경우 더 빠른 이유는 무엇입니까? 개발 시간 솔루션?

더 전문적인 게임에는 물리학 모델과 애니메이션 시스템이 있습니다

그건 잘못이야 프로 게임에는 게임 플레이를 구현하고 예술적인 모습을 구현하는 데 필요한 것이 있습니다. 게임은보다 사실적으로 보이거나 더 자세한 물리학을 가지고 있기 때문에 전문적이지 않습니다. 전문적인 게임은 게임 플레이와 시각 목표, 시간, 예산 등을 달성하고 배송하여 수익을 창출합니다.


1
높은 폴리곤 수와 HDR이 그래픽 카드에 떨어집니다. 따라서 C # 및 C ++에서 정확히 동일한 성능을 기대해야합니다.
BlueRaja-대니 Pflughoeft

@BlueRaja : 특히 CPU에는 CPU 비용이 있으며 특히 메모리가 360입니다.
DeadMG

다소간, 기본 코드보다 그래픽 라이브러리 호출에 약간 더 많은 오버 헤드가 있습니다. 반면에 현대적인 그래픽 라이브러리는 주요 병목 현상 중 하나이므로 프레임 당 드라이버 호출 횟수를 줄이기 위해 매우 열심히 노력합니다.
drxzcl 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.