Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
I am a programmer, FYI. But it is basic parallelism concepts that fundamentally and inherently cause game loops to be notoriously difficult to substantially multithread. The operating system or api have no relevance or relationship to this fact. This is common knowledge, no debate needed indeed, just as sure as water is wet. Thank you.
Here's one readily available developer statement from the first page of Google results about this that I told you to go look at earlier rather than continuing to spread misinformation :
http://forums.riftgame.com/general-.../352460-tech-talk-rift-performance-2-2-a.html
Again it isn't poor optimization or lazy devs as you falsely claim.
i dont know what you are going on about.
i said DX11 is the threading bottleneck for modern games.
nothing in what you posted is even romotely related to my statement.
again, i suggest you google game programmer blogs and read there cheif complaint: Inability to submit asynchronous batches.
Im just wondering when we will get away from 28nm. Im not sure they have been stuck on a process for so long???? 3 years coming up and possibly pushing 4 years.....
I am a programmer, FYI. But it is basic parallelism concepts that fundamentally and inherently cause game loops to be notoriously difficult to substantially multithread. The operating system or api have no relevance or relationship to this fact. This is common knowledge, no debate needed indeed, just as sure as water is wet. Thank you.
Here's one readily available developer statement from the first page of Google results about this that I told you to go look at earlier rather than continuing to spread misinformation :
http://forums.riftgame.com/general-.../352460-tech-talk-rift-performance-2-2-a.html
Again it isn't poor optimization or lazy devs as you falsely claim.
bwwaahahaaa.. where to start ?!!
Rift is one of the absolute WORST examples you could even attempt to use. Rift uses very slightly modified DX9 based engine (Gamebryo) that is over 10 years old. Funny enough, much of that developer's statement has still yet to materialize. Look up Gamebryo AND DX11 or multithreading .. pages and pages of promises dating back years (with regard to multithreading) and they barely make use of more than dual cores.
With regard to your supposed "programming" experience.. please feel free to share what published projects you were lead on and then maybe we can discuss making it past Basic 101.
hahaha
nice try.
Considering your history of completely inaccurate and just plain wrong posting, you are as much of a programmer as i am a Nuclear Physicist.
Rift uses a custom engine, derived from Gamebryo. We began development with Gamebryo, which provided an awesome head-start, and we were able to get up and running quickly. Over time we customized or replaced most of the major pieces, providing our own solutions for lighting, animation, shaders, model streaming, and other components. We have talented in-house staff that develops our custom engine, so we control our own rendering destiny instead of waiting for someone else to provide features or support.
As was stated elsewhere, the Rift engine uses DX9 for best compatibility, with great visuals. It's a deferred renderering architecture, which allows for some cool effects, and makes it cheaper to render scenes with large numbers of point lights like you see in the video trailers. Night time looks especially awesome in Rift, with every fire, lamp, and spell casting a flickering glow on the world around it. Nothing is pre-baked: all of the lighting is dynamic, which of course is necessary for a game based around dynamic content.
Although I'm a Trion gear-head, my hat's off to the team's art staff, who have created some truly amazing stuff. At the end of the day, no amount of whiz-bang rendering technology will turn a dull, flat environment into a compelling one. Look at Gloamwood, or Darkening Deeps, or Silverwood. Look at the quality of the character models, the NPCs, and the animations. The art team has created some incredible content while working within the box the programmers have provided. They've developed custom shaders for everything from horse hair to tree bark. Go read through the developer intro thread again to see some of the artists who have helped created one stunning-looking game.
Im just wondering when we will get away from 28nm. Im not sure they have been stuck on a process for so long???? 3 years coming up and possibly pushing 4 years.....
And then 16 nm will stay here even longer![]()
I think you guys are arguing different things. There is more going on in a game engine than just the renderer. Yes, draw calls are a bottleneck in the graphics engines in some instances. But there is also work being done by the CPU for AI, sound, physics, loading assets, feeding the graphics cards, etc above and beyond what your GPUs are doing to display graphics. Multi-threading the whole game engine is not as trivial as people are making it out to be.
Guys, don't resort to personal attacks: even accusing someone of being biased or calling out trolling counts as a personal attack in these forums now. I would know: I just got off a ban for calling someone a troll. If someone makes a wild, uninformed, unsupported, highly loaded and extremely convenient argument, you can't actually call them out.
On topic: multi threading applications is quite easy, it jus requires an out-of-box approach. The reason so many companies are still insisting to use single and dual-threading approaches is the same reason they still compile in 32 bit X86.
I think you guys are arguing different things. There is more going on in a game engine than just the renderer. Yes, draw calls are a bottleneck in the graphics engines in some instances. But there is also work being done by the CPU for AI, sound, physics, loading assets, feeding the graphics cards, etc above and beyond what your GPUs are doing to display graphics. Multi-threading the whole game engine is not as trivial as people are making it out to be.
Multi threading is easy when you can split one task from another. Games are particularly hard to thread as nearly everything that happens depends on what the gamer does. I mean, you can't just have a physics engine doing it's own thing having a building fall down if the player never triggers the explosives for it and if the falling down (B) depends on the triggering of explosives (A) it makes no sense to have A spawn a new thread for B as that would be slower than A->B in one thread.On topic: multi threading applications is quite easy, it jus requires an out-of-box approach. The reason so many companies are still insisting to use single and dual-threading approaches is the same reason they still compile in 32 bit X86.
Multi threading is easy when you can split one task from another. Games are particularly hard to thread as nearly everything that happens depends on what the gamer does. I mean, you can't just have a physics engine doing it's own thing having a building fall down if the player never triggers the explosives for it and if the falling down (B) depends on the triggering of explosives (A) it makes no sense to have A spawn a new thread for B as that would be slower than A->B in one thread.
If you think about the flow of a game very VERY little happens without interaction from the player. Using the example above, maybe the function call collapseBuilding() can be internally threaded (though maybe not), but you can't just arbitrarily call the function without dependence on the main game thread.
tl;dr Making threads is easy, using them is not.
It's interesting how often convenient arguments are available when you're arguing for the facts and the truth. And no, multithreading a full game engine is not anything like setting a simple compiler flag with further qa testing done like you are implying. Game software workloads are, as I've said ad nauseum, by their nature not terribly conducive to the principles of parallelism and thus are quite difficult to significantly multithread to an appreciable extent overall. This is hardly news, but rather complete common knowledge to anyone with even the slightest amount of programming under their belt.
The problem with that assumption is that the game world needs to stay in sync between players. If player A and player B are in different chunks of a minecraft world then yes you can assign a thread to each. But, Players tend to be in the same chunk and if player A drops a block in front of player B you don't want player B to be able to step into the space where player A dropped a block. In a single thread this is easy to deal with. In a multithreaded world this is fucking hard... Like crazy fucking hard.But in cases like Minecraft where a ton of simultaneous actions are taking place at once on a very well-defined grid, a server could allocate a 'thread' to each player, and that thread could simulate the world around her/him as basically an instance of the game. Engines built from the ground up for modern 4+core systems are trying to split every possible task into a self-contained subsystem and have the 'master' thread really exist just to hold variables.
Tera was the worst optimized MMO I've ever played. Rift was the second. Don't even try raiding in Rift on an AMD 8 core. It was like standing in molasses as you were at sub 15 fps the entire time. And all of my cores were doing absolutely nothing the entire time. Tera was only worse because I could hide my UI and go from 20 fps to 60 fps. Some Autodesk limitations reasoning was given long ago.
If you could drive a real game engine under either of those games I would play them forever.
The problem with that assumption is that the game world needs to stay in sync between players. If player A and player B are in different chunks of a minecraft world then yes you can assign a thread to each. But, Players tend to be in the same chunk and if player A drops a block in front of player B you don't want player B to be able to step into the space where player A dropped a block. In a single thread this is easy to deal with. In a multithreaded world this is fucking hard... Like crazy fucking hard.
On the "legacy" libraries that people are using; minecraft uses java which will auto parallelize where is can. There's not much. In C there is the pthread library which has been around for quite a long time but does about anything you could want from a thread. A master thread is more than just holding variables. It needs to manage locks between threads in order to keep the timing correct and to maintain a stable game world. This is not a trivial task and many threads can end up with the performance of a single thread if the timing is sequential.
I'm pretty sure that has nothing to do with multi-threading, and more to do with the netcode.
We're assuming a thread per player interacting with a global data structure (the game world). If player A drops a block into a place that player B is entering, how do you resolve the order of those events? How do you resolve it when two players try to drop a block into the same space?
These are threading issues and there are ways to deal with them, but they're not trivial and they don't give you linear performance scaling with threads/cores.
Again, they are not threading issues. You would have the same issue, if it's on 1 thread, or 40.
it's more of a netcode / logic issue than it is a threading issue, and it's a very simple one to solve. if 2 events happen at exactly the same time, which one gets priority to execute if they conflict?
A more realistic threading problem is a race condition, and that is not limited to games.
Again. No. It's a data structure coherence issue. Yes you have the issue in a single thread, but it's trivially resolved as both players input into a single thread which is ordered.
Assume both players are playing on the same machine. You need either one of two things to resolve the block drop issue.
a) Global clock that all threads reference
b) Locks on every minecraft block space
In a) you have a thread increment a clock and the threads time stamp their input from players in order to say who dropped the block first. This ends up giving you near single threaded performance.
In b) you need to set aside a bit (at least 1 bit anyway) to "lock" each minecraft block. Thread 1 gets the lock on the space the player wants to place a block. If it gets it then it places the block and unlocks. Else the player can't drop the block. This gives good threaded performance, but it's at a cost.
1 bit per block plus the cost of locking and unlocking. See Mutex locking/unlocking here
https://gist.github.com/hellerbarde/2843375
This IS a threading issues and specifically it's a thread timing issue. It certainly isn't free to resolve.
Edit:
This thread has gone quite off topic. Please PM me if you wish to continue the discussion.