Anyone have any good references for an introduction to the techniques used in adaptive optics? I'm looking for something a physics graduate might understand.
Hang in a minute. I've backed up everything I've said.
I have given an example that failed to vectorize in v5.0 (actually I remember receiving an upgrade at some point too). It was a joke. You just can't release software like that and expect me to take it seriously. It failed with the most trivial loop imaginable. (I used the default switches corresponding to selecting "fastest code possible" in the IDE and adeded/QxW and/Qvec_report4 and I'm running on a Dell Precision 530 - dual 2.2GHz Xeon CPUs (I also played with/O3 and some other options like/Qunroll)).
I gave the performance example (same flags and architecture as above BTW) because I had two points to make: that the Intel compiler (1) has poor vectorization and (2) is lousy at optimization generally, regardless of vectorization. I made a point of saying my code didn't vectorize well so I wasn't hiding anything. I didn't want to judge your compiler unfairly on a task for which doesn't give it as much of a chance to shine as it could. I have tried to be as honest as I can. I'm sorry if this has been confusing. I have two distinct complaints.
Going back to point (1). Yes, maybe it works in v7.0. But if some car manufacturer, say, releases a model of car that doesn't even move, would you trust them when they subsequently brought out another car that did, and that with the latter car the manufacturer produced exactly the same hype as first time? I've already paid my money for a 'vectorizing' compiler that failed to vectorize the most trivial loop. How could I be more generous? I have seen Intel compilers optimize poorly many times over the years (including now) and I have seen them vectorize poorly in the past. (He he, at one company I worked for an Intel representative actually visited my company and so we could show them there and then what the performance was like. I wish I had been at work that day.) That doesn't bode well for the future.
And just so you don't get some funny idea about me Intel bashing (I have been known to MS bash) I'd like to declare right now that I think Intel CPUs give the best price/performance money can buy etc. And I think there are some good features in the compiler: the name mangling is compatible with MSVC++ which is valuable to me, it has excellent template support (I am very much a generic programmer) and it has clear error reporting, something else I value greatly.
And so I tried my current project with the Intel compiler. Here are the approximate results of a typical run:
MSVC 6.0: 115s
IC 5.0: 145s
IC 7.0: 140s
These results are repeatable. The code is essentially a high dimensional optimizer with lots of sparse matrix arithmetic (sparse matrices means no vectorization of course). Classic textbook number crunching stuff. Lots of tight loops with great scope for optimization. One interesting thing: much of the code is generated by templates. Of course you can't really judge my statements unless I give you the code and that's not likely to happen. I've not tried any other projects, there's a limit to how long I can spend testing out everyone's claim to have the fastest compiler.
The point is that in a heat death the total amount of information processed is finite. In a big crunch scenario the crunch may happen in finite time but an infinite amount of data processing could take place in that crunch. So if we eventually have the technology (and in a few billion years we *will*, whatever) to keep reconfiguring ourselves to run on whatever hardware is available at time omega-t then we will effectively have infinite subjective lifespans in a crunch scenario.
for (int i = 0; i<100000; ++i) {
x[i] = 0;
}
return 0;
}
. ..
. ..
remark: loop was not vectorized: complex pointer expression
I thought that maybe there was some sort of variable aliasing situation going on, but the only other variables are i and x but they can happily go into registers making aliasing impossible. Am I going blind? Is there a typo in that code? Am I misisng something fundamental? Where is the 'complex pointer expression'?
I can't spend all day writing sample code so here's a performance example. Apologies for the formatting. My C++ to HTML conversion script doesn't output the strict subset used by/. This implements what APL programmers call 'grade'. It sorts a bunch of integers, not by directly sorting them, but sorting their indices.
Anyway, MSVC 6.0 compiles faster code than Intel Compiler 5.0 with/O3 optimization. If you just sort plain integers the Intel compiler is faster. But that's how it always is with people claiming their compilers are fast. Do simple examples and it works but the more complex the datastructures the slower it is. My other code that runs slower with the Intel compiler (by about 5-10%) is proprietary and includes things like fluid dynamics solvers and non-linear optimizers.
I'll admit I have sinned in one way against Intel. I did receive a phone call from an Intel engineer while on vacation a while back asking how it was going and I should have phoned back.
You have to carve out a safe subset in which MSVC++ works and stick to it. You can even fake partial template specialization but it's a little ugly. (See Czarnecki's book "Generative Programming")
Most people who have looked into this have not found your claim to be true
I am surprised. My experience with the Intel compiler spans many years with many different types of code ranging from plain ordinary C to highly generic C++ code, from fluid dynamics to string processing. My work colleagues and my friends report the same. I can test it quite easily because it's a simple matter of checking one checkbox, recompiling and timing. I got bored of it eventually.
Wait until Monday! The most trivial vectorizable loop generates the message that the loop couldn't be vectorized. As for versions 6 and 7, I've heard the story about future versions many times now.
Intel have a long history of claiming that they produce a fast compiler, after all they know the Intel specs. However I have never found this to be true over the last 7 or 8 years (I think it was called Proton years ago). I am not sure I have found any code that is significantly faster compiled with the Intel compiler and have found much that is slower. I haven't tried v6 of their compiler though. Maybe, just maybe, they've now picked up some tricks from the KAI guys.
Incidentally, vectorization in Intel C/C++ is a joke. I put so many hints into my code (aligned variables, processed stuff in suitable sized chunks etc.) and still couldn't trigger the compiler to vectorize. It's much easier to insert SSE instructions yourself.
The Intel compiler has better error reporting than MSVC++. I use it when I don't understand why MSVC++ is barfing on my template code. This is more useful than it sounds!
...that someone leaks the do-not-email registries to spammers? I don't want to receive spam. The last thing I want to do is give my email address to someone I don't know. And that includes people keeping registries.
Get your own domain ($35/year), get someone to forward mail to that domain (eg. these guys) and give everyone who needs your address a different one. If you receive spam you (1) know who sent it to you and (2) can delete it.
...as the article on the 'obsolete' computers does, you know there's something fishy going on. I'm guessing they're using some weird metric that counts certain errors fractionally and they got something like.87 errors. Or maybe it's creative accounting and they've managed to reassign an error to a different release.
Anyone else know why someone would use this phrasing?
This is truly an awful review. I wouldn't grace it with the word 'review'. It's pretty well content free. I have no feel whatsoever for what kind of book this is except that it has some stuff about C++ in it. The 'reviewer' is pissed off that the book didn't say some things that they wanted and so wrote a rant about it. This is completely irrelevant to the rest of us.
MS are free to serve up whatever they like on their servers. You don't have to go to msn.com, nobody is forcing you. So while this seems unethical nobody is being coerced into anything. An alternative might be to have laws that force companies to serve up sensible HTML to all browsers. How is that going to be implemented? That would be one hell of a legal nightmare. And what about people who write shoddy HTML for all platforms? Should they be punsihed less than people who can at least get it right for some platforms? So while we might not like what MS is doing there really isn't anything you can do about it. If you need to use msn.com, don't use Opera. If you like Opera, don't use msn.com. Nobody is forcing you to do anything.
...we already have ID cards with biometric data and nobody complains.
"I'm making this up," you protest. No I am not. The biometric data is called a photograph and the card is called a driver license.
"But you aren't forced to get one.". Yeah, right. I guess we could all just get around on foot in the US without any trouble.
Without a driver license it's difficult to pay by check or even pay credit card in many places. It certainly makes it hard to get into a bar if you don't have one. In fact, it's so difficult to get on with your life without a license that the Department of Motor Vehicles issues an id card even to people who don't drive.
I didn't say it was bad because it was easy to understand. And there's nothing ad hoc about derivatives. Sure, you can strings the words 'ad hoc' and 'derivative' together in a sentence if you like. But it doesn't really demonstrate anything.
Woah! This is too weird a coincidence. I was just reading, 10 minutes ago, about Kleene algebras and was looking at some curious taylor expansion stuff used in the proof of Parikh's theorem. Is that what you are talking about? If not, then I'd *love* to see the details you are talking about.
This stuff looks really uninteresting. No seriously, I'm saying that as a mathematician. It sets up a formalism for solving equations that are a mixture of discrete recurrence relations and continuous differential equations. But there are no new theorems and insights. Often when different branches of mathematics are combined deep insights appear. But this stuff is trivial. Any half competent mathematician who tried to unify these types of equation would probably come up with the same formalism but there's absolutely no motivation for doing it. Every example he gives can be solved by standard methods. Honestly, I think this guy is a hack mathematician. Usually when only handful of people publish papers on a subject it's because few others can understand it. In this case it's all too easy to understand - it's just not interesting.
Anyone have any good references for an introduction to the techniques used in adaptive optics? I'm looking for something a physics graduate might understand.
I have given an example that failed to vectorize in v5.0 (actually I remember receiving an upgrade at some point too). It was a joke. You just can't release software like that and expect me to take it seriously. It failed with the most trivial loop imaginable. (I used the default switches corresponding to selecting "fastest code possible" in the IDE and adeded /QxW and /Qvec_report4 and I'm running on a Dell Precision 530 - dual 2.2GHz Xeon CPUs (I also played with /O3 and some other options like /Qunroll)).
I gave the performance example (same flags and architecture as above BTW) because I had two points to make: that the Intel compiler (1) has poor vectorization and (2) is lousy at optimization generally, regardless of vectorization. I made a point of saying my code didn't vectorize well so I wasn't hiding anything. I didn't want to judge your compiler unfairly on a task for which doesn't give it as much of a chance to shine as it could. I have tried to be as honest as I can. I'm sorry if this has been confusing. I have two distinct complaints.
Going back to point (1). Yes, maybe it works in v7.0. But if some car manufacturer, say, releases a model of car that doesn't even move, would you trust them when they subsequently brought out another car that did, and that with the latter car the manufacturer produced exactly the same hype as first time? I've already paid my money for a 'vectorizing' compiler that failed to vectorize the most trivial loop. How could I be more generous? I have seen Intel compilers optimize poorly many times over the years (including now) and I have seen them vectorize poorly in the past. (He he, at one company I worked for an Intel representative actually visited my company and so we could show them there and then what the performance was like. I wish I had been at work that day.) That doesn't bode well for the future.
And just so you don't get some funny idea about me Intel bashing (I have been known to MS bash) I'd like to declare right now that I think Intel CPUs give the best price/performance money can buy etc. And I think there are some good features in the compiler: the name mangling is compatible with MSVC++ which is valuable to me, it has excellent template support (I am very much a generic programmer) and it has clear error reporting, something else I value greatly.
They get the right from the same place as they get any other right to charge tax. What's different about this?
MSVC 6.0: 115s
IC 5.0: 145s
IC 7.0: 140s
These results are repeatable. The code is essentially a high dimensional optimizer with lots of sparse matrix arithmetic (sparse matrices means no vectorization of course). Classic textbook number crunching stuff. Lots of tight loops with great scope for optimization. One interesting thing: much of the code is generated by templates. Of course you can't really judge my statements unless I give you the code and that's not likely to happen. I've not tried any other projects, there's a limit to how long I can spend testing out everyone's claim to have the fastest compiler.
The point is that in a heat death the total amount of information processed is finite. In a big crunch scenario the crunch may happen in finite time but an infinite amount of data processing could take place in that crunch. So if we eventually have the technology (and in a few billion years we *will*, whatever) to keep reconfiguring ourselves to run on whatever hardware is available at time omega-t then we will effectively have infinite subjective lifespans in a crunch scenario.
float *x = new float[100000];
for (int i = 0; i<100000; ++i) {
x[i] = 0;
}
return 0;
}
. .
. .
remark: loop was not vectorized: complex pointer expression
I thought that maybe there was some sort of variable aliasing situation going on, but the only other variables are i and x but they can happily go into registers making aliasing impossible. Am I going blind? Is there a typo in that code? Am I misisng something fundamental? Where is the 'complex pointer expression'?
Anyway, MSVC 6.0 compiles faster code than Intel Compiler 5.0 with /O3 optimization. If you just sort plain integers the Intel compiler is faster. But that's how it always is with people claiming their compilers are fast. Do simple examples and it works but the more complex the datastructures the slower it is. My other code that runs slower with the Intel compiler (by about 5-10%) is proprietary and includes things like fluid dynamics solvers and non-linear optimizers.
I'll admit I have sinned in one way against Intel. I did receive a phone call from an Intel engineer while on vacation a while back asking how it was going and I should have phoned back.
#include <windows.h>
//
// This is an abuse but it's convenient and works.
//
... %d %d %d\n,x[j[0]],x[j[1]],x[j[2]],x[j[n-3]],x[j[n-2]],x [j[n-1]]);
#include <stdio.h>
#include <algorithm>
ULONGLONG rdtsc() {
_asm rdtsc;
}
template<class T>
class array_lt {
T *array;
public:
array_lt(T *a) : array(a) { }
bool operator()(int a,int b) const {
return array[a]<array[b];
}
};
const int n = 10000000;
int x[n],j[n];
int main() {
for (int i = 0; i<n; ++i) {
j[i] = i;
x[i] = i*1234567;
}
volatile ULONGLONG t0 = rdtsc();
std::sort(j,j+n,array_lt<int>(x));
volatile ULONGLONG t1 = rdtsc();
printf(%d %d %d
printf(%I64d MCycles\n,(t1-t0)/1000000);
return 0;
}
You have to carve out a safe subset in which MSVC++ works and stick to it. You can even fake partial template specialization but it's a little ugly. (See Czarnecki's book "Generative Programming")
Wait until Monday! The most trivial vectorizable loop generates the message that the loop couldn't be vectorized. As for versions 6 and 7, I've heard the story about future versions many times now.
Incidentally, vectorization in Intel C/C++ is a joke. I put so many hints into my code (aligned variables, processed stuff in suitable sized chunks etc.) and still couldn't trigger the compiler to vectorize. It's much easier to insert SSE instructions yourself.
The Intel compiler has better error reporting than MSVC++. I use it when I don't understand why MSVC++ is barfing on my template code. This is more useful than it sounds!
Get your own domain ($35/year), get someone to forward mail to that domain (eg. these guys) and give everyone who needs your address a different one. If you receive spam you (1) know who sent it to you and (2) can delete it.
Anyone else know why someone would use this phrasing?
This is truly an awful review. I wouldn't grace it with the word 'review'. It's pretty well content free. I have no feel whatsoever for what kind of book this is except that it has some stuff about C++ in it. The 'reviewer' is pissed off that the book didn't say some things that they wanted and so wrote a rant about it. This is completely irrelevant to the rest of us.
MS are free to serve up whatever they like on their servers. You don't have to go to msn.com, nobody is forcing you. So while this seems unethical nobody is being coerced into anything. An alternative might be to have laws that force companies to serve up sensible HTML to all browsers. How is that going to be implemented? That would be one hell of a legal nightmare. And what about people who write shoddy HTML for all platforms? Should they be punsihed less than people who can at least get it right for some platforms? So while we might not like what MS is doing there really isn't anything you can do about it. If you need to use msn.com, don't use Opera. If you like Opera, don't use msn.com. Nobody is forcing you to do anything.
Not if you want the 'driver license' that doesn't let you drive.
It should be modded up. It's hilarious!
"I'm making this up," you protest. No I am not. The biometric data is called a photograph and the card is called a driver license.
"But you aren't forced to get one.". Yeah, right. I guess we could all just get around on foot in the US without any trouble.
Without a driver license it's difficult to pay by check or even pay credit card in many places. It certainly makes it hard to get into a bar if you don't have one. In fact, it's so difficult to get on with your life without a license that the Department of Motor Vehicles issues an id card even to people who don't drive.
This is the funniest troll I've read in weeks
Or something already subsumed into elementary measure theory.
Mark Hopkins and Dexter Kozen. Parikh's theorem in commutative Kleene algebra. Proc. IEEE Conf. Logic in Computer Science (LICS'99), IEEE, July 1999, 394-401. uses derivatives of elements of a Kleene algebra. Among other things elements of a Kleene algebra can be formal languages. A version of the Taylor series applies - though it only has two terms so it's a little simple.
I didn't say it was bad because it was easy to understand. And there's nothing ad hoc about derivatives. Sure, you can strings the words 'ad hoc' and 'derivative' together in a sentence if you like. But it doesn't really demonstrate anything.
Woah! This is too weird a coincidence. I was just reading, 10 minutes ago, about Kleene algebras and was looking at some curious taylor expansion stuff used in the proof of Parikh's theorem. Is that what you are talking about? If not, then I'd *love* to see the details you are talking about.
This stuff looks really uninteresting. No seriously, I'm saying that as a mathematician. It sets up a formalism for solving equations that are a mixture of discrete recurrence relations and continuous differential equations. But there are no new theorems and insights. Often when different branches of mathematics are combined deep insights appear. But this stuff is trivial. Any half competent mathematician who tried to unify these types of equation would probably come up with the same formalism but there's absolutely no motivation for doing it. Every example he gives can be solved by standard methods. Honestly, I think this guy is a hack mathematician. Usually when only handful of people publish papers on a subject it's because few others can understand it. In this case it's all too easy to understand - it's just not interesting.