Poonyman is, frankly, incorrect. Here's an example. Last month, I wired well over $100,000 to make a downpayment on a flat. I received .985 CDN per US Dollar. The same day, I went to the ATM and took out $500 CDN and received .996 per US Dollar. I know this because as soon as I got home, I checked my checking account. I was charged a $1.50 fee by the RBC. I also checked Yahoo Finance and for the current exchange rate. It was .996. I lost not one penny in the transaction beyond the $1.50 fee.
I do not use my credit card in Canada as the exchange rate costs me in the vicinity of 2.5%, certainly not worth the miles that the card gives me. Because I have a mortgage, electric, phone, and cable bills and because I like to hobby, eat in restaurants and the like, I exchange between $3,000 and $4,000 every month. I use cash for everything. I've made a study of it. I use the ATM on a regular basis and I check my conversion every time, comparing what I got charged by my bank against the official exchange rate. It doesn't matter whether I use RBC, BOM, Scotia, TD, or Desjardins. For some reason, my card doesn't work at the Laurentian ATMs. The ATM is the only way to go.
If you insist on bringing cash with you, a bank is the place to go. They will only cost you a couple of percent. It's the commercial exchange places like Cook's that will kill you.