This is a consequence of having to abuse the hell out of prefix bytes in order to extend the ISA in ways it was never originally designed for
It's true that there are lots of prefixes, but if you look at how those prefixes are actually used, there is a great amount of regularity. Almost every SSE/SSE2 instruction uses the same prefix encoding scheme based on whether it is scalar/packed or single/double. SSE3 has regularity across other dimensions. Later SSE ISAs have somewhat less regularity but they were also much smaller extensions.
There have been papers showing that the optimal number of GPRs for an OOO CPU with renaming is somewhere between 16 and 32
I remember reading that paper. I didn't buy it then and after almost 10 years in the HPC market I really don't buy it. Many of those limit-type papers have a fundamental flaw: they assume compilers are really, really stupid. I work on compilers that have to go out of the way to not perform certain transformations because they create too much register pressure. Now, isa-wise it gets harder to make more registers available while at the same time keeping text size reasonable but it's absolutely not true that we cannot use more than 32 registers. We can in fact use thousands, in almost every program.
the actual Intel instruction set is quite inelegant, both from a programmer standpoint
I've always been curious about this kind of statement. I hear it a lot. While I understand the complexities of silicon implementation (finding instruction lengths and decode are a PITA), I've always thought the ISA itself was rather elegant. Yes, there is cruft that could be dropped and AMD did some of that with X86-64, but overall, the day-to-day instruction set is mostly orthogonal and has a fairly regular encoding. GPR shifts, MUL and DIV are a bit quirky and the lack of a packed 64-bit integer multiply is an almost unforgivable sin, but overall, I rather like it.
What are the things you would like to see changed? We need specifics to have an interesting discussion.:)
There are many forms this can take. In some cases (construction, for example) it means making a special effort to train and recruit people of color. In housing and land development, it means making choices not to do something harmful in a neighborhood.
For example, here in Minneapolis the county wants to put a commuter rail storage and maintenance facility right where one of the most racially diverse and poverty-stricken neighborhoods has a long-standing plan to develop housing, retail and office space. Putting the facility there would perpetuate structural racialization. For 70 years the neighborhood has been the dumping ground for the city. Addressing inequity would mean saying, "no, we're not going to do this this time. We're going to make an active choice to put this somewhere else because the history of this area compels us to do so."
Why? What did I say that was so offensive to you? It's too bad you posted anonymously. This is exactly the fear of talking about race that we need to overcome.
One of the videos is on coworker tolerance, and includes race among the many things it is unacceptable to treat people differently because of.
But that's exactly the problem. Sometimes we do need to treat people differently. Not on a one-to-one, personal basis but on a societal policy and goals basis. We must address discrimination and inequity head-on. We can't do that by being color-blind. Sometimes we need to set hiring goals and enforce such things to break the patterns of the past and the structures those patterns put into place.
The topic is clearly the racism going on right now, among other places also within the NIH. In that sense they should NOT be taking race into account, and probably other factors that shouldn't be considered as well.
I don't think we can yet rule out any action to address the problem. In fact we need to attack it on multiple fronts. One of those fronts is opening up opportunity for people in disadvantaged groups to get into science and engineering. There's a whole set of structures in place that are barriers to entry. Another of those fronts may in fact be setting goals around NIH grant award to minority/disadvantaged researchers. That doesn't mean giving grants to unqualified applicants. It means taking into account past discriminatory history and thinking about what future awards mean in terms of racial equity. That may mean giving preference to certain people or it may not. I don't know enough specifics on NIH policy to comment on any deeper level.
"Equal" and "Equitable" are not the same thing. My now-disappeared former reply to GP:
An equitable society is one with the same rules for all.
No. It may be one definition of an equal society, but it is not equitable. Equal is everyone getting the same pair of shoes. Equitable is everyone getting shoes that fit them well. We must take into account our past policies and the structures they have set up that hold certain classes of people back. Unless we actively dismantle those structures (and in some cases that means targeting certain classes of people for opportunity) we will never become equitable.
For example, take construction. There has been such a long history of discrimination in contracting and hiring that the good old boys networks doesn't have a lot of black folk in it. If we continue to let contracts the same way and we continue to use the same relationships to hire workers, we will continue to discriminate simply because the disadvantaged people aren't in the network. Thus we have training programs targeted at women and minority workers, goals for hiring DBE contractors, etc. It works pretty well once it's enforced. The enforcement part is the trick, though. Most places don't bother.
Excellent points. I see race and class as interlinked and inseparable. Sometimes class gets used as a substitute for race to allow people to avoid talking about race but they are two sides to the same coin. There's a reason blacks are generally less wealthy in this country, as I'm sure you know well.
Education is indeed critical but all these things are interlinked. We know that kids don't learn as well when they don't have a stable living situation, so helping the parents find jobs and providing a support structure directly helps in the education improvement effort. Far too many people in the past have advocated supposed silver bullets when in fact no such thing exists. But we do know some things that work. The problem is one of political will. We need to talk about race so that we understand that 1) it's not a scary thing to talk about, 2) confronting reality head-on is in fact a healing experience and 3) power is not a zero-sum game and opening opportunity to disadvantaged groups does not mean the majority has to give up opportunity. It does mean they have to recognize their privilege and internalize what that means.
Although I think I would disagree with him on the need to target impacts on the older community (ie: EEO). While I think it is a novel approach, it isn't appearing to have the direct rammifications of breaking the racial structures we were hoping for.
Your post was right on except perhaps for this part. The problem with things like EEO is they are typically not enforced. For example, here in Minnesota the DOT has a very long history of failing to meet or even attempt to meet goals around DBE contracting and requiring contractors to hire women and minority workers. We finally kicked up enough dust and got a Commissioner of Transportation that actually appears to give a damn. Things are moving. It takes time to undo decades of discrimination but we are indeed seeing an uptick in women and minority participation in road construction.
A big success story here was the construction of Target Field, where the county exceeded its goals around employing minority and women construction workers. So this stuff can work when there is a will behind it to make it work.
Similar things are happening in St. Louis (the I-70 project) and elsewhere. It seems the elections do matter and a President who cares can actually make things happen.
An equitable society is one with the same rules for all.
No. It may be one definition of an equal society, but it is not equitable. Equal is everyone getting the same pair of shoes. Equitable is everyone getting shoes that fit them well. We must take into account our past policies and the structures they have set up that hold certain classes of people back. Unless we actively dismantle those structures (and in some cases that means targeting certain classes of people for opportunity) we will never become equitable.
For example, take construction. There has been such a long history of discrimination in contracting and hiring that the good old boys networks doesn't have a lot of black folk in it. If we continue to let contracts the same way and we continue to use the same relationships to hire workers, we will continue to discriminate simply because the disadvantaged people aren't in the network. Thus we have training programs targeted at women and minority workers, goals for hiring DBE contractors, etc. It works pretty well once it's enforced. The enforcement part is the trick, though. Most places don't bother.
This is the very definition of structural racialization. It is institutional bias. Something is certainly driving the reported results. There may be many factors but structural racialization almost certainly is one of them.
No, it isn't. It's focusing on outcomes, which is what's important. All the good intentions you have mean nothing if the outcome indicates inequity. There may be many causes of the inequity but that fact that the inequity exists is a real problem that must be addressed.
Doesn't focusing on differences (like this study) just perpetuate racism?
No. We will not be able to erase current racial inequity unless we talk about it. Problems don't just go away by ignoring them. Ignoring them maintains the status quo, cementing the inequity further.
This isn't necessarily overt discrimination. See here. The fact that blacks fared worse indicates structural racialization. Blacks have been discriminated against for longer and more systematically than other races in the U.S.
Due to this skewing, if that small pool of top-ranked schools have relatively few black faculty, then the funding will end up going to faculty who aren't black.
That's right. In other words, it's structural racialization. See here.
That's exactly right. This is structural racialization. Past history of discrimination constructed a structure that now disadvantages minorities and often blacks in particular. In fact everything about the process may be perfectly colorblind but the fact that structures of relationship, reputation, etc. exist and were built during times of overt discrimination means that outcomes today will be inequitable.
This is why a "colorblind" society doesn't exist. Being "colorblind" simply means we will maintain the status quo and inequity will continue. This is why we need to explicitly address and take race into account when making decisions around policy, opportunity and process. We need to explicitly address racial inequity in order to become an equitable society.
Just as a quick example (I'm sure this isn't the best example, but it's all I can think of right now), closures are great for setting up ad-hock event handling
That is true.
with some objects shared by a few event handlers belonging to a window. That would be very awkward in C++, because you'd have to make sure someone is responsible for deleting the objects when the event handlers disappear
People have been doing this in C++ for a long time, albeit without the nice syntactic sugar. Boost.signals is but one example. C++ lambdas make common, yet often wordy, code easier to read and maintain. The core concept of an invokable object with state has been there since the beginning via overloading operator().
So, when the lambda actually "closes over" a variable (not just capturing its value), you can't use it outside the block where it was defined. That's unsurprising, since it would mean keeping the stack alive or "lifting" the variable from the stack into the heap, which would open a whole new can of worms.
What does your favorite language do in this case? Does its memory model have a local stack concept at all? I guess I'm not sure how any other language with a local stack model would implement this without promoting the variable to long-lived storage. Is this really a case of C++ not providing the equivalent to some other language or is it instead a case of extra C++ functionality that doesn't map onto another language's memory model well. In C++11 one can certainly create closures over objects that are global, on the heap, etc. and pass them around at will.
Yes, it often is. That's why to this date there is still no Fortran I/O standard and no Fortran standard ABI. It is impossible to link Fortran objects created by multiple vendors' compilers and expect it to work. C doesn't even have a standard ABI. Why should we expect C++ to have one?
I would like to see the abilty to do "class X {int A,B,C'; void foo();...}" in a header file. Notice the ellipsis. This means "there is more stuff but if you have a pointer to the class you can call foo()".
I like this idea a lot. It attacks a real problem in the language. Pimpl is all well and good but it is often too much overhead for small classes. I suspect someone has written a proposal for extensible classes. It would be interesting to research any past discussion about this kind of feature.
For instance, there's never a good excuse to use multiple inheritance
Of course there is. There are plenty of reasons to use it beyond interface inheritance. "Never" is a very strong word.
Virtual destructors? A dangerous corner of the language and a potential source of bugs to be sure.
A destructor works like any other type of function. If you want the call to it to invoke the destructor on the concrete type, it must be virtual. It's really conceptually very simple.
In the end, C++0x is a pretty big deal to those who use it
Absolutely. Everyone complains about the warts of C++ and then when the committee goes and fixes some of them, everyone complains even more. I'm not enamored with the lambda syntax, for example, but it solves real problems in a pragmatic way.
This is a consequence of having to abuse the hell out of prefix bytes in order to extend the ISA in ways it was never originally designed for
It's true that there are lots of prefixes, but if you look at how those prefixes are actually used, there is a great amount of regularity. Almost every SSE/SSE2 instruction uses the same prefix encoding scheme based on whether it is scalar/packed or single/double. SSE3 has regularity across other dimensions. Later SSE ISAs have somewhat less regularity but they were also much smaller extensions.
There have been papers showing that the optimal number of GPRs for an OOO CPU with renaming is somewhere between 16 and 32
I remember reading that paper. I didn't buy it then and after almost 10 years in the HPC market I really don't buy it. Many of those limit-type papers have a fundamental flaw: they assume compilers are really, really stupid. I work on compilers that have to go out of the way to not perform certain transformations because they create too much register pressure. Now, isa-wise it gets harder to make more registers available while at the same time keeping text size reasonable but it's absolutely not true that we cannot use more than 32 registers. We can in fact use thousands, in almost every program.
Instruction decode is such a small part of a modern processor die, and so fast, that it makes no difference.
But it is a quite substantial part of the power budget for x86 chips, which is why I stipulated the hardware complexities.
the actual Intel instruction set is quite inelegant, both from a programmer standpoint
I've always been curious about this kind of statement. I hear it a lot. While I understand the complexities of silicon implementation (finding instruction lengths and decode are a PITA), I've always thought the ISA itself was rather elegant. Yes, there is cruft that could be dropped and AMD did some of that with X86-64, but overall, the day-to-day instruction set is mostly orthogonal and has a fairly regular encoding. GPR shifts, MUL and DIV are a bit quirky and the lack of a packed 64-bit integer multiply is an almost unforgivable sin, but overall, I rather like it.
What are the things you would like to see changed? We need specifics to have an interesting discussion. :)
Cosmonaut? Methinks you are not really a friend.
There are many forms this can take. In some cases (construction, for example) it means making a special effort to train and recruit people of color. In housing and land development, it means making choices not to do something harmful in a neighborhood.
For example, here in Minneapolis the county wants to put a commuter rail storage and maintenance facility right where one of the most racially diverse and poverty-stricken neighborhoods has a long-standing plan to develop housing, retail and office space. Putting the facility there would perpetuate structural racialization. For 70 years the neighborhood has been the dumping ground for the city. Addressing inequity would mean saying, "no, we're not going to do this this time. We're going to make an active choice to put this somewhere else because the history of this area compels us to do so."
Why? What did I say that was so offensive to you? It's too bad you posted anonymously. This is exactly the fear of talking about race that we need to overcome.
Thank you.
One of the videos is on coworker tolerance, and includes race among the many things it is unacceptable to treat people differently because of.
But that's exactly the problem. Sometimes we do need to treat people differently. Not on a one-to-one, personal basis but on a societal policy and goals basis. We must address discrimination and inequity head-on. We can't do that by being color-blind. Sometimes we need to set hiring goals and enforce such things to break the patterns of the past and the structures those patterns put into place.
The topic is clearly the racism going on right now, among other places also within the NIH. In that sense they should NOT be taking race into account, and probably other factors that shouldn't be considered as well.
I don't think we can yet rule out any action to address the problem. In fact we need to attack it on multiple fronts. One of those fronts is opening up opportunity for people in disadvantaged groups to get into science and engineering. There's a whole set of structures in place that are barriers to entry. Another of those fronts may in fact be setting goals around NIH grant award to minority/disadvantaged researchers. That doesn't mean giving grants to unqualified applicants. It means taking into account past discriminatory history and thinking about what future awards mean in terms of racial equity. That may mean giving preference to certain people or it may not. I don't know enough specifics on NIH policy to comment on any deeper level.
"Equal" and "Equitable" are not the same thing. My now-disappeared former reply to GP:
An equitable society is one with the same rules for all.
No. It may be one definition of an equal society, but it is not equitable. Equal is everyone getting the same pair of shoes. Equitable is everyone getting shoes that fit them well. We must take into account our past policies and the structures they have set up that hold certain classes of people back. Unless we actively dismantle those structures (and in some cases that means targeting certain classes of people for opportunity) we will never become equitable.
For example, take construction. There has been such a long history of discrimination in contracting and hiring that the good old boys networks doesn't have a lot of black folk in it. If we continue to let contracts the same way and we continue to use the same relationships to hire workers, we will continue to discriminate simply because the disadvantaged people aren't in the network. Thus we have training programs targeted at women and minority workers, goals for hiring DBE contractors, etc. It works pretty well once it's enforced. The enforcement part is the trick, though. Most places don't bother.
Excellent points. I see race and class as interlinked and inseparable. Sometimes class gets used as a substitute for race to allow people to avoid talking about race but they are two sides to the same coin. There's a reason blacks are generally less wealthy in this country, as I'm sure you know well.
Education is indeed critical but all these things are interlinked. We know that kids don't learn as well when they don't have a stable living situation, so helping the parents find jobs and providing a support structure directly helps in the education improvement effort. Far too many people in the past have advocated supposed silver bullets when in fact no such thing exists. But we do know some things that work. The problem is one of political will. We need to talk about race so that we understand that 1) it's not a scary thing to talk about, 2) confronting reality head-on is in fact a healing experience and 3) power is not a zero-sum game and opening opportunity to disadvantaged groups does not mean the majority has to give up opportunity. It does mean they have to recognize their privilege and internalize what that means.
Huh. My reply has disappeared, even when browsing all comments. How interesting.
Although I think I would disagree with him on the need to target impacts on the older community (ie: EEO). While I think it is a novel approach, it isn't appearing to have the direct rammifications of breaking the racial structures we were hoping for.
Your post was right on except perhaps for this part. The problem with things like EEO is they are typically not enforced. For example, here in Minnesota the DOT has a very long history of failing to meet or even attempt to meet goals around DBE contracting and requiring contractors to hire women and minority workers. We finally kicked up enough dust and got a Commissioner of Transportation that actually appears to give a damn. Things are moving. It takes time to undo decades of discrimination but we are indeed seeing an uptick in women and minority participation in road construction.
A big success story here was the construction of Target Field, where the county exceeded its goals around employing minority and women construction workers. So this stuff can work when there is a will behind it to make it work.
Similar things are happening in St. Louis (the I-70 project) and elsewhere. It seems the elections do matter and a President who cares can actually make things happen.
An equitable society is one with the same rules for all.
No. It may be one definition of an equal society, but it is not equitable. Equal is everyone getting the same pair of shoes. Equitable is everyone getting shoes that fit them well. We must take into account our past policies and the structures they have set up that hold certain classes of people back. Unless we actively dismantle those structures (and in some cases that means targeting certain classes of people for opportunity) we will never become equitable.
For example, take construction. There has been such a long history of discrimination in contracting and hiring that the good old boys networks doesn't have a lot of black folk in it. If we continue to let contracts the same way and we continue to use the same relationships to hire workers, we will continue to discriminate simply because the disadvantaged people aren't in the network. Thus we have training programs targeted at women and minority workers, goals for hiring DBE contractors, etc. It works pretty well once it's enforced. The enforcement part is the trick, though. Most places don't bother.
But in my view this becomes self perpetuating.
This is the very definition of structural racialization. It is institutional bias. Something is certainly driving the reported results. There may be many factors but structural racialization almost certainly is one of them.
See here.
No, it isn't. It's focusing on outcomes, which is what's important. All the good intentions you have mean nothing if the outcome indicates inequity. There may be many causes of the inequity but that fact that the inequity exists is a real problem that must be addressed.
Doesn't focusing on differences (like this study) just perpetuate racism?
No. We will not be able to erase current racial inequity unless we talk about it. Problems don't just go away by ignoring them. Ignoring them maintains the status quo, cementing the inequity further.
This isn't necessarily overt discrimination. See here. The fact that blacks fared worse indicates structural racialization. Blacks have been discriminated against for longer and more systematically than other races in the U.S.
Due to this skewing, if that small pool of top-ranked schools have relatively few black faculty, then the funding will end up going to faculty who aren't black.
That's right. In other words, it's structural racialization. See here.
That's exactly right. This is structural racialization. Past history of discrimination constructed a structure that now disadvantages minorities and often blacks in particular. In fact everything about the process may be perfectly colorblind but the fact that structures of relationship, reputation, etc. exist and were built during times of overt discrimination means that outcomes today will be inequitable.
This is why a "colorblind" society doesn't exist. Being "colorblind" simply means we will maintain the status quo and inequity will continue. This is why we need to explicitly address and take race into account when making decisions around policy, opportunity and process. We need to explicitly address racial inequity in order to become an equitable society.
Just as a quick example (I'm sure this isn't the best example, but it's all I can think of right now), closures are great for setting up ad-hock event handling
That is true.
with some objects shared by a few event handlers belonging to a window. That would be very awkward in C++, because you'd have to make sure someone is responsible for deleting the objects when the event handlers disappear
People have been doing this in C++ for a long time, albeit without the nice syntactic sugar. Boost.signals is but one example. C++ lambdas make common, yet often wordy, code easier to read and maintain. The core concept of an invokable object with state has been there since the beginning via overloading operator().
So, when the lambda actually "closes over" a variable (not just capturing its value), you can't use it outside the block where it was defined. That's unsurprising, since it would mean keeping the stack alive or "lifting" the variable from the stack into the heap, which would open a whole new can of worms.
What does your favorite language do in this case? Does its memory model have a local stack concept at all? I guess I'm not sure how any other language with a local stack model would implement this without promoting the variable to long-lived storage. Is this really a case of C++ not providing the equivalent to some other language or is it instead a case of extra C++ functionality that doesn't map onto another language's memory model well. In C++11 one can certainly create closures over objects that are global, on the heap, etc. and pass them around at will.
you should be able to return it from the function/method where it was created.
Um...you can. Thus the whole bit about capture lists. std::function is your friend.
Yes, it often is. That's why to this date there is still no Fortran I/O standard and no Fortran standard ABI. It is impossible to link Fortran objects created by multiple vendors' compilers and expect it to work. C doesn't even have a standard ABI. Why should we expect C++ to have one?
I would like to see the abilty to do "class X {int A,B,C'; void foo(); ...}" in a header file. Notice the ellipsis. This means "there is more stuff but if you have a pointer to the class you can call foo()".
I like this idea a lot. It attacks a real problem in the language. Pimpl is all well and good but it is often too much overhead for small classes. I suspect someone has written a proposal for extensible classes. It would be interesting to research any past discussion about this kind of feature.
For instance, there's never a good excuse to use multiple inheritance
Of course there is. There are plenty of reasons to use it beyond interface inheritance. "Never" is a very strong word.
Virtual destructors? A dangerous corner of the language and a potential source of bugs to be sure.
A destructor works like any other type of function. If you want the call to it to invoke the destructor on the concrete type, it must be virtual. It's really conceptually very simple.
In the end, C++0x is a pretty big deal to those who use it
Absolutely. Everyone complains about the warts of C++ and then when the committee goes and fixes some of them, everyone complains even more. I'm not enamored with the lambda syntax, for example, but it solves real problems in a pragmatic way.